diff --git a/qapi-schema-errors.json b/qapi-schema-errors.json
new file mode 100644
index 0000000..bedbb2c
--- /dev/null
+++ b/qapi-schema-errors.json
@@ -0,0 +1,616 @@
+##
+# @AddClientFailed
+#
+# Since: 0.15
+##
+{ 'error': 'AddClientFailed',
+  'description': 'Could not add client' }
+
+##
+# @AmbiguousPath
+#
+# Since: 1.1.0
+##
+{ 'error': 'AmbiguousPath',
+  'description': 'Path \'%(path)\' does not uniquely identify an object',
+  'data': {'path': 'str'} }
+
+##
+# @BadBusForDevice
+#
+# Since: 0.14
+##
+{ 'error': 'BadBusForDevice',
+  'description': 'Device \'%(device)\' can\'t go on a %(bad_bus_type) bus',
+  'data': {'device': 'str', 'bad_bus_type': 'str'} }
+
+##
+# @BaseNotFound
+#
+# Since: 1.1.0
+##
+{ 'error': 'BaseNotFound',
+  'description': 'Base \'%(base)\' not found',
+  'data': {'base': 'str'} }
+
+##
+# @BlockFormatFeatureNotSupported
+#
+# Since: 1.0
+##
+{ 'error': 'BlockFormatFeatureNotSupported',
+  'description': 'Block format \'%(format)\' used by device \'%(name)\' does not support feature \'%(feature)\'',
+  'data': {'format': 'str', 'name': 'str', 'feature': 'str'} }
+
+##
+# @BufferOverrun
+#
+# Since: 0.15
+##
+{ 'error': 'BufferOverrun',
+  'description': 'An internal buffer overran' }
+
+##
+# @BusNoHotplug
+#
+# Since: 0.14
+##
+{ 'error': 'BusNoHotplug',
+  'description': 'Bus \'%(bus)\' does not support hotplugging',
+  'data': {'bus': 'str'} }
+
+##
+# @BusNotFound
+#
+# Since: 0.14
+##
+{ 'error': 'BusNotFound',
+  'description': 'Bus \'%(bus)\' not found',
+  'data': {'bus': 'str'} }
+
+##
+# @CommandDisabled
+#
+# Since: 1.1.0
+##
+{ 'error': 'CommandDisabled',
+  'description': 'The command %(name) has been disabled for this instance',
+  'data': {'name': 'str'} }
+
+##
+# @CommandNotFound
+#
+# Since: 0.14
+##
+{ 'error': 'CommandNotFound',
+  'description': 'The command %(name) has not been found',
+  'data': {'name': 'str'} }
+
+##
+# @DeviceEncrypted
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceEncrypted',
+  'description': 'Device \'%(device)\' is encrypted (filename=%(filename))',
+  'data': {'device': 'str', 'filename': 'str'} }
+
+##
+# @DeviceFeatureBlocksMigration
+#
+# Since: 1.0
+##
+{ 'error': 'DeviceFeatureBlocksMigration',
+  'description': 'Migration is disabled when using feature \'%(feature)\' in device \'%(device)\'',
+  'data': {'device': 'str', 'feature': 'str'} }
+
+##
+# @DeviceHasNoMedium
+#
+# Since: 1.1.0
+##
+{ 'error': 'DeviceHasNoMedium',
+  'description': 'Device \'%(device)\' has no medium',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceInitFailed
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceInitFailed',
+  'description': 'Device \'%(device)\' could not be initialized',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceInUse
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceInUse',
+  'description': 'Device \'%(device)\' is in use',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceIsReadOnly
+#
+# Since: 1.1.0
+##
+{ 'error': 'DeviceIsReadOnly',
+  'description': 'Device \'%(device)\' is read only',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceLocked
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceLocked',
+  'description': 'Device \'%(device)\' is locked',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceMultipleBusses
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceMultipleBusses',
+  'description': 'Device \'%(device)\' has multiple child busses',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceNoBus
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceNoBus',
+  'description': 'Device \'%(device)\' has no child bus',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceNoHotplug
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceNoHotplug',
+  'description': 'Device \'%(device)\' does not support hotplugging',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceNotActive
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceNotActive',
+  'description': 'Device \'%(device)\' has not been activated',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceNotEncrypted
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceNotEncrypted',
+  'description': 'Device \'%(device)\' is not encrypted',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceNotFound
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceNotFound',
+  'description': 'Device \'%(device)\' not found',
+  'data': {'device': 'str'} }
+
+##
+# @DeviceNotRemovable
+#
+# Since: 0.14
+##
+{ 'error': 'DeviceNotRemovable',
+  'description': 'Device \'%(device)\' is not removable',
+  'data': {'device': 'str'} }
+
+##
+# @DuplicateId
+#
+# Since: 0.14
+##
+{ 'error': 'DuplicateId',
+  'description': 'Duplicate ID \'%(id)\' for %(object)',
+  'data': {'id': 'str', 'object': 'str'} }
+
+##
+# @FdNotFound
+#
+# Since: 0.14
+##
+{ 'error': 'FdNotFound',
+  'description': 'File descriptor named \'%(name)\' not found',
+  'data': {'name': 'str'} }
+
+##
+# @FdNotSupplied
+#
+# Since: 0.14
+##
+{ 'error': 'FdNotSupplied',
+  'description': 'No file descriptor supplied via SCM_RIGHTS' }
+
+##
+# @FeatureDisabled
+#
+# Since: 0.15
+##
+{ 'error': 'FeatureDisabled',
+  'description': 'The feature \'%(name)\' is not enabled',
+  'data': {'name': 'str'} }
+
+##
+# @InvalidBlockFormat
+#
+# Since: 0.14
+##
+{ 'error': 'InvalidBlockFormat',
+  'description': 'Invalid block format \'%(name)\'',
+  'data': {'name': 'str'} }
+
+##
+# @InvalidOptionGroup
+#
+# Since: 1.2.0
+##
+{ 'error': 'InvalidOptionGroup',
+  'description': 'There is no option group \'%(group)\'',
+  'data': {'group': 'str'} }
+
+##
+# @InvalidParameter
+#
+# Since: 0.14
+##
+{ 'error': 'InvalidParameter',
+  'description': 'Invalid parameter \'%(name)\'',
+  'data': {'name': 'str'} }
+
+##
+# @InvalidParameterCombination
+#
+# Since: 1.1.0
+##
+{ 'error': 'InvalidParameterCombination',
+  'description': 'Invalid parameter combination' }
+
+##
+# @InvalidParameterType
+#
+# Since: 0.14
+##
+{ 'error': 'InvalidParameterType',
+  'description': 'Invalid parameter type for \'%(name)\', expected: %(expected)',
+  'data': {'name': 'str', 'expected': 'str'} }
+
+##
+# @InvalidParameterValue
+#
+# Since: 0.14
+##
+{ 'error': 'InvalidParameterValue',
+  'description': 'Parameter \'%(name)\' expects %(expected)',
+  'data': {'name': 'str', 'expected': 'str'} }
+
+##
+# @InvalidPassword
+#
+# Since: 0.14
+##
+{ 'error': 'InvalidPassword',
+  'description': 'Password incorrect' }
+
+##
+# @IOError
+#
+# Since: 1.1.0
+##
+{ 'error': 'IOError',
+  'description': 'An IO error has occurred' }
+
+##
+# @JSONParseError
+#
+# Since: 0.15
+##
+{ 'error': 'JSONParseError',
+  'description': 'JSON parse error, %(message)',
+  'data': {'message': 'str'} }
+
+##
+# @JSONParsing
+#
+# Since: 0.14
+##
+{ 'error': 'JSONParsing',
+  'description': 'Invalid JSON syntax' }
+
+##
+# @KVMMissingCap
+#
+# Since: 0.14
+##
+{ 'error': 'KVMMissingCap',
+  'description': 'Using KVM without %(capability), %(feature) unavailable',
+  'data': {'capability': 'str', 'feature': 'str'} }
+
+##
+# @MigrationActive
+#
+# Since: 1.1.0
+##
+{ 'error': 'MigrationActive',
+  'description': 'There\'s a migration process in progress' }
+
+##
+# @MigrationExpected
+#
+# Since: 0.14
+##
+{ 'error': 'MigrationExpected',
+  'description': 'An incoming migration is expected before this command can be executed' }
+
+##
+# @MigrationNotSupported
+#
+# Since: 1.1.0
+##
+{ 'error': 'MigrationNotSupported',
+  'description': 'State blocked by non-migratable device \'%(device)\'',
+  'data': {'device': 'str'} }
+
+##
+# @MissingParameter
+#
+# Since: 0.14
+##
+{ 'error': 'MissingParameter',
+  'description': 'Parameter \'%(name)\' is missing',
+  'data': {'name': 'str'} }
+
+##
+# @NoBusForDevice
+#
+# Since: 0.14
+##
+{ 'error': 'NoBusForDevice',
+  'description': 'No \'%(bus)\' bus found for device \'%(device)\'',
+  'data': {'device': 'str', 'bus': 'str'} }
+
+##
+# @NotSupported
+#
+# Since: 1.0
+##
+{ 'error': 'NotSupported',
+  'description': 'Not supported' }
+
+##
+# @OpenFileFailed
+#
+# Since: 0.14
+##
+{ 'error': 'OpenFileFailed',
+  'description': 'Could not open \'%(filename)\'',
+  'data': {'filename': 'str'} }
+
+##
+# @PermissionDenied
+#
+# Since: 1.1.0
+##
+{ 'error': 'PermissionDenied',
+  'description': 'Insufficient permission to perform this operation' }
+
+##
+# @PropertyNotFound
+#
+# Since: 0.14
+##
+{ 'error': 'PropertyNotFound',
+  'description': 'Property \'%(device).%(property)\' not found',
+  'data': {'device': 'str', 'property': 'str'} }
+
+##
+# @PropertyValueBad
+#
+# Since: 0.14
+##
+{ 'error': 'PropertyValueBad',
+  'description': 'Property \'%(device).%(property)\' doesn\'t take value \'%(value)\'',
+  'data': {'device': 'str', 'property': 'str', 'value': 'str'} }
+
+##
+# @PropertyValueInUse
+#
+# Since: 0.14
+##
+{ 'error': 'PropertyValueInUse',
+  'description': 'Property \'%(device).%(property)\' can\'t take value \'%(value)\', it\'s in use',
+  'data': {'device': 'str', 'property': 'str', 'value': 'str'} }
+
+##
+# @PropertyValueNotFound
+#
+# Since: 0.14
+##
+{ 'error': 'PropertyValueNotFound',
+  'description': 'Property \'%(device).%(property)\' can\'t find value \'%(value)\'',
+  'data': {'device': 'str', 'property': 'str', 'value': 'str'} }
+
+##
+# @PropertyValueNotPowerOf2
+#
+# Since: 1.1.0
+##
+{ 'error': 'PropertyValueNotPowerOf2',
+  'description': 'Property \'%(device).%(property)\' doesn\'t take value \'%(value)\', it\'s not a power of 2',
+  'data': {'device': 'str', 'property': 'str', 'value': 'int'} }
+
+##
+# @PropertyValueOutOfRange
+#
+# Since: 1.1.0
+##
+{ 'error': 'PropertyValueOutOfRange',
+  'description': 'Property \'%(device).%(property)\' doesn\'t take value %(value) (minimum: %(min), maximum: %(max))',
+  'data': {'device': 'str', 'property': 'str', 'value': 'int', 'min': 'int', 'max': 'int'} }
+
+##
+# @QgaCommandFailed
+#
+# Since: 0.15
+##
+{ 'error': 'QgaCommandFailed',
+  'description': 'Guest agent command failed, error was \'%(message)\'',
+  'data': {'message': 'str'} }
+
+##
+# @QgaLoggingFailed
+#
+# Since: 0.15
+##
+{ 'error': 'QgaLoggingFailed',
+  'description': 'Guest agent failed to log non-optional log statement' }
+
+##
+# @QMPBadInputObject
+#
+# Since: 0.14
+##
+{ 'error': 'QMPBadInputObject',
+  'description': 'Expected \'%(expected)\' in QMP input',
+  'data': {'expected': 'str'} }
+
+##
+# @QMPBadInputObjectMember
+#
+# Since: 0.14
+##
+{ 'error': 'QMPBadInputObjectMember',
+  'description': 'QMP input object member \'%(member)\' expects \'%(expected)\'',
+  'data': {'member': 'str', 'expected': 'str'} }
+
+##
+# @QMPExtraInputObjectMember
+#
+# Since: 0.14
+##
+{ 'error': 'QMPExtraInputObjectMember',
+  'description': 'QMP input object member \'%(member)\' is unexpected',
+  'data': {'member': 'str'} }
+
+##
+# @ResetRequired
+#
+# Since: 1.0
+##
+{ 'error': 'ResetRequired',
+  'description': 'Resetting the Virtual Machine is required' }
+
+##
+# @SetPasswdFailed
+#
+# Since: 0.14
+##
+{ 'error': 'SetPasswdFailed',
+  'description': 'Could not set password' }
+
+##
+# @SockBindFailed
+#
+# Since: 1.1.0
+##
+{ 'error': 'SockBindFailed',
+  'description': 'Failed to bind socket' }
+
+##
+# @SockConnectFailed
+#
+# Since: 1.1.0
+##
+{ 'error': 'SockConnectFailed',
+  'description': 'Failed to connect to socket' }
+
+##
+# @SockConnectInprogress
+#
+# Since: 1.1.0
+##
+{ 'error': 'SockConnectInprogress',
+  'description': 'Connection can not be completed immediately' }
+
+##
+# @SockCreateFailed
+#
+# Since: 1.1.0
+##
+{ 'error': 'SockCreateFailed',
+  'description': 'Failed to create socket' }
+
+##
+# @SockListenFailed
+#
+# Since: 1.1.0
+##
+{ 'error': 'SockListenFailed',
+  'description': 'Failed to set socket to listening mode' }
+
+##
+# @TooManyFiles
+#
+# Since: 0.14
+##
+{ 'error': 'TooManyFiles',
+  'description': 'Too many open files' }
+
+##
+# @UndefinedError
+#
+# Since: 0.14
+##
+{ 'error': 'UndefinedError',
+  'description': 'An undefined error has occurred' }
+
+##
+# @UnknownBlockFormatFeature
+#
+# Since: 0.14
+##
+{ 'error': 'UnknownBlockFormatFeature',
+  'description': '\'%(device)\' uses a %(format) feature which is not supported by this qemu version: %(feature)',
+  'data': {'device': 'str', 'format': 'str', 'feature': 'str'} }
+
+##
+# @Unsupported
+#
+# Since: 0.15
+##
+{ 'error': 'Unsupported',
+  'description': 'this feature or command is not currently supported' }
+
+##
+# @VirtFSFeatureBlocksMigration
+#
+# Since: 1.0.1
+##
+{ 'error': 'VirtFSFeatureBlocksMigration',
+  'description': 'Migration is disabled when VirtFS export path \'%(path)\' is mounted in the guest using mount_tag \'%(tag)\'',
+  'data': {'path': 'str', 'tag': 'str'} }
+
+##
+# @VNCServerFailed
+#
+# Since: 0.14
+##
+{ 'error': 'VNCServerFailed',
+  'description': 'Could not start VNC server on %(target)',
+  'data': {'target': 'str'} }
