Error codes

Every Ably error code, its identifier, and a short description. Select a code for details on what it means, why it happens, and how to resolve it.

10xxx

CodeTitleSummary
10000
no_error
No errorA placeholder code indicating success, used where an error code is expected but the operation completed normally. It does not represent a failure.

20xxx

CodeTitleSummary
20000
general_error
General errorA generic error that does not correspond to a more specific code. It is used as a catch-all when the condition could not be classified more precisely.

40xxx

CodeTitleSummary
40000
bad_request
Bad requestThe request was rejected because it was invalid and could not be processed.
40001
invalid_request_body
Invalid request bodyThe body of the request could not be processed because it was invalid, missing required fields, or not in the expected format.
40002
invalid_request_parameter_name
Invalid request parameter nameThe request included a parameter that is not recognized or not permitted for the operation being performed.
40003
invalid_parameter_value
Invalid request parameter valueA parameter in the request was invalid, such as a value of the wrong type, outside the allowed range, or otherwise unacceptable for that parameter.
40004
invalid_request_header
Invalid request headerA header supplied with the request was missing, invalid, or held a value that was not accepted for the operation.
40005
invalid_credential
Invalid API key or tokenAn API key or token supplied with the request could not be read because it was not in the expected form. This is distinct from a key or token that is well-formed but unauthorized.
40006
message_contains_invalid_connection_id
Message contains invalid connection IDA published message referenced a connection by an ID or key that was invalid or did not match, so the message was rejected.
40007
invalid_connection_serial
Invalid connection serialAn older Ably SDK attempted to resume a connection using an invalid connection serial.
40008
invalid_content_length
Invalid content lengthMore data arrived in the request body than its Content-Length header declared, so the request was rejected.
40009
max_message_size_exceeded
Message too largeA message was rejected because it exceeded the maximum permitted size. When several messages are published in a single call, the limit applies to their combined size rather than to each one individually.
40010
invalid_channel_name
Invalid channel nameThe channel name in the request was not valid, for example because it was empty, contained characters that are not permitted, or used an unknown square-bracketed prefix.
40011
pagination_sequence_no_longer_valid
Pagination sequence no longer validAn enumeration query could not continue because the underlying set of results shifted between pages, so the pagination sequence was no longer valid.
40012
invalid_client_id
Invalid client IDThe client ID supplied was not acceptable, for example because it was empty, a wildcard, not a string, or did not match the client ID permitted by the credentials in use.
40013
invalid_data_or_encoding
Invalid message data or encodingA message was rejected because its data was of an unsupported type, or because the encoding declared for the data could not be applied or reversed.
40014
resource_disposed
Resource disposedThe operation could not complete because an internal Ably resource it targeted was temporarily unavailable, typically during routine changes on Ably's side such as failover or rebalancing.
40015
invalid_device_id
Invalid device IDThe device ID supplied for a push notification operation was missing or not in an acceptable form, so the request was rejected.
40016
invalid_message_name
Invalid message nameA message supplied a name that was invalid, so the message was rejected.
40017
unsupported_protocol_version
Unsupported protocol versionThe request specified a protocol version that Ably does not support, or omitted a version where one is required. The connection or request was rejected before processing.
40018
delta_decoding_failed
Message delta could not be appliedOn a channel using delta compression, the Ably SDK could not apply a message's delta against the preceding message, for example because that message was missed or arrived out of order. The SDK recovers automatically by reattaching the channel to receive a full message.
40019
missing_plugin
Required SDK plugin not presentThe operation needed an optional Ably SDK plugin that was not installed or registered, so it could not be carried out. Some features are provided by plugins that must be added alongside the core SDK.
40020
batch_request_error
Batch request errorA batch request completed with one or more of its items failing. Each failing item carries its own error, reported alongside this one.
40021
feature_requires_a_newer_platform_version
Feature requires a newer platform versionThe requested feature is not available on the platform version in use. It relies on capabilities added in a later version than the one handling the request.
40022
api_streamer_no_longer_offered
API Streamer no longer offeredThe request targeted API Streamer, which has been shut down and is no longer available. Requests that depend on it can no longer be served.
40023
operation_requires_a_newer_sdk_version
Operation requires a newer SDK versionThe requested operation is not supported by the Ably SDK version in use, because it relies on a capability available only in a more recent version.
40024
incompatible_site_for_history
untilAttach history request not served by attach regionA history request using untilAttach was handled by a different Ably region from the one the channel attached in. The attach point is specific to that region, so the request could not be served and no messages were returned.
40025
api_no_longer_supported
API no longer supportedA method or feature that Ably no longer supports was called. It has been removed or replaced by a newer API, so the call is rejected instead of being performed.
40030
invalid_publish_request
Invalid publish requestA publish request was rejected because it was invalid.
40031
invalid_client_specified_message_id
Invalid client-specified message idA publish was rejected because a client-supplied message id was missing, empty, or not in the required format. When several messages are published together, every message must carry a valid id following the expected pattern.
40032
invalid_message_extras_field
Invalid message extras fieldA publish was rejected because a message included an extras field that is not permitted, or one whose value was the wrong type. Only recognized extras keys with values of the expected shape are accepted.
40033
operation_canceled
Operation canceledAn operation was stopped before completing, so its result was discarded. This usually happens when the connection or request that triggered the operation ends first.
40034
too_many_messages_in_one_publish
Too many messages in one publishA publish was rejected because it contained more messages than the maximum permitted count. This is about the number of messages, not their combined size, which is limited separately.
40035
integration_message_filter_regex_not_re2_compatible
Integration message filter regex not RE2-compatibleAn integration's message filter could not be applied because its regular expression is not compatible with the RE2 syntax. Backreferences and lookaround are not supported.
40099
reserved_for_testing
Reserved for testingThis code is reserved for artificial errors produced during testing and does not indicate a genuine fault. It is not expected to appear during normal operation.
40100
unauthorized
UnauthorizedA connection or request was rejected because it was not authorized.
40101
invalid_credentials
Authentication failedThe credentials presented were not accepted, for example an API key secret that did not match, an invalid token, or no credentials supplied at all.
40102
incompatible_credentials
Incompatible credentialsThe credentials presented were valid but did not match the request, for example the client ID they permit differed from the one in use, or they belonged to a different application than the connection being resumed.
40103
invalid_use_of_basic_auth_over_non_tls_transport
Basic authentication used over an insecure connectionBasic authentication was attempted over a connection that was not secured with TLS. Basic authentication sends the API key directly, so it is only permitted over an encrypted transport.
40104
token_request_timestamp_outside_permitted_window
Token request timestamp outside permitted windowThe timestamp in a token request fell outside the window Ably accepts, so the request was rejected. This usually happens when the clock of the system that generated the token request differs significantly from real time.
40105
nonce_value_replayed
Nonce value replayedA token request was rejected because its nonce had already been used. Each nonce may be presented only once, so a repeated value is treated as a replayed request.
40106
no_valid_authentication_method_provided
No valid authentication method providedThe Ably SDK was given no usable way to authenticate: no API key, token, or token-request mechanism such as authCallback or authUrl was provided.
40110
account_disabled
Account disabledThe request was rejected because the Ably account it belongs to is disabled. While an account is disabled, its applications cannot authenticate or carry traffic.
40111
account_connection_limit_exceeded
Account connection limit exceededA new connection was refused because the account had reached the maximum number of concurrent connections permitted by its limits.
40112
account_message_limit_exceeded
Account message limit exceededThe request was rejected because the account had reached the maximum message volume permitted by its limits.
40113
account_blocked
Account blockedThe request was rejected because the Ably account it belongs to is blocked.
40114
account_channel_limit_exceeded
Account channel limit exceededThe request was refused because the account had reached the maximum number of concurrent channels permitted by its limits.
40115
account_request_limit_exceeded
Account request limit exceededThe request was refused because the account had reached its permitted limit on API and token requests.
40120
application_disabled
Application disabledThe request was rejected because the application it targets is disabled. While an application is disabled, it cannot authenticate or carry traffic.
40121
token_revocation_not_enabled
Token revocation not enabledA token revocation request was rejected because the revocation capability it requires is not enabled, either token revocation for the application or revocation by channel for the account.
40125
application_integration_limit_exceeded
Application integration limit exceededAn integration could not be created because the application had reached the maximum number of integrations permitted by its limits.
40126
application_channel_rule_limit_exceeded
Application channel rule limit exceededA channel rule could not be created because the application had reached the maximum number of channel rules permitted by its limits.
40127
application_api_key_limit_exceeded
Application API key limit exceededA new API key could not be created because the application had reached the maximum number of keys permitted by its limits.
40128
account_application_limit_exceeded
Account application limit exceededA new application could not be created because the account had reached the maximum number of applications it is permitted.
40130
key_error
API key not recognizedAuthentication failed because the API key presented was not recognized. This usually means the key does not exist or has been removed.
40131
key_revoked
API key revokedA connection or request was rejected because the API key it used has been revoked by an account admin and can no longer authenticate.
40132
key_expired
API key expiredA connection or request was rejected because the API key it used has expired. Keys can be given an expiry time, after which they can no longer authenticate.
40133
wrong_api_key_for_token_revocation
Wrong API key for token revocationA token revocation request was rejected because it was made with a different API key from the one that issued the tokens. Tokens can only be revoked using the key that issued them.
40140
token_error_unspecified
Token not acceptedThe authentication token was rejected, so the connection or request could not be authenticated. This error prompts the client to obtain a new token and retry.
40141
token_revoked
Token revokedA connection or request was rejected because the authentication token it used has been revoked. A revoked token is invalidated before its normal expiry and can no longer authenticate.
40142
token_expired
Token expiredThe client's connection or request was rejected because the authentication token had expired. Each token has an expiry time that is set when it is issued.
40143
token_unrecognized
Token not recognizedA connection or request was rejected because Ably could not find a record of the token presented. Ably stores a record of certain tokens only while they remain valid, so this often means the token had already expired.
40144
invalid_jwt
Invalid JWT tokenA JWT presented for authentication could not be parsed. The token was not well-formed, so it could not be read as a valid JSON Web Token.
40145
invalid_ably_token
Invalid Ably tokenAn Ably token presented for authentication could not be parsed, so its contents could not be read.
40150
application_connection_limit_exceeded
Application connection limit exceededA new connection was refused because the application had reached the maximum number of concurrent connections permitted for it.
40151
token_connection_limit_exceeded
Token connection limit exceededA connection was refused because the number of concurrent connections using the same token had reached the maximum permitted for a single token.
40160
capability_denied
Client lacks the required capabilityThe API key or token used by the client isn't assigned the capability required for the operation, for example publishing, subscribing, or reading history on a channel, or listing channels and connections.
40161
identified_client_required
Operation requires an identified clientThe client had no established client ID, so an operation that requires one was refused.
40162
operation_requires_basic_authentication
Operation requires Basic authenticationThe operation was refused because it can only be performed with Basic authentication using an API key, but the client authenticated with a token. Token revocation is one such operation, which must use the key that issued the tokens.
40163
token_revocation_not_enabled_for_api_key
Token revocation not enabled for API keyThe operation was refused because the API key used does not have revocable tokens enabled. Revocation applies only to tokens issued by a key with that setting turned on.
40164
token_revocation_not_enabled_for_api_key_40164
Token revocation not enabled for API keyThe operation was refused because the API key used does not have revocable tokens enabled. Revocation applies only to tokens issued by a key with that setting turned on.
40165
channel_mode_not_requested_when_attaching
Channel mode not requested when attachingPublishing a message, object, or annotation, or entering presence, was rejected because the client did not request the matching channel mode when it attached. The credentials permit the operation; the mode that enables it was not requested.
40166
unidentified_client_cannot_modify_own_messages
Unidentified client cannot modify own messagesA message update or delete was rejected because the client is unidentified (it has no clientId) but holds only the "own" form of the relevant capability, message-update-own or message-delete-own, which can never apply to a client that has no messages of its own.
40170
error_from_client_token_callback
Token callback failedAuthentication could not complete because the client's own token-request mechanism, its authCallback or authUrl, returned an error instead of a token or token request. The failure originates in the application's auth logic or endpoint, not within Ably.
40171
token_renewal_not_configured
Token renewal not configuredThe auth token expired and could not be renewed because no renewal mechanism was configured. Without an authCallback, authUrl, or API key, the Ably SDK has no way to obtain a replacement token.
40172
operation_requires_token_authentication
Operation requires Token authenticationThe operation was refused because it can only be performed with Token authentication, but the client authenticated using Basic authentication. Some operations are available only to clients using a token.
40180
apns_token_authentication_required_for_location
APNs token authentication required for location notificationA location notification was not sent because location notifications require the app's APNs credentials to use token-based authentication, but the app is not configured that way.
40181
no_location_token_for_device
No location token for deviceA location push notification was not sent to a device because the device has no location token registered. Location notifications can only be delivered to devices that have supplied one.
40182
apns_token_authentication_required_for_push_to_start
APNs token authentication required for push-to-start Live Activities notificationA live-activity push-to-start notification was not sent because push-to-start requires the app's APNs credentials to use token-based authentication, but the app is not configured that way.
40300
forbidden
ForbiddenThe request was refused because it is not permitted. This covers a range of forbidden conditions, such as a disabled account or application, or a caller that lacks permission for the operation.
40310
account_does_not_permit_tls_connections
Account does not permit TLS connectionsThe connection was rejected because it used TLS, but the account is configured not to allow TLS connections.
40311
application_requires_a_tls_connection
Application requires a TLS connectionThe connection was rejected because it did not use TLS, but the application requires TLS connections.
40320
authentication_required
Authentication requiredThe request was rejected because it carried no authentication credentials.
40330
account_not_permitted_in_cluster_or_region
Account not permitted in this cluster or regionThe request reached a cluster or region the account is not permitted to use; the accompanying error message gives the specific reason.
40331
account_not_permitted_in_cluster
Account not permitted in this clusterThe request reached an Ably cluster the account is not permitted to use.
40332
account_not_permitted_in_region
Account not permitted in this regionThe request reached a region the account is not permitted to use.
40400
not_found
Resource not foundThe requested resource does not exist, often because it has been deleted or the path or identifier used to reference it is incorrect.
40500
method_not_allowed
HTTP method not allowedThe request used an HTTP method that the endpoint does not support.
40900
conflict
ConflictThe request conflicted with the current state of the target, so it could not be completed.

