{
  "10000": "no error",

  "20000": "general error code",

  "40000": "bad request",
  "40001": "invalid request body",
  "40002": "invalid parameter name",
  "40003": "invalid parameter value",
  "40004": "invalid header",
  "40005": "invalid credential",
  "40006": "invalid connection id",
  "40007": "invalid message id",
  "40008": "invalid content length",
  "40009": "maximum message length exceeded",
  "40010": "invalid channel name",
  "40011": "stale ring state",
  "40012": "invalid client id",
  "40013": "Invalid message data or encoding",
  "40014": "Resource disposed",
  "40015": "Invalid device id",
  "40016": "Invalid message name",
  "40017": "Unsupported protocol version",
  "40018": "Unable to decode message; channel attachment no longer viable",
  "40019": "Required client library plugin not present",
  "40020": "Batch error",
  "40021": "Feature requires a newer platform version",
  "40022": "API Streamer has been shut down",
  "40023": "Action requires a newer protocol version",
  "40030": "Invalid publish request (unspecified)",
  "40031": "Invalid publish request (invalid client-specified id)",
  "40032": "Invalid publish request (impermissible extras field)",
  "40099": "Reserved for artifical errors for testing",

  "40100": "unauthorized",
  "40101": "invalid credentials",
  "40102": "incompatible credentials",
  "40103": "invalid use of Basic auth over non-TLS transport",
  "40104": "timestamp not current",
  "40105": "nonce value replayed",
  "40106": "Unable to obtain credentials from given parameters",
  "40110": "account disabled",
  "40111": "account restricted (connection limits exceeded)",
  "40112": "account blocked (message limits exceeded)",
  "40113": "account blocked",
  "40114": "account restricted (channel limits exceeded)",
  "40115": "maximum number of permitted applications exceeded",
  "40120": "application disabled",
  "40121": "token revocation not enabled for this application",
  "40125": "maximum number of rules per application exceeded",
  "40126": "maximum number of namespaces per application exceeded",
  "40127": "maximum number of keys per application exceeded",
  "40130": "key error (unspecified)",
  "40131": "key revoked",
  "40132": "key expired",
  "40133": "key disabled",
  "40133": "wrong key; cannot revoke tokens with a different key to the one that issued them",
  "40140": "token error (unspecified)",
  "40141": "token revoked",
  "40142": "token expired",
  "40143": "token unrecognised",
  "40144": "invalid JWT format",
  "40145": "invalid token format",
  "40150": "connection blocked (limits exceeded)",
  "40160": "operation not permitted with provided capability",
  "40161": "operation not permitted as it requires an identified client",
  "40162": "operation not permitted with a token, requires basic auth",
  "40163": "operation not permitted, key not marked as permitting revocable tokens",
  "40164": "channel state disabled",
  "40170": "error from client token callback",
  "40171": "no means provided to renew auth token",
  "40172": "operation only permitted with token auth",
  "40180": "unable to send location notification; location notifications can only be sent using token authentication",
  "40181": "unable to send location notification; no location token for device",

  "40300": "forbidden",
  "40310": "account does not permit tls connection",
  "40311": "operation requires tls connection",
  "40320": "application requires authentication",
  "40330": "unable to activate account due to placement constraint (unspecified)",
  "40331": "unable to activate account due to placement constraint (incompatible environment)",
  "40332": "unable to activate account due to placement constraint (incompatible site)",

  "40400": "not found",

  "40500": "method not allowed",

  "40900": "conflict",

  "41001": "push device registration expired",

  "42200": "Unprocessable entity",

  "42910": "rate limit exceeded (nonfatal): request rejected (unspecified)",
  "42911": "max per-connection publish rate limit exceeded (nonfatal): unable to publish message",
  "42912": "there is a channel iteration call already in progress; only 1 active call is permitted to execute at any one time",
  "42920": "rate limit exceeded (fatal)",
  "42921": "max per-connection publish rate limit exceeded (fatal); closing connection",
  "42922": "rate limit exceeded; too many requests",

  "50000": "internal error",
  "50001": "internal channel error",
  "50002": "internal connection error",
  "50003": "timeout error",
  "50004": "Request failed due to overloaded instance",
  "50005": "Service unavailable (service temporarily in lockdown)",

  "50010": "Ably's edge proxy service has encountered an unknown internal error whilst processing the request",
  "50210": "Ably's edge proxy service received an invalid (bad gateway) response from the Ably platform",
  "50310": "Ably's edge proxy service received a service unavailable response code from the Ably platform",

  "50320": "Active Traffic Management: traffic for this cluster is being temporarily redirected to a backup service",

  "50330": "request reached the wrong cluster; retry (used during dns changes for cluster migrations)",

  "50410": "Ably's edge proxy service timed out waiting for the Ably platform",

  "70000": "reactor operation failed",
  "70001": "reactor operation failed (post operation failed)",
  "70002": "reactor operation failed (post operation returned unexpected code)",
  "70003": "reactor operation failed (maximum number of concurrent in-flight requests exceeded)",
  "70004": "reactor operation failed (invalid or unaccepted message contents)",

  "71000": "Exchange error (unspecified)",
  "71001": "Forced re-attachment due to permissions change",
  "71100": "Exchange publisher error (unspecified)",
  "71101": "No such publisher",
  "71102": "Publisher not enabled as an exchange publisher",
  "71200": "Exchange product error (unspecified)",
  "71201": "No such product",
  "71202": "Product disabled",
  "71203": "No such channel in this product",
  "71204": "Forced re-attachment due to product being remapped to a different namespace",
  "71300": "Exchange subscription error (unspecified)",
  "71301": "Subscription disabled",
  "71302": "Requester has no subscription to this product",
  "71303": "Channel does not match the channel filter specified in the subscription to this product",

  "72000": "ingress operation failed",
  "72001": "ingress failed to publish message",
  "72002": "ingress table is unhealthy",
  "72003": "ingress cannot connect to database",

  "80000": "connection failed",
  "80001": "connection failed (no compatible transport)",
  "80002": "connection suspended",
  "80003": "disconnected",
  "80004": "already connected",
  "80005": "invalid connection id (remote not found)",
  "80006": "unable to recover connection (messages expired)",
  "80007": "unable to recover connection (message limit exceeded)",
  "80008": "unable to recover connection (connection expired)",
  "80009": "connection not established (no transport handle)",
  "80010": "invalid operation (invalid transport handle)",
  "80011": "unable to recover connection (incompatible auth params)",
  "80012": "unable to recover connection (invalid or unspecified connection serial)",
  "80013": "protocol error",
  "80014": "connection timed out",
  "80015": "incompatible connection parameters",
  "80016": "operation on superseded connection",
  "80017": "connection closed",
  "80018": "invalid connection id (invalid format)",
  "80019": "client configured authentication provider request failed",
  "80020": "continuity loss due to maximum subscribe message rate exceeded",
  "80021": "exceeded maximum permitted account-wide rate of creating new connections",
  "80030": "client restriction not satisfied",

  "90000": "channel operation failed",
  "90001": "channel operation failed (invalid channel state)",
  "90002": "channel operation failed (epoch expired or never existed)",
  "90003": "unable to recover channel (messages expired)",
  "90004": "unable to recover channel (message limit exceeded)",
  "90005": "unable to recover channel (no matching epoch)",
  "90006": "unable to recover channel (unbounded request)",
  "90007": "channel operation failed (no response from server)",
  "90010": "maximum number of channels per connection/request exceeded",
  "90021": "exceeded maximum permitted account-wide rate of creating new channels",
  "91000": "unable to enter presence channel (no clientId)",
  "91001": "unable to enter presence channel (invalid channel state)",
  "91002": "unable to leave presence channel that is not entered",
  "91003": "unable to enter presence channel (maximum member limit exceeded)",
  "91004": "unable to automatically re-enter presence channel",
  "91005": "presence state is out of sync",
  "91100": "member implicitly left presence channel (connection closed)",
  "92000": "Invalid message type: state type required",
  "92001": "Channel state max objects limit exceeded",
  "92002": "State message(s) required",
  "92003": "Invalid state message",
  "92004": "State messages do not support form encoding",
  "92005": "State operation required",
  "92006": "Invalid operation",
  "92007": "Invalid map operation",
  "92008": "Invalid counter operation",
  "92009": "State object required",
  "92010": "Invalid state object",

  "101000": "must have a non-empty name for the space",
  "101001": "must enter a space to perform this operation",
  "101002": "lock request already exists",
  "101003": "lock is currently locked",
  "101004": "lock was invalidated by a concurrent lock request which now holds the lock",

  "102000": "chat room name is invalid",
  "102001": "room attachment failed (messages)",
  "102002": "room attachment failed (presence)",
  "102003": "room attachment failed (reactions)",
  "102004": "room attachment failed (occupancy)",
  "102005": "room attachment failed (typing)",
  "102050": "room detachment failed (messages)",
  "102051": "room detachment failed (presence)",
  "102052": "room detachment failed (reactions)",
  "102053": "room detachment failed (occupancy)",
  "102054": "room detachment failed (typing)",
  "102100": "room discontinuity",
  "102101": "unable to perform operation; room is in failed state",
  "102102": "unable to perform operation; room is releasing",
  "102103": "unable to perform operation; room is released",
  "102104": "unable to perform operation; existing attempt failed",
  "102105": "unknown room lifecycle error"
}