41xxx

CodeTitleSummary
41001
push_device_registration_expired
Push device registration expiredThe push notification could not be delivered because the target device's registration is no longer valid. Registrations expire over time, and the device must register again before it can receive notifications.

42xxx

CodeTitleSummary
42200
unprocessable_content
Message content could not be processedA message was rejected because a content check (for example validation or moderation) did not accept it, rather than for a syntax or size problem.
42210
content_rejected
Message content rejectedA message was rejected by a content check (such as validation, moderation, or an integration), but the error does not identify which one.
42211
content_rejected_by_before_publish_integration
Message rejected by integrationA message was rejected by an integration configured to check messages before they are accepted.
42212
content_rejected_by_validation
Message rejected by content validationA message was rejected because it failed a content-validation check.
42213
content_rejected_by_moderation
Message rejected by moderationA message was rejected by a content-moderation check configured on the channel. The moderation check inspected the content and flagged it as not permitted.
42910
rate_limit_exceeded_generic
System rate limit exceededAn operation was rejected because a system rate limit was exceeded. The limit protects Ably against overload; the operation can be retried.
42911
rate_limit_exceeded_per_connection_inbound
Per-connection publish rate exceededA message was rejected because the connection published messages faster than the per-connection publish rate limit allows. Publishing far above the limit can escalate to the connection being closed.
42912
rate_limit_channel_iteration_in_progress
Channel enumeration already in progressA request to enumerate the channels active in an app was rejected because another enumeration was already running. Only one channel enumeration can run at a time for an app.
42913
rate_limit_exceeded_per_channel_inbound
Per-channel publish rate exceededA message was rejected because the rate of messages published to the channel exceeded its configured limit. The limit applies to all publishers to the channel combined, so it can be reached even when no single publisher is publishing quickly.
42914
rate_limit_exceeded_per_channel_bandwidth
Per-channel publish bandwidth exceededA message was rejected because the rate of data published to the channel exceeded its configured bandwidth limit. The limit applies to all publishers to the channel combined, so large messages can reach it even at a low message rate.
42915
rate_limit_exceeded_per_connection_outbound
Per-connection outbound message rate exceededMessages were not delivered to a connection because the rate of messages being sent to it exceeded its per-connection outbound limit. The client is notified of the gap by a channel continuity loss, which it receives as error 80020.
42916
rate_limit_exceeded_per_connection_backlog
Per-connection outbound resume rate exceededBacklog messages were not delivered to a connection because the rate of delivering them exceeded its per-connection outbound limit. The client is notified of the gap by a channel continuity loss, which it receives as error 80020.
42917
rate_limit_exceeded_account_messages
Account-wide message publish rate exceededA message was rejected because the rate of messages published across the account exceeded the configured account-wide limit. A proportion of messages are rejected to bring the account back within its limit.
42918
rate_limit_exceeded_account_api_requests
Account-wide API request rate exceededA REST API request was rejected because the request rate across the account exceeded the configured account-wide limit. A proportion of requests are rejected to bring the account back within its limit.
42920
rate_limit_exceeded_connection_fatal
Connection terminated by a fatal rate limitThe connection was closed because a rate limit was exceeded severely enough to be treated as fatal, rather than rejecting individual operations. This is the general form of a fatal rate-limit close; common cases have their own codes.
42921
rate_limit_exceeded_per_connection_inbound_fatal
Connection terminated for far exceeding the per-connection publish rateThe connection was closed because it published far above the per-connection publish rate limit, around 20 times the permitted rate. Breaches below that reject individual messages without closing the connection.
42922
rate_limit_exceeded_too_many_requests
Too many requestsA request was blocked because too many requests were received in a short period, triggering Ably's flood protection. This protects the service against excessive or abusive traffic, separately from your account's own rate limits.
42923
integration_target_rate_limit_response
Integration target responded with rate limit errorAn integration target such as an HTTP endpoint, serverless function, or message queue returned a rate-limit response when Ably invoked it. The limit is the target's own, not one of Ably's.
42924
rate_limit_exceeded_protocol_message_rate_fatal
Per-connection protocol message rate exceededA connection was terminated because the rate of inbound protocol messages from the connection exceeded its configured per-connection limit. Protocol messages include message publishes, presence updates, attach/detach requests, and other client-initiated actions on the connection.
42925
rate_limit_exceeded_account_integrations
Account-wide integration invocation rate exceededAn integration invocation was dropped because the invocation rate across the account exceeded the configured account-wide limit. A proportion of invocations are dropped to bring the account back within its limit.
42926
rate_limit_exceeded_account_push_notifications
Account-wide push notification rate exceededA push notification was dropped because the publish rate of push notifications across the account exceeded the configured account-wide limit. A proportion of push notifications are dropped to bring the account back within its limit.

50xxx

CodeTitleSummary
50000
internal_error
Internal server errorThe request could not be completed because of an unexpected error inside the Ably platform.
50001
internal_channel_error
Internal channel errorAn operation on a channel failed because of an unexpected error inside the Ably platform.
50002
internal_connection_error
Internal connection errorAn operation on a connection failed because of an unexpected error inside the Ably platform.
50003
timeout_error
Request timed out server-sideThe Ably platform did not finish handling the request within the time allowed, so the request was abandoned. This usually reflects a transient server-side delay rather than a problem with the request.
50004
server_temporarily_busy
Server temporarily busyThe request was rejected because the server handling it could not accept it at that moment. The condition is transient.
50005
service_temporarily_unavailable
Service temporarily unavailableThe request could not be served because the service was temporarily in a locked-down state, during which requests are not accepted. The condition is temporary and expected to clear.
50006
connection_superseded_by_a_newer_connection
Connection superseded by a newer connectionThe connection's state was taken over by a more recent connection, typically a reconnection or resume. This only arises on a deprecated Ably protocol version; upgrade to a recent Ably SDK release to avoid it.
50010
edge_proxy_internal_error
Edge proxy internal errorAbly's edge proxy service encountered an unknown internal error while handling the request and could not complete it.
50210
invalid_platform_response
Invalid response from the platformAbly's edge proxy service received an invalid response from the Ably platform behind it and could not complete the request. The condition is usually transient.
50310
platform_temporarily_unavailable
Platform temporarily unavailableAbly's edge proxy service received a service-unavailable response from the Ably platform behind it and could not complete the request. The condition is usually transient.
50320
traffic_temporarily_redirected
Traffic temporarily redirectedAbly's Active Traffic Management temporarily redirected traffic away from its normal path, and the request was affected while that redirection was in place. The condition is temporary.
50330
request_reached_the_wrong_cluster
Request reached the wrong clusterThe request arrived at a cluster that was not the one meant to handle it and should be retried. This can happen briefly during DNS changes while traffic is being migrated between clusters.
50410
edge_proxy_timed_out_waiting_for_platform
Edge proxy timed out waiting for platformAbly's edge proxy service did not receive a response from the Ably platform behind it within the time allowed, so the request was abandoned. The condition is usually transient.

70xxx

CodeTitleSummary
70000
integration_operation_failed
Integration operation failedAn integration could not complete an operation against its configured target.
70001
integration_invocation_failed
Integration invocation failedAn integration could not invoke its configured target: Ably either could not reach the target, or reached it but could not deliver the data. The specific failure depends on the integration type and is named in the error message.
70002
integration_target_returned_an_error_status
Integration target returned an error statusAn integration invoked an HTTP target, such as a webhook, which replied with an HTTP status outside the successful 2xx range. Ably treats any non-2xx response as a failed delivery.
70003
too_many_concurrent_integration_requests
Too many concurrent integration requestsAn integration was not invoked because the number of requests already in flight for it had reached the permitted maximum. This usually happens when a target responds more slowly than the rate at which matching messages arrive.
70004
integration_refused_to_process_a_message
Integration refused to process a messageAn integration reached its configured target, but the target did not accept the message because its contents were invalid or unsupported for that target type.
70005
amqp_message_delivery_timed_out
AMQP message delivery timed outA message could not be delivered to an Ably message queue integration because the delivery did not complete within the allowed time. This usually points to the queue being unavailable or slow to accept the message.
70006
amqp_message_queue_busy
AMQP message queue busyA message could not be delivered to an Ably message queue integration because the message queue was too busy to accept it. This is usually transient and eases as load falls.

71xxx

CodeTitleSummary
71000
exchange_error
Exchange errorA request involving Ably Exchange failed for a reason that could not be attributed to a more specific cause. Exchange lets a publisher expose channels as a product that subscribers can receive.
71001
forced_re_attachment_after_permissions_change
Forced re-attachment after permissions changeAn Exchange channel was detached and re-attached because the permissions governing access to it changed, so the existing attachment no longer reflected what the client was entitled to receive.
71100
exchange_publisher_error
Exchange publisher errorA request involving an Exchange publisher failed for a reason that could not be attributed to a more specific cause. A publisher is the party that exposes channels as an Exchange product.
71101
publisher_not_found
Publisher not foundThe Exchange request referred to a publisher that does not exist. This usually means the publisher identifier was incorrect or the publisher is no longer available.
71102
publisher_not_enabled_for_exchange
Publisher not enabled for ExchangeThe request referred to a party that exists but has not been enabled as an Exchange publisher, so it cannot expose channels as a product for subscribers to receive.
71200
exchange_product_error
Exchange product errorA request involving an Exchange product failed for a reason that could not be attributed to a more specific cause. A product is the set of channels a publisher exposes for subscribers to receive.
71201
product_not_found
Product not foundThe Exchange request referred to a product that does not exist. This usually means the product identifier was incorrect or the product is no longer available from the publisher.
71202
product_disabled
Product disabledThe Exchange product exists but has been disabled by the publisher, so its channels are not currently available to subscribers.
71203
channel_not_part_of_product
Channel not part of productThe requested channel is not one of the channels that the Exchange product exposes, so it cannot be received through that product.
71204
forced_re_attachment_after_product_remapping
Forced re-attachment after product remappingAn Exchange channel was detached and re-attached because the product was remapped to a different channel namespace, so the existing attachment no longer pointed at the channel the product now exposes.
71300
exchange_subscription_error
Exchange subscription errorA request involving an Exchange subscription failed for a reason that could not be attributed to a more specific cause. A subscription is what grants a subscriber access to a publisher's product.
71301
subscription_disabled
Subscription disabledThe subscription to the Exchange product exists but has been disabled, so its channels are not currently available to the subscriber.
71302
no_subscription_to_product
No subscription to productThe requester attempted to receive an Exchange product they are not subscribed to. Access to a product's channels requires an active subscription to that product.
71303
channel_outside_subscription_filter
Channel outside subscription filterThe requested channel does not match the channel filter defined for the subscription to the Exchange product, so it falls outside the set of channels that subscription grants access to.

72xxx

CodeTitleSummary
72000
livesync_operation_failed
LiveSync connector operation failedA LiveSync database connector hit an unexpected error while running, so the operation it was attempting did not complete.
72001
livesync_publish_failed
LiveSync connector could not publishA LiveSync database connector read a change from the database but could not publish the resulting message to Ably. The change may not have reached the channel it was destined for.
72002
livesync_table_unhealthy
LiveSync database connector is unhealthyA LiveSync database connector could not read from the table or collection it is configured to use, because that table or collection is missing, renamed, or no longer accessible to the connector.
72003
livesync_cannot_connect_db
LiveSync connector cannot reach the databaseA LiveSync database connector could not establish a connection to the database it reads from. This often points to the database being unreachable, or to incorrect connection details or credentials in the connector configuration.
72004
livesync_no_channel_key
LiveSync connector could not identify target channelA LiveSync database connector read a change but could not determine which channel to publish it to, because the change had no _ablyChannel field. Only changes that specify a channel can be published.
72005
livesync_invalid_pipeline
LiveSync MongoDB pipeline is invalidA LiveSync MongoDB connector could not start because the aggregation pipeline in its configuration was not accepted by MongoDB, for example because it references a stage or field that is not allowed.
72006
livesync_cannot_resume
LiveSync connector failed to resumeA LiveSync MongoDB connector could not resume its change stream from where it left off. It stores a resume token to continue after a restart, and this arises when that stored position cannot be read back.
72007
livesync_cannot_store_resume_token
LiveSync connector failed to track its positionA LiveSync MongoDB connector could not save its change-stream resume token to the database. The token records how far the connector has read, so that it can continue from the same point after a restart.
72008
livesync_change_stream_history_lost
LiveSync connector failed to read historyA LiveSync MongoDB connector's change stream could no longer continue from its last recorded position, because the history it needed was no longer available in the database. Changes made in the intervening period may have been missed.

80xxx

CodeTitleSummary
80000
connection_failed
Connection failedThe connection moved to the failed state, a terminal condition from which the SDK does not automatically reconnect. It differs from a temporary disconnection, where the SDK keeps retrying to restore the connection on its own.
80001
connection_failed_no_transport
Connection failed as no usable transport availableNo usable transport could be established to carry the connection, for example when the network blocks both WebSocket and the HTTP-based fallbacks.
80002
connection_suspended
Connection suspendedThe connection moved to the suspended state after being disconnected for an extended period. A connection becomes suspended once it has been disconnected for around two minutes, beyond which its state can no longer be recovered.
80003
connection_disconnected
Connection disconnectedThe connection to Ably was dropped. This is a normal, usually brief interruption, such as a network change or Ably cycling the connection, rather than a deliberate close, and the connection is expected to be re-established.
80004
connection_already_established
Connection already establishedA request to open a connection was made while a connection was already active.
80005
connection_no_longer_available
Connection no longer availableA request referenced an existing connection, but the server no longer held its state, typically because the connection had been idle and was released after a period without activity. The client is signaled to reconnect and continue on a fresh connection.
80006
connection_messages_expired
Connection continuity not guaranteed as messages expiredA connection was resumed after the messages needed to bridge the gap had expired. The connection continues, but any messages published during the disconnection may not be redelivered, so continuity across it is not guaranteed.
80007
connection_message_limit_exceeded
Connection continuity not guaranteed as message limit exceededA connection was resumed, but more messages accumulated during the disconnection than can be held for recovery. The connection continues, but some of those messages may not be redelivered, so continuity across the gap is not guaranteed.
80008
connection_recovery_failed_on_an_outdated_sdk
Connection recovery failed on an outdated SDKAn older Ably SDK could not recover a dropped connection. This code is produced only by SDK versions that use a retired version of the Ably protocol; current SDKs connect differently and do not report it.
80009
connection_not_established
Connection not establishedAn operation that requires an open connection was attempted while the client was not connected.
80010
invalid_operation_on_the_connection
Invalid operation on the connectionAn operation was attempted on a connection that was not in a valid state to carry it, such as one that had already been closed or replaced.
80011
connection_incompatible_auth_params
Connection state recovery failed due to incompatible authA dropped connection could not be recovered because the authentication details presented on the new connection did not match those of the original, so the previous connection could not be continued.
80012
connection_invalid_serial
Connection continuity not guaranteed as serial was invalidA connection was resumed without a valid connection serial to identify the point it had reached, so there was no reliable position to continue from. The connection continues, but continuity across the gap is not guaranteed.
80013
protocol_error
Protocol errorA message exchanged over the connection did not conform to the Ably protocol. The connection received something it could not interpret as a valid protocol message.
80014
connection_timed_out
Connection timed outThe connection was not established, or a response was not received, within the time allowed. This often points to a slow or unreliable network path between the client and Ably.
80015
incompatible_connection_parameters
Incompatible connection parametersThe connection could not be established because the parameters supplied when opening it were not compatible with one another or with what Ably supports.
80016
connection_replaced_by_a_newer_one
Connection replaced by a newer oneAn operation was attempted on a connection that is no longer current, so it could not be applied. A newer connection had replaced it, or its transport handle had been recycled. The client re-establishes the connection to continue.
80017
connection_closed
Connection closedThe connection was closed deliberately, rather than dropped. This is the expected outcome when the connection is closed by request and is not a fault.
80018
invalid_connection_key
Invalid connection keyA client tried to re-use a previous connection ID with a connection key, but the key was not in a valid format, so it could not keep that connection ID and was given a new one.
80019
token_request_failed
Token request failedThe Ably SDK failed to retrieve a token from the configured authUrl or authCallback.
80020
connection_discontinuity_message_rate_exceeded
Continuity lost as message delivery rate exceededMessages were dropped because they were being delivered to the connection faster than its per-connection rate limit allows. Continuity is lost on the affected channels: they keep receiving new messages, but the dropped ones are not redelivered.
80021
rate_limit_exceeded_account_connection_creation
Account-wide connection creation rate exceededA connection was refused because new connections were being opened across the account faster than the permitted rate. The limit applies to the account as a whole rather than to any single connection.
80022
connection_not_found
Connection not foundA request referred to a connection that the server could not find, so the exchange could not continue and the client is signaled to reconnect. This is a lookup failure, not a loss of message continuity.
80023
connection_re_established_in_a_different_region
Connection re-established in a different regionThe client reconnected to a different Ably region from the one it was using, so it could not keep its connection ID and was given a new one.
80024
outdated_ably_sdk_version
Outdated Ably SDK versionThe connecting Ably SDK is an old version, and the way it connects to Ably is being retired. Connections from these SDK versions increasingly fail until they can no longer connect.
80030
client_restriction_not_satisfied
Connection failed due to a client restrictionThe connection was refused because a restriction placed on the client was not met. Restrictions can limit which clients are allowed to connect based on conditions set for the application.

90xxx

CodeTitleSummary
90000
channel_operation_failed
Channel operation failedA channel operation, such as attaching, detaching, or publishing, could not be completed.
90001
channel_operation_failed_invalid_channel_state
Channel in an invalid state for the operationA channel operation was attempted while the channel was not in a state that permits it, such as publishing or performing an action on a channel that is not currently attached.
90002
channel_history_could_not_be_retrieved
Channel history could not be retrievedA request for a channel's message history could not be completed, because the position it asked to read from could not be resolved, because either the query was incomplete or the point requested is no longer retained.
90003
channel_continuity_not_guaranteed
Channel continuity not guaranteedThe client resumed a channel after being disconnected long enough that the point it had reached is no longer available to resume from. The channel reattaches from the earliest point still available, but continuity up to that point is not guaranteed.
90004
channel_backlog_too_large
Channel backlog too largeThe client requested to resume or rewind a channel whose backlog held more messages than a single replay can deliver. The channel attaches, but the messages beyond that limit are not replayed.
90005
channel_resumed_in_a_different_region
Channel resumed in a different regionThe client reconnected to a different Ably region from the one it was using, so the position it resumed from could not be applied. The channel attaches at the current point, and no earlier messages are replayed.
90006
channel_history_request_had_no_limit
Channel history request had no limitA request for a channel's message history could not be served because it asked for the complete history with no limit on how many messages to return.
90007
channel_operation_timed_out
Channel operation timed outA channel attach or detach did not complete within the expected time because no response was received from Ably. The operation may not have taken effect, and is usually the result of a transient interruption.
90008
attach_point_not_found
Attach point too old for untilAttach historyA history request using untilAttach relies on the channel's attach point still being among recent messages. In this case it was not, so the request could not be served and no messages were returned.
90009
subscribe_mode_not_enabled
Subscribe operation failed as subscribe mode not enabledMessages could not be delivered to a subscriber because the channel had not requested the subscribe mode in its channel options. Messages are only delivered to clients that request that mode, so the listener never fires.
90010
too_many_channels
Too many channelsAn operation was rejected because it would exceed the maximum number of channels permitted, either the channels attached to a single connection or those included in a single batch request.
90021
rate_limit_exceeded_account_channel_creation
Account-wide channel creation rate exceededRequests were rejected because the rate at which new channels were being created across the account exceeded the permitted limit. The limit counts channels newly activated within a period, not those already active.

91xxx

CodeTitleSummary
91000
cannot_enter_presence_without_a_client_id
Cannot enter presence without a clientIdA request to enter the presence set was rejected because the connection had no clientId. Presence members are identified by their clientId, so one is required to enter.
91001
cannot_enter_presence_in_the_channels_current_state
Cannot enter presence in the channel's current stateA request to enter the presence set was rejected because the channel was not in a state that permits presence operations, such as a channel that is detached, suspended, or failed.
91002
cannot_leave_presence_that_was_never_entered
Cannot leave presence that was never enteredA request to leave the presence set was rejected because the clientId was not a member of it.
91003
too_many_presence_members
Too many presence membersA request to enter the presence set was rejected because the channel already held the maximum number of presence members permitted. The limit counts the members present on a single channel.
91004
unable_to_automatically_re_enter_presence
Unable to automatically re-enter presenceAfter reconnecting, the Ably SDK tried to re-enter the presence set on the client's behalf but the attempt did not succeed, so the member was not restored to the presence set.
91005
presence_state_out_of_sync
Presence state out of syncThe presence set held by the client no longer matched the state on Ably. The presence members are re-synchronized so the two are brought back into agreement.
91006
total_presence_set_data_too_large
Total presence set data too largeA request to enter the presence set was rejected because the combined size of the data held by members on the channel would exceed the maximum permitted for the presence set.
91007
unexpected_loss_of_presence_membership
Unexpected loss of presence membershipThe connection was removed from the presence set despite still being active, so the channel was detached to prompt the Ably SDK to automatically re-enter presence. The condition is usually transient.
91008
presence_subscribe_mode_not_enabled
Presence operation failed as presence_subscribe mode not enabledThe presence members of a channel could not be retrieved because the channel had not requested the presence_subscribe mode in its channel options. Presence state is only delivered to clients that request that mode.
91100
presence_member_left_as_their_connection_closed
Presence member left as their connection closedA presence member was removed from the presence set because it was no longer present, usually because the connection it entered on was closed.

92xxx

CodeTitleSummary
92000
invalid_object_message
Invalid LiveObjects messageA LiveObjects message was rejected because it was invalid or did not conform to the expected structure. This usually indicates a problem with how the object operation was constructed before it was sent.
92001
object_limit_exceeded
LiveObjects limit exceededA LiveObjects operation was rejected because it exceeded a size limit set by the account: either the channel's total object size, or the maximum size of a single object.
92002
operation_on_tombstone_object
LiveObjects operation on a deleted objectAn operation could not be applied because the target LiveObject had already been deleted. A deleted object is retained only as a marker, or tombstone, and can no longer be modified.
92003
object_root_deleted
LiveObjects root has been deletedA LiveObjects object tree could not be fetched because the object at its root had already been deleted. A deleted object is retained only as a marker, or tombstone, and cannot serve as the root of a tree.
92004
object_not_found
LiveObjects object not foundA LiveObjects operation referenced an object that does not exist on the channel. The object may never have been created, or it may have been removed before the operation was applied.
92005
no_objects_at_path
LiveObjects path matched no objectsA LiveObjects operation specified a path within an object tree that did not resolve to any object. The path may be incorrect, or the objects it points to may not exist.
92006
object_operation_missing_identifier_or_path
LiveObjects operation missing object referenceA LiveObjects operation could not be performed because it specified neither an object identifier nor a path.
92007
object_operation_path_not_processable
LiveObjects operation not valid for the pathA LiveObjects operation could not be applied to the object at the specified path, because the operation is not compatible with the kind of object found there.
92008
objects_sync_did_not_complete
LiveObjects sync did not completeA LiveObjects operation could not be applied because the channel had not finished synchronizing its objects.

93xxx

CodeTitleSummary
93001
annotation_subscribe_mode_not_enabled
Annotation listener without annotation_subscribe modeAn annotation listener was added to a channel that had not requested the annotation_subscribe mode in its channel options. Annotations are only delivered to clients that explicitly request them, so the listener will not receive anything.
93002
message_updates_not_enabled
Message annotations, updates, appends, and deletes not enabledAn operation could not be performed because the channel did not have the 'Message annotations, updates, appends, and deletes' rule enabled.

101xxx

CodeTitleSummary
101000
space_name_is_empty
Space name is emptyA space could not be created or referenced because no name was supplied.
101001
space_must_be_entered_first
Space must be entered firstAn operation was attempted that requires having first entered the space. In Ably Spaces, actions such as updating a member's location or profile are only available once the space has been entered.
101002
lock_request_already_pending
Lock request already pendingA lock could not be requested because a request for the same lock is already in progress. In Ably Spaces, a member may only have one outstanding request for a given lock at a time.
101003
lock_already_held
Lock already heldA lock could not be acquired because it is currently held by another member. In Ably Spaces, only one member can hold a given lock at a time, and it must be released before another can take it.
101004
lock_invalidated_by_concurrent_request
Lock invalidated by concurrent requestA lock that appeared to be acquired was invalidated because another member requested the same lock concurrently and now holds it.

102xxx

CodeTitleSummary
102000
invalid_chat_room_name
Invalid chat room nameA Chat room could not be used because the name supplied for it was not valid.
102001
room_attach_failed_for_messages
Room attach failed for messagesAttaching a Chat room failed because its messages feature could not be attached.
102002
room_attach_failed_for_presence
Room attach failed for presenceAttaching a Chat room failed because its presence feature could not be attached.
102003
room_attach_failed_for_reactions
Room attach failed for reactionsAttaching a Chat room failed because its reactions feature could not be attached.
102004
room_attach_failed_for_occupancy
Room attach failed for occupancyAttaching a Chat room failed because its occupancy feature could not be attached.
102005
room_attach_failed_for_typing
Room attach failed for typingAttaching a Chat room failed because its typing feature could not be attached.
102050
room_detach_failed_for_messages
Room detach failed for messagesDetaching a Chat room failed because its messages feature could not be detached.
102051
room_detach_failed_for_presence
Room detach failed for presenceDetaching a Chat room failed because its presence feature could not be detached.
102052
room_detach_failed_for_reactions
Room detach failed for reactionsDetaching a Chat room failed because its reactions feature could not be detached.
102053
room_detach_failed_for_occupancy
Room detach failed for occupancyDetaching a Chat room failed because its occupancy feature could not be detached.
102054
room_detach_failed_for_typing
Room detach failed for typingDetaching a Chat room failed because its typing feature could not be detached.
102100
room_continuity_not_guaranteed
Room continuity not guaranteedA discontinuity was detected on the Chat room, so the continuity of messages could not be guaranteed. This usually follows a disconnection long enough that the room could not resume from where it left off.
102101
room_is_in_the_failed_state
Room is in the failed stateThe operation could not be performed because the Chat room is in the failed state. A room enters this state when an earlier operation on it failed and could not recover.
102102
room_is_being_released
Room is being releasedThe operation could not be performed because the Chat room is in the process of being released.
102103
room_has_been_released
Room has been releasedThe operation could not be performed because the Chat room has already been released.
102104
room_operation_failed_after_earlier_attempt
Room operation failed after earlier attemptThe operation failed because a preceding attempt to perform it had already failed.
102105
unknown_room_lifecycle_error
Unknown room lifecycle errorAn unexpected error occurred in the Chat room lifecycle that does not correspond to a known condition.
102106
room_released_before_operation_completed
Room released before operation completedThe operation could not complete because the Chat room was released while it was still in progress.
102107
room_already_exists_with_different_options
Room already exists with different optionsA Chat room with the same name already exists but was created with different options. A room must be released before it can be requested again with a different configuration.
102108
feature_not_enabled_in_room_options
Feature not enabled in room optionsThe operation required a feature that was not enabled when the Chat room was created. Features such as presence or typing indicators must be enabled in the room options to be used.
102109
history_requested_for_an_unsubscribed_listener
History requested for an unsubscribed listenerA request for the messages published before a listener's subscription point was rejected because that listener was not subscribed. This history is only available while the listener is subscribed to the room.
102110
channel_serial_not_defined
Channel serial not definedA channel serial was expected but was not defined at the point it was needed.
102111
channel_options_modified_after_request
Channel options modified after requestChannel options could not be changed because the underlying channel had already been requested.
102112
room_is_in_an_invalid_state
Room is in an invalid stateThe operation could not be performed because the Chat room was in a state that does not permit it.
102113
sequential_execution_could_not_be_enforced
Sequential execution could not be enforcedThe operation failed because its sequential execution could not be enforced. Chat room lifecycle operations are expected to run one at a time, and that ordering could not be guaranteed.
102200
hook_used_outside_its_provider
Hook used outside its providerAn Ably Chat React hook was used in a component that is not wrapped in the required provider. The hooks depend on context supplied by a provider higher in the component tree.
102201
component_unmounted_before_completion
Component unmounted before completionAn operation started by the Ably Chat React hooks could not finish because the React component was unmounted while it was still in progress.
102202
presence_data_could_not_be_fetched
Presence data could not be fetchedThe Ably Chat React hooks could not retrieve presence data after the maximum number of retries. This usually points to a persistent problem reaching presence rather than a transient one.

103xxx

CodeTitleSummary
103000
unable_to_publish_push_notification
Push notification internal errorThe push notification was not delivered because of an unexpected error within the Ably platform during preparation, dispatch, or requeue. The cause is not related to the contents of the request or the device's registration.
103001
push_publish_retries_exhausted
Push notification retry limit reachedThe push notification was not delivered because the configured retry limit was reached after repeated unsuccessful delivery attempts. The underlying failures are typically transient, such as provider outages, rate limits, or network errors.
103002
push_direct_publish_no_recipient
Push notification recipient missingThe push notification was not delivered because the direct push request was submitted without a recipient device. Direct push targets a single device by ID and cannot be processed when no recipient is supplied.
103003
push_cannot_handle_body
Push notification body invalidThe push notification was not delivered because its body could not be processed. This typically indicates a malformed or unsupported message structure in the publish request.
103004
push_notification_rejected_by_provider
Push notification rejected by providerThe push notification was not delivered because the provider (APNs, FCM, or WebPush) rejected the request due to a problem with the payload or delivery parameters. Typical causes include an oversized payload, a disallowed topic, or an unsupported field.
103005
push_device_token_invalid
Push device token invalidThe push notification was not delivered because the provider (APNs, FCM, or WebPush) rejected the device's push token as invalid for the configured application. The token may have been issued under different credentials or for a different application.
103006
push_transport_not_configured
Push transport not configuredThe push notification was not delivered because the device's push notification provider (APNs, FCM, or WebPush) has no credentials configured on the application. No deliveries can be made through that provider until the credentials are present.
103007
push_notification_provider_unreachable
Push notification provider unreachableThe push notification was not delivered because the provider (APNs, FCM, or WebPush) could not be reached, returned a server error, or sent a response that could not be processed. The condition is usually transient.
103008
push_transport_credentials_invalid
Push transport credentials invalidA push notification could not be sent because the credentials configured for the target platform were rejected or had expired, such as an expired APNs certificate.