Reference
Error reference
Interpret HTTP status, error.code and error.numeric_code together for the current operation. A numeric code can refine a cause while preserving the original HTTP status and code. Use error.message for diagnosis, not program branches, and keep request_id.
Error response format
Read HTTP status, error.code and error.numeric_code together in the context of the current operation. Numeric codes are strings. Keep request_id for diagnosis; it is not an idempotency key or a task identifier.
- request_id
- Required string generated by the server for this HTTP request; also returned in X-Request-Id. Share it when reporting a problem.
- client_request_id
- Optional string echoed only when the request carries a valid X-Request-Id header. It helps client reconciliation and does not replace the server request_id.
- error.code
- Stable snake_case machine-readable code retained for compatibility. Interpret it with the operation and HTTP status.
- error.numeric_code
- Five-digit string that can refine the cause without changing the legacy code or HTTP status. It is not a globally unique operation identifier.
- error.message
- Human-readable English diagnostic text. It can vary with the provider cause and may change; do not parse it or use it for program branches.
Illustrative error JSON
{
"request_id": "req_example",
"error": {
"code": "invalid_request",
"numeric_code": "10000",
"message": "Invalid request parameters"
},
"client_request_id": "<CLIENT_REQUEST_ID>"
}
400 Bad Request
auth_mode_phone_required20019Provide provider_data.phone when creating the account for this authorization mode.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "auth_mode_phone_required", "numeric_code": "20019", "message": "Phone number is required for this auth mode" } }create_api_key_failed11101The operation was rejected. Check the request and keep request_id for diagnosis.
What to do: List or query existing resources to check whether creation already took effect before creating another. Correct the underlying cause and keep request_id; do not create duplicates automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "create_api_key_failed", "numeric_code": "11101", "message": "Failed to create API key" } }invalid_conversation_type37000type must be user, group or channel.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "invalid_conversation_type", "numeric_code": "37000", "message": "Field 'type' must be one of: user, group, channel" } }invalid_provider30000Check the channel identifier in the URL.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "invalid_provider", "numeric_code": "30000", "message": "Invalid provider parameter" } }invalid_reply_token36006The reply token cannot be read. Copy data.message.reply_token from the inbound event unchanged.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "invalid_reply_token", "numeric_code": "36006", "message": "Invalid or unreadable reply_token" } }invalid_request10000Check the JSON body and required fields.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid request parameters" } }invalid_target_workspace11003The workspace override target is empty or malformed. Remove the override header and use the API key belonging to the intended workspace.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }provider_invalid_request30001Check the channel-specific fields and formats.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "Provider rejected the request" } }rotate_api_key_failed11103The operation was rejected. Check the request and keep request_id for diagnosis.
What to do: Check the target key under the current workspace before changing or rotating it. A missing target is not repaired by retrying. After an unknown rotation result, confirm which credentials remain usable without exposing key material.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "rotate_api_key_failed", "numeric_code": "11103", "message": "Failed to rotate API key" } }unsupported_action30005This account action is not recognized; use a documented action.
What to do: Use a channel and action listed as supported. Repeating the same request does not add capabilities or grant beta access.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unsupported_action", "numeric_code": "30005", "message": "Action not supported" } }unsupported_conversation_type37001The channel does not support this operation; choose a supported operation.
What to do: Use a channel and action listed as supported. Repeating the same request does not add capabilities or grant beta access.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unsupported_conversation_type", "numeric_code": "37001", "message": "Operation not supported for this conversation type" } }unsupported_message_type36000Choose a message.type supported by this channel.
What to do: Use a channel and action listed as supported. Repeating the same request does not add capabilities or grant beta access.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unsupported_message_type", "numeric_code": "36000", "message": "Message type not supported" } }unsupported_provider_auth_mode20018Choose an auth_mode supported by this channel.
What to do: Use a channel and action listed as supported. Repeating the same request does not add capabilities or grant beta access.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unsupported_provider_auth_mode", "numeric_code": "20018", "message": "Auth mode not supported by this provider" } }update_api_key_failed11102The operation was rejected. Check the request and keep request_id for diagnosis.
What to do: Check the target key under the current workspace before changing or rotating it. A missing target is not repaired by retrying. After an unknown rotation result, confirm which credentials remain usable without exposing key material.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_api_key_failed", "numeric_code": "11102", "message": "Failed to update API key" } }update_workspace_failed41001The operation was rejected. Check the request and keep request_id for diagnosis.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_workspace_failed", "numeric_code": "41001", "message": "Failed to update workspace" } }wallet_invalid_request20021Check the wallet account request and any optional Idempotency-Key header.
What to do: Correct the parameters for this operation and channel before requesting again. Repeating an unchanged invalid request will not resolve the error.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "wallet_invalid_request", "numeric_code": "20021", "message": "Invalid wallet account request" } }
401 Unauthorized
invalid_api_key11001Check whether the API key is correct and enabled.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }missing_api_key11000Add the X-Api-Key header.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }
403 Forbidden
beta_feature_not_enabled41002The workspace needs private-beta access for calling APIs and explicit call-event subscriptions.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "beta_feature_not_enabled", "numeric_code": "41002", "message": "Beta feature not enabled" } }cors_forbidden11009The CORS origin, method or headers are not allowed. Check the calling environment.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "cors_forbidden", "numeric_code": "11009", "message": "CORS preflight request is not allowed" } }post_inaccessible39005Posts & Comments
Check the account and the target identifiers actually required by this endpoint. post_not_found confirms that the post is missing. comment_not_found means the target top-level comment was not found after verification, not that all replies were searched. post_inaccessible means inaccessible; it does not prove absence or identify the cause. Keep the error and investigate before choosing the next action.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "post_inaccessible", "numeric_code": "39005", "message": "Post is not accessible" } }workspace_override_forbidden11002The request attempts a workspace override that this API key is not allowed to use. Remove the override header and use the API key belonging to the intended workspace.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }
404 Not Found
account_not_found20020Check account_id and use an X-Api-Key for the workspace that owns the account. An account not found in this workspace cannot be accessed with this key.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "account_not_found", "numeric_code": "20020", "message": "Account not found" } }account_operation_not_found20029The operation is absent or outside this workspace. Check the original operation_id and API key scope.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "account_operation_not_found", "numeric_code": "20029", "message": "Account operation not found" } }call_not_found38003Calls
The call does not exist under this account and workspace.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "call_not_found", "numeric_code": "38003", "message": "Call not found" } }comment_not_found39001Posts & Comments
Check the account and the target identifiers actually required by this endpoint. post_not_found confirms that the post is missing. comment_not_found means the target top-level comment was not found after verification, not that all replies were searched. post_inaccessible means inaccessible; it does not prove absence or identify the cause. Keep the error and investigate before choosing the next action.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "comment_not_found", "numeric_code": "39001", "message": "Comment not found" } }contact_not_found35000The contact was not found under this account; check the identifier.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "contact_not_found", "numeric_code": "35000", "message": "Contact not found" } }conversation_not_found37002The channel could not find this conversation; check the identifier and account.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "conversation_not_found", "numeric_code": "37002", "message": "Conversation not found" } }group_not_found34004The group was not found under this account; check the group ID.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "group_not_found", "numeric_code": "34004", "message": "Group not found" } }not_found10001Check the API path and method.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "not_found", "numeric_code": "10001", "message": "Endpoint not found" } }post_not_found39000Posts & Comments
Check the account and the target identifiers actually required by this endpoint. post_not_found confirms that the post is missing. comment_not_found means the target top-level comment was not found after verification, not that all replies were searched. post_inaccessible means inaccessible; it does not prove absence or identify the cause. Keep the error and investigate before choosing the next action.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "post_not_found", "numeric_code": "39000", "message": "Post not found" } }target_workspace_not_found11004The overridden workspace was not found or is unavailable. Verify workspace ownership, remove the override header and use the intended workspace’s API key; repeated requests do not grant access.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }
409 Conflict
account_allocation_busy20011Account allocation is busy; retry after a short delay.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "account_allocation_busy", "numeric_code": "20011", "message": "Allocation is busy in the current region; please retry later" } }account_already_authorized20016The account has already completed authorization and this action refuses duplicate authorization. Refresh the authorization state and reuse the completed result; do not repeatedly authorize or cancel in a loop.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "account_already_authorized", "numeric_code": "20016", "message": "Account is already authorized; re-authentication is not required" } }account_binding_not_found30006The account has no active channel connection binding; check its status.
What to do: Query authorization and runtime status, then choose refresh, start or reconnect only when appropriate for the intended state and channel. A connection problem alone does not prove logout. Confirm running before dependent business operations.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "account_binding_not_found", "numeric_code": "30006", "message": "Account is not bound to an available server" } }account_webhook_already_exists40008Webhook Endpoints
List the account’s independent endpoints using account_id and update the existing active endpoint. To switch, deactivate the old active endpoint before activating another. Do not automatically retry creation or reactivation.
What to do: Read the endpoint configuration and account scope before resubmitting. PATCH replaces settings; retain the intended subscriptions, signing configuration and retry policy. For an active-endpoint conflict, update the existing endpoint or deactivate it before enabling another.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "account_webhook_already_exists", "numeric_code": "40008", "message": "Account already has an active webhook endpoint" } }billing_quote_changed20027The workspace price or pricing basis changed. Confirm the original result, then request a new quote.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "billing_quote_changed", "numeric_code": "20027", "message": "Pricing changed; request a new quote" } }billing_quote_expired20026The quote expired. Confirm any earlier creation result before requesting another quote.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "billing_quote_expired", "numeric_code": "20026", "message": "Billing quote expired" } }billing_quote_invalid20025The quote does not match this workspace or request. Confirm the original result, then obtain a matching quote.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "billing_quote_invalid", "numeric_code": "20025", "message": "Billing quote does not match this request" } }call_already_active38000Calls
The account already has a managed active call. Check the known call and the intended action; this error alone does not instruct you to end a call or repeatedly query the same failing operation.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "call_already_active", "numeric_code": "38000", "message": "Account already has an active call" } }duplicate_provider_account20015This channel identity is already connected to another account in this workspace.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "duplicate_provider_account", "numeric_code": "20015", "message": "A provider account with the same identity already exists in this workspace" } }no_allocatable_server20013No capacity is available in this region; query regions for an allocatable option.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "no_allocatable_server", "numeric_code": "20013", "message": "No allocatable server in the current region" } }provider_account_mismatch20017The channel identity in the request does not match the account binding.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "provider_account_mismatch", "numeric_code": "20017", "message": "Authenticated provider account does not match the bound account; re-scan with the original account" } }provider_not_ready30009The connection is not ready. Check authorization and runtime_status before retrying.
What to do: Query authorization and runtime status, then choose refresh, start or reconnect only when appropriate for the intended state and channel. A connection problem alone does not prove logout. Confirm running before dependent business operations.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }wallet_account_creation_in_progress20030Another wallet account is being created in this workspace. Wait for it to complete before trying again.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "wallet_account_creation_in_progress", "numeric_code": "20030", "message": "Account creation is in progress; please wait" } }wallet_idempotency_conflict20024This idempotency key belongs to different business parameters. Reconcile the original operation before starting another.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "wallet_idempotency_conflict", "numeric_code": "20024", "message": "Idempotency key was used for a different request" } }wallet_insufficient_funds20023The wallet cannot cover this account purchase. The owner can top up, then confirm the original request.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "wallet_insufficient_funds", "numeric_code": "20023", "message": "Insufficient wallet balance" } }wallet_workspace_disabled20022New wallet purchases are disabled; do not assume existing account operations are cancelled.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "wallet_workspace_disabled", "numeric_code": "20022", "message": "New wallet purchases are disabled" } }workspace_account_quota_exceeded20014The workspace messaging account limit has been reached; check usage and quota.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "workspace_account_quota_exceeded", "numeric_code": "20014", "message": "Workspace account quota exceeded" } }
422 Unprocessable Entity
contact_not_found35000GET /contacts/info reported Conversation not found. Check the target identifier and the account used for the lookup.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "contact_not_found", "numeric_code": "35000", "message": "Conversation not found" } }
500 Internal Server Error
block_contact_failed35005Block contact: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "block_contact_failed", "numeric_code": "35005", "message": "Failed to block contact" } }call_control_failed38004Calls
The call could not be queried or ended. Check the current operation and call state.
What to do: Query the managed call and its call_id/state before creating or ending another call. Preparing is not dialing or answered; ended and failed are terminal states. A failed state alone is not a reason to repeat hangup.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "call_control_failed", "numeric_code": "38004", "message": "Failed to control call" } }create_account_failed20002Create account: resource creation failed or could not be confirmed.
What to do: List or query existing resources to check whether creation already took effect before creating another. Correct the underlying cause and keep request_id; do not create duplicates automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "create_account_failed", "numeric_code": "20002", "message": "Failed to create account" } }create_call_failed38002Calls
Create a call: resource creation failed or could not be confirmed.
What to do: List or query existing resources to check whether creation already took effect before creating another. Correct the underlying cause and keep request_id; do not create duplicates automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "create_call_failed", "numeric_code": "38002", "message": "Failed to create call" } }create_contact_failed35003Add contact: resource creation failed or could not be confirmed.
What to do: List or query existing resources to check whether creation already took effect before creating another. Correct the underlying cause and keep request_id; do not create duplicates automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "create_contact_failed", "numeric_code": "35003", "message": "Failed to create contact" } }create_group_failed34002Create a group: resource creation failed or could not be confirmed.
What to do: List or query existing resources to check whether creation already took effect before creating another. Correct the underlying cause and keep request_id; do not create duplicates automatically.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "create_group_failed", "numeric_code": "34002", "message": "Failed to create group" } }create_webhook_endpoint_failed40001Create webhook endpoint: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the endpoint configuration and account scope before resubmitting. PATCH replaces settings; retain the intended subscriptions, signing configuration and retry policy. For an active-endpoint conflict, update the existing endpoint or deactivate it before enabling another.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "create_webhook_endpoint_failed", "numeric_code": "40001", "message": "Failed to create webhook endpoint" } }deactivate_webhook_endpoint_failed40004Deactivate webhook endpoint: stopping or deactivation could not be confirmed; preserving the intended stopped state matters.
What to do: Query the current state to confirm whether stopping or deactivation took effect. Do not start or reconnect a resource that you intended to stop.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "deactivate_webhook_endpoint_failed", "numeric_code": "40004", "message": "Failed to deactivate webhook endpoint" } }delete_account_failed20004Delete account: the deletion result could not be confirmed.
What to do: Query the resource to determine whether deletion already succeeded, then decide whether another delete is needed. Keep request_id and follow this endpoint’s documented success response.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "delete_account_failed", "numeric_code": "20004", "message": "Failed to delete account" } }delete_label_failed37014Delete label: the deletion result could not be confirmed.
What to do: Query the resource to determine whether deletion already succeeded, then decide whether another delete is needed. Keep request_id and follow this endpoint’s documented success response.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "delete_label_failed", "numeric_code": "37014", "message": "Failed to delete label" } }delete_webhook_endpoint_failed40005Delete webhook endpoint: the deletion result could not be confirmed.
What to do: Query the resource to determine whether deletion already succeeded, then decide whether another delete is needed. Keep request_id and follow this endpoint’s documented success response.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "delete_webhook_endpoint_failed", "numeric_code": "40005", "message": "Failed to delete webhook endpoint" } }edit_message_failed36005Edit message: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "edit_message_failed", "numeric_code": "36005", "message": "Failed to edit message" } }get_account_failed20001Get account: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_account_failed", "numeric_code": "20001", "message": "Failed to get account" } }get_auth_state_failed20006Get authentication state: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_auth_state_failed", "numeric_code": "20006", "message": "Failed to get account auth state" } }get_contact_failed35002Get contact: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_contact_failed", "numeric_code": "35002", "message": "Failed to get contact" } }get_contact_membership_failed35004Check contact membership: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_contact_membership_failed", "numeric_code": "35004", "message": "Failed to get contact membership" } }get_conversation_failed37004Get conversation: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_conversation_failed", "numeric_code": "37004", "message": "Failed to get conversation" } }get_group_failed34001Get group details: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_group_failed", "numeric_code": "34001", "message": "Failed to get group" } }get_group_invite_code_failed34010Get group invite link: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_group_invite_code_failed", "numeric_code": "34010", "message": "Failed to get group invite code" } }get_session_failed20005Read the current account session: the service could not load the current session.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_session_failed", "numeric_code": "20005", "message": "Failed to get account session" } }get_webhook_endpoint_failed40002Get webhook endpoint: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_webhook_endpoint_failed", "numeric_code": "40002", "message": "Failed to get webhook endpoint" } }get_workspace_failed41000Get current workspace: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_workspace_failed", "numeric_code": "41000", "message": "Failed to get workspace" } }leave_group_failed34003Leave a group: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "leave_group_failed", "numeric_code": "34003", "message": "Failed to leave group" } }list_accounts_failed20000List accounts: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_accounts_failed", "numeric_code": "20000", "message": "Failed to list accounts" } }list_api_keys_failed11100List API keys: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_api_keys_failed", "numeric_code": "11100", "message": "Failed to list API keys" } }list_blocklist_failed35007Get blocklist: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_blocklist_failed", "numeric_code": "35007", "message": "Failed to list blocklist" } }list_contacts_failed35001List contacts: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_contacts_failed", "numeric_code": "35001", "message": "Failed to list contacts" } }list_conversation_labels_failed37012List conversation labels: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_conversation_labels_failed", "numeric_code": "37012", "message": "Failed to list conversation labels" } }list_conversation_members_failed37005List conversation members: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_conversation_members_failed", "numeric_code": "37005", "message": "Failed to list conversation members" } }list_conversations_failed37003List conversations: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_conversations_failed", "numeric_code": "37003", "message": "Failed to list conversations" } }list_group_join_requests_failed34007List group join requests: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_group_join_requests_failed", "numeric_code": "34007", "message": "Failed to list group join requests" } }list_groups_failed34000List groups: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_groups_failed", "numeric_code": "34000", "message": "Failed to list groups" } }list_provider_regions_failed30011List provider regions: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_provider_regions_failed", "numeric_code": "30011", "message": "Failed to list provider regions" } }list_webhook_endpoints_failed40000List webhook endpoints: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_webhook_endpoints_failed", "numeric_code": "40000", "message": "Failed to list webhook endpoints" } }mark_conversation_read_failed37006Mark a conversation as read: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "mark_conversation_read_failed", "numeric_code": "37006", "message": "Failed to mark conversation as read" } }mark_conversation_unread_failed37007Mark a conversation as unread: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "mark_conversation_unread_failed", "numeric_code": "37007", "message": "Failed to mark conversation as unread" } }mute_conversation_failed37008Mute conversation notifications: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "mute_conversation_failed", "numeric_code": "37008", "message": "Failed to mute conversation" } }pin_conversation_failed37010Pin conversation: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "pin_conversation_failed", "numeric_code": "37010", "message": "Failed to pin conversation" } }pin_message_failed36002Pin / unpin message: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "pin_message_failed", "numeric_code": "36002", "message": "Failed to pin message" } }react_message_failed36004React to message: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "react_message_failed", "numeric_code": "36004", "message": "Failed to react to message" } }request_conversation_history_failed37016Request conversation history: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Check the WhatsApp private conversation and before anchor. Keep request_id for HTTP diagnosis only. History events may arrive after an HTTP timeout; do not retry automatically or treat no event, an empty batch or a short batch as completion.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "request_conversation_history_failed", "numeric_code": "37016", "message": "Failed to request conversation history" } }revoke_message_failed36003Revoke message: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "revoke_message_failed", "numeric_code": "36003", "message": "Failed to revoke message" } }run_action_failed20007Run an account action: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "run_action_failed", "numeric_code": "20007", "message": "Failed to run account action" } }run_auth_action_failed20010Run an authorization action: the authorization action failed; check the existing flow rather than assuming authorization must restart.
What to do: Query the current authorization flow and check whether user action is required. Do not start another authorization attempt merely because this request failed; do not resubmit an expired or finished session.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20010", "message": "Failed to run auth action" } }run_runtime_action_failed20008Change runtime state: the runtime action failed; this response alone does not establish the final connection state.
What to do: Query authorization and runtime status, then choose refresh, start or reconnect only when appropriate for the intended state and channel. A connection problem alone does not prove logout. Confirm running before dependent business operations.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "run_runtime_action_failed", "numeric_code": "20008", "message": "Failed to run runtime action" } }run_session_action_failed20009Run a session action: the authorization action failed; check the existing flow rather than assuming authorization must restart.
What to do: Query the current authorization flow and check whether user action is required. Do not start another authorization attempt merely because this request failed; do not resubmit an expired or finished session.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "run_session_action_failed", "numeric_code": "20009", "message": "Failed to run session action" } }send_message_failed36001Message sending failed or its result could not be confirmed.
What to do: Confirm whether the original message or reply was created before sending again. A timeout or failed response can leave the outcome unknown; a later query with no matching reply does not prove nothing was written. Do not automatically resend.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "36001", "message": "Failed to send message" } }set_contact_note_failed35008Set contact note: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "set_contact_note_failed", "numeric_code": "35008", "message": "Failed to set contact note" } }set_group_join_approval_mode_failed34009Set group join approval mode: the group change failed; channel rejection or missing administrator permission may be involved.
What to do: Check the group, current membership, the required administrator permission and the current result. Resolve access or permission issues before repeating the change; an unknown write result must be reconciled first.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "set_group_join_approval_mode_failed", "numeric_code": "34009", "message": "Failed to set group join approval mode" } }set_label_members_failed37015Add / remove label on conversations: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "set_label_members_failed", "numeric_code": "37015", "message": "Failed to set label members" } }unblock_contact_failed35006Unblock contact: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unblock_contact_failed", "numeric_code": "35006", "message": "Failed to unblock contact" } }unmute_conversation_failed37009Enable conversation notifications: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unmute_conversation_failed", "numeric_code": "37009", "message": "Failed to unmute conversation" } }unpin_conversation_failed37011Unpin conversation: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unpin_conversation_failed", "numeric_code": "37011", "message": "Failed to unpin conversation" } }update_account_failed20003Update account: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_account_failed", "numeric_code": "20003", "message": "Failed to update account" } }update_group_info_failed34006Update group info: the group change failed; channel rejection or missing administrator permission may be involved.
What to do: Check the group, current membership, the required administrator permission and the current result. Resolve access or permission issues before repeating the change; an unknown write result must be reconciled first.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_group_info_failed", "numeric_code": "34006", "message": "Failed to update group info" } }update_group_join_requests_failed34008Approve / reject join requests: the group change failed; channel rejection or missing administrator permission may be involved.
What to do: Check the group, current membership, the required administrator permission and the current result. Resolve access or permission issues before repeating the change; an unknown write result must be reconciled first.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_group_join_requests_failed", "numeric_code": "34008", "message": "Failed to update group join requests" } }update_group_members_failed34005Update group members: the group change failed; channel rejection or missing administrator permission may be involved.
What to do: Check the group, current membership, the required administrator permission and the current result. Resolve access or permission issues before repeating the change; an unknown write result must be reconciled first.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_group_members_failed", "numeric_code": "34005", "message": "Failed to update group members" } }update_webhook_endpoint_failed40003Update webhook endpoint: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the endpoint configuration and account scope before resubmitting. PATCH replaces settings; retain the intended subscriptions, signing configuration and retry policy. For an active-endpoint conflict, update the existing endpoint or deactivate it before enabling another.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "update_webhook_endpoint_failed", "numeric_code": "40003", "message": "Failed to update webhook endpoint" } }upsert_label_failed37013Create or update label: an unclassified error interrupted this change; the resulting resource state needs confirmation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "upsert_label_failed", "numeric_code": "37013", "message": "Failed to upsert label" } }
501 Not Implemented
unsupported_by_provider30003The channel does not support this operation; choose a supported operation.
What to do: Use a channel and action listed as supported. Repeating the same request does not add capabilities or grant beta access.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "unsupported_by_provider", "numeric_code": "30003", "message": "Operation not supported by this provider" } }
502 Bad Gateway
get_post_failed39006Posts & Comments
Get account post: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "get_post_failed", "numeric_code": "39006", "message": "Failed to get post" } }list_post_comments_failed39003Posts & Comments
List top-level post comments: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_post_comments_failed", "numeric_code": "39003", "message": "Failed to list post comments" } }list_posts_failed39002Posts & Comments
List account posts: the service could not produce a valid query result.
What to do: Keep request_id and check the requested identifiers and account access. Retry this read only after checking the cause; a failed query does not prove an empty or missing resource.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "list_posts_failed", "numeric_code": "39002", "message": "Failed to list posts" } }provider_adapter_not_found30004The channel service is unavailable. Check status or try again later; confirm the result before retrying writes.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "provider_adapter_not_found", "numeric_code": "30004", "message": "Provider adapter unavailable" } }provider_unavailable30002The channel service is unavailable. Check status or try again later; confirm the result before retrying writes.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "provider_unavailable", "numeric_code": "30002", "message": "Provider service unavailable" } }reply_post_comment_failed39004Posts & Comments
Check the post, confirmed top-level comment and error classification. If the write outcome is unknown, keep request_id and investigate before any resend; absence in a later read is not enough to justify retrying.
What to do: Confirm whether the original message or reply was created before sending again. A timeout or failed response can leave the outcome unknown; a later query with no matching reply does not prove nothing was written. Do not automatically resend.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "reply_post_comment_failed", "numeric_code": "39004", "message": "Failed to confirm comment reply; result may be unknown, do not automatically retry" } }
503 Service Unavailable
allocation_service_unavailable20012Account allocation is temporarily unavailable; retry shortly.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "allocation_service_unavailable", "numeric_code": "20012", "message": "Allocation service is temporarily unavailable" } }call_service_unavailable38001Calls
The calling service is unavailable. Check the Provider/Gateway connection and configuration.
What to do: Query the managed call and its call_id/state before creating or ending another call. Preparing is not dialing or answered; ended and failed are terminal states. A failed state alone is not a reason to repeat hangup.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "call_service_unavailable", "numeric_code": "38001", "message": "Call service unavailable" } }internal_auth_not_configured11006The authorization-session service is unavailable or not configured for this request. Contact the service operator to check the authorization-session service.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "internal_auth_not_configured", "numeric_code": "11006", "message": "Internal endpoint authentication is not configured" } }wallet_unavailable20028Wallet data or configuration is temporarily unavailable. A failed write can have an unknown result; reconcile the original operation.
What to do: Read the current resource state and confirm the previous outcome before repeating this change. Keep request_id; do not automatically repeat a write whose outcome is unknown.
Illustrative JSON; message varies with the actual cause
{ "request_id": "req_example", "error": { "code": "wallet_unavailable", "numeric_code": "20028", "message": "Wallet service is unavailable" } }
Additional numeric causes
These causes refine a response while preserving that operation’s original HTTP status and code. Check the endpoint table for the applicable combination; a listed numeric cause does not apply to every operation or provider.
For authentication-code rejection, the published contract defines 30016, while existing authorization paths may still return provider_invalid_request / 30001. Handle both; do not depend on receiving 30016 for every rejected code.
provider_operation_failed30010The provider could not complete the operation. message can include the original cause after “Provider operation failed:”; the reason text varies and is not a stable program interface.
What to do: Query the resource to determine whether deletion already succeeded, then decide whether another delete is needed. Keep request_id and follow this endpoint’s documented success response.
Provider operation failed
Related operations (103)
- Delete account500 · delete_account_failedChannels: WhatsApp
- Delete account502 · provider_unavailableChannels: WhatsApp
- List contacts500 · list_contacts_failedChannels: WhatsApp
- List contacts502 · provider_unavailableChannels: WhatsApp
- Get blocklist500 · list_blocklist_failedChannels: WhatsApp
- Get blocklist502 · provider_unavailableChannels: WhatsApp
- Get contact500 · get_contact_failedChannels: WhatsApp
- Get contact502 · provider_unavailableChannels: WhatsApp
- Check contact membership500 · get_contact_membership_failedChannels: WhatsApp
- Check contact membership502 · provider_unavailableChannels: WhatsApp
- List conversations500 · list_conversations_failedChannels: WhatsApp
- List conversations502 · provider_unavailableChannels: WhatsApp
- Get conversation500 · get_conversation_failedChannels: WhatsApp
- Get conversation502 · provider_unavailableChannels: WhatsApp
- List conversation labels500 · list_conversation_labels_failedChannels: WhatsApp
- List conversation labels502 · provider_unavailableChannels: WhatsApp
- List conversation members500 · list_conversation_members_failedChannels: WhatsApp
- List conversation members502 · provider_unavailableChannels: WhatsApp
- List groups500 · list_groups_failedChannels: WhatsApp
- List groups502 · provider_unavailableChannels: WhatsApp
- Get group500 · get_group_failedChannels: WhatsApp
- Get group502 · provider_unavailableChannels: WhatsApp
- Get group invite link500 · get_group_invite_code_failedChannels: WhatsApp
- Get group invite link502 · provider_unavailableChannels: WhatsApp
- List group join requests500 · list_group_join_requests_failedChannels: WhatsApp
- List group join requests502 · provider_unavailableChannels: WhatsApp
- Get the active call500 · call_control_failedChannels: WhatsApp
- Get the active call502 · provider_unavailableChannels: WhatsApp
- Update account500 · update_account_failedChannels: WhatsApp
- Cancel authentication500 · run_auth_action_failedChannels: WhatsApp
- Cancel authentication502 · provider_unavailableChannels: WhatsApp
- Confirm Passkey authorization500 · run_auth_action_failedChannels: WhatsApp
- Confirm Passkey authorization502 · provider_unavailableChannels: WhatsApp
- Submit Passkey credential response500 · run_auth_action_failedChannels: WhatsApp
- Submit Passkey credential response502 · provider_unavailableChannels: WhatsApp
- Check QR authentication500 · run_auth_action_failedChannels: WhatsApp
- Check QR authentication502 · provider_unavailableChannels: WhatsApp
- Start QR authentication500 · run_auth_action_failedChannels: WhatsApp
- Start QR authentication502 · provider_unavailableChannels: WhatsApp
- Start code authentication500 · run_auth_action_failedChannels: WhatsApp
- Start code authentication502 · provider_unavailableChannels: WhatsApp
- Add contact500 · create_contact_failedChannels: WhatsApp
- Add contact502 · provider_unavailableChannels: WhatsApp
- Block contact500 · block_contact_failedChannels: WhatsApp
- Block contact502 · provider_unavailableChannels: WhatsApp
- Set contact note500 · set_contact_note_failedChannels: WhatsApp
- Set contact note502 · provider_unavailableChannels: WhatsApp
- Unblock contact500 · unblock_contact_failedChannels: WhatsApp
- Unblock contact502 · provider_unavailableChannels: WhatsApp
- Request conversation history500 · request_conversation_history_failedChannels: WhatsApp
- Request conversation history502 · provider_unavailableChannels: WhatsApp
- Add / remove label on conversations500 · set_label_members_failedChannels: WhatsApp
- Add / remove label on conversations502 · provider_unavailableChannels: WhatsApp
- Delete label500 · delete_label_failedChannels: WhatsApp
- Delete label502 · provider_unavailableChannels: WhatsApp
- Create or update label500 · upsert_label_failedChannels: WhatsApp
- Create or update label502 · provider_unavailableChannels: WhatsApp
- Mute conversation500 · mute_conversation_failedChannels: WhatsApp
- Mute conversation502 · provider_unavailableChannels: WhatsApp
- Pin conversation500 · pin_conversation_failedChannels: WhatsApp
- Pin conversation502 · provider_unavailableChannels: WhatsApp
- Mark conversation as read500 · mark_conversation_read_failedChannels: WhatsApp
- Mark conversation as read502 · provider_unavailableChannels: WhatsApp
- Unmute conversation500 · unmute_conversation_failedChannels: WhatsApp
- Unmute conversation502 · provider_unavailableChannels: WhatsApp
- Unpin conversation500 · unpin_conversation_failedChannels: WhatsApp
- Unpin conversation502 · provider_unavailableChannels: WhatsApp
- Mark conversation as unread500 · mark_conversation_unread_failedChannels: WhatsApp
- Mark conversation as unread502 · provider_unavailableChannels: WhatsApp
- Create group500 · create_group_failedChannels: WhatsApp
- Create group502 · provider_unavailableChannels: WhatsApp
- Set group join approval mode500 · set_group_join_approval_mode_failedChannels: WhatsApp
- Set group join approval mode502 · provider_unavailableChannels: WhatsApp
- Approve / reject join requests500 · update_group_join_requests_failedChannels: WhatsApp
- Approve / reject join requests502 · provider_unavailableChannels: WhatsApp
- Leave group500 · leave_group_failedChannels: WhatsApp
- Leave group502 · provider_unavailableChannels: WhatsApp
- Manage group members500 · update_group_members_failedChannels: WhatsApp
- Manage group members502 · provider_unavailableChannels: WhatsApp
- Update group info500 · update_group_info_failedChannels: WhatsApp
- Update group info502 · provider_unavailableChannels: WhatsApp
- Reconnect runtime500 · run_runtime_action_failedChannels: WhatsApp
- Reconnect runtime502 · provider_unavailableChannels: WhatsApp
- Refresh runtime state500 · run_runtime_action_failedChannels: WhatsApp
- Refresh runtime state502 · provider_unavailableChannels: WhatsApp
- Start runtime500 · run_runtime_action_failedChannels: WhatsApp
- Start runtime502 · provider_unavailableChannels: WhatsApp
- Stop runtime500 · run_runtime_action_failedChannels: WhatsApp
- Stop runtime502 · provider_unavailableChannels: WhatsApp
- Create a call500 · create_call_failedChannels: WhatsApp
- Create a call502 · provider_unavailableChannels: WhatsApp
- Hang up a call500 · call_control_failedChannels: WhatsApp
- Hang up a call502 · provider_unavailableChannels: WhatsApp
- Send text message500 · send_message_failedChannels: WhatsApp
- Send text message502 · provider_unavailableChannels: WhatsApp
- Edit message500 · edit_message_failedChannels: WhatsApp
- Edit message502 · provider_unavailableChannels: WhatsApp
- Pin / unpin message500 · pin_message_failedChannels: WhatsApp
- Pin / unpin message502 · provider_unavailableChannels: WhatsApp
- React to message500 · react_message_failedChannels: WhatsApp
- React to message502 · provider_unavailableChannels: WhatsApp
- Revoke message500 · revoke_message_failedChannels: WhatsApp
- Revoke message502 · provider_unavailableChannels: WhatsApp
provider_instance_missing30014The provider instance needed by this account is missing. This is a runtime availability problem, not proof that authorization expired.
What to do: Query authorization and runtime status, then choose refresh, start or reconnect only when appropriate for the intended state and channel. A connection problem alone does not prove logout. Confirm running before dependent business operations.
Provider instance is missing
Related operations (50)
- List contacts409 · provider_not_readyChannels: WhatsApp
- Get blocklist409 · provider_not_readyChannels: WhatsApp
- Get contact409 · provider_not_readyChannels: WhatsApp
- Check contact membership409 · provider_not_readyChannels: WhatsApp
- List conversations409 · provider_not_readyChannels: WhatsApp
- Get conversation409 · provider_not_readyChannels: WhatsApp
- List conversation labels409 · provider_not_readyChannels: WhatsApp
- List conversation members409 · provider_not_readyChannels: WhatsApp
- List groups409 · provider_not_readyChannels: WhatsApp
- Get group409 · provider_not_readyChannels: WhatsApp
- Get group invite link409 · provider_not_readyChannels: WhatsApp
- List group join requests409 · provider_not_readyChannels: WhatsApp
- Get the active call409 · provider_not_readyChannels: WhatsApp
- Cancel authentication409 · provider_not_readyChannels: WhatsApp
- Confirm Passkey authorization409 · provider_not_readyChannels: WhatsApp
- Submit Passkey credential response409 · provider_not_readyChannels: WhatsApp
- Check QR authentication409 · provider_not_readyChannels: WhatsApp
- Start QR authentication409 · provider_not_readyChannels: WhatsApp
- Start code authentication409 · provider_not_readyChannels: WhatsApp
- Add contact409 · provider_not_readyChannels: WhatsApp
- Block contact409 · provider_not_readyChannels: WhatsApp
- Set contact note409 · provider_not_readyChannels: WhatsApp
- Unblock contact409 · provider_not_readyChannels: WhatsApp
- Request conversation history409 · provider_not_readyChannels: WhatsApp
- Add / remove label on conversations409 · provider_not_readyChannels: WhatsApp
- Delete label409 · provider_not_readyChannels: WhatsApp
- Create or update label409 · provider_not_readyChannels: WhatsApp
- Mute conversation409 · provider_not_readyChannels: WhatsApp
- Pin conversation409 · provider_not_readyChannels: WhatsApp
- Mark conversation as read409 · provider_not_readyChannels: WhatsApp
- Unmute conversation409 · provider_not_readyChannels: WhatsApp
- Unpin conversation409 · provider_not_readyChannels: WhatsApp
- Mark conversation as unread409 · provider_not_readyChannels: WhatsApp
- Create group409 · provider_not_readyChannels: WhatsApp
- Set group join approval mode409 · provider_not_readyChannels: WhatsApp
- Approve / reject join requests409 · provider_not_readyChannels: WhatsApp
- Leave group409 · provider_not_readyChannels: WhatsApp
- Manage group members409 · provider_not_readyChannels: WhatsApp
- Update group info409 · provider_not_readyChannels: WhatsApp
- Reconnect runtime409 · provider_not_readyChannels: WhatsApp
- Refresh runtime state409 · provider_not_readyChannels: WhatsApp
- Start runtime409 · provider_not_readyChannels: WhatsApp
- Stop runtime409 · provider_not_readyChannels: WhatsApp
- Create a call409 · provider_not_readyChannels: WhatsApp
- Hang up a call409 · provider_not_readyChannels: WhatsApp
- Send text message409 · provider_not_readyChannels: WhatsApp
- Edit message409 · provider_not_readyChannels: WhatsApp
- Pin / unpin message409 · provider_not_readyChannels: WhatsApp
- React to message409 · provider_not_readyChannels: WhatsApp
- Revoke message409 · provider_not_readyChannels: WhatsApp
provider_runtime_stopped30015The provider runtime is stopped. Confirm whether that is intentional before starting it; a stopped runtime does not itself mean logout.
What to do: Query authorization and runtime status, then choose refresh, start or reconnect only when appropriate for the intended state and channel. A connection problem alone does not prove logout. Confirm running before dependent business operations.
Provider runtime is stopped
Related operations (52)
- Delete account409 · provider_not_readyChannels: WhatsApp
- List contacts409 · provider_not_readyChannels: WhatsApp
- Get blocklist409 · provider_not_readyChannels: WhatsApp
- Get contact409 · provider_not_readyChannels: WhatsApp
- Check contact membership409 · provider_not_readyChannels: WhatsApp
- List conversations409 · provider_not_readyChannels: WhatsApp
- Get conversation409 · provider_not_readyChannels: WhatsApp
- List conversation labels409 · provider_not_readyChannels: WhatsApp
- List conversation members409 · provider_not_readyChannels: WhatsApp
- List groups409 · provider_not_readyChannels: WhatsApp
- Get group409 · provider_not_readyChannels: WhatsApp
- Get group invite link409 · provider_not_readyChannels: WhatsApp
- List group join requests409 · provider_not_readyChannels: WhatsApp
- Get the active call409 · provider_not_readyChannels: WhatsApp
- Update account409 · provider_not_readyChannels: WhatsApp
- Cancel authentication409 · provider_not_readyChannels: WhatsApp
- Confirm Passkey authorization409 · provider_not_readyChannels: WhatsApp
- Submit Passkey credential response409 · provider_not_readyChannels: WhatsApp
- Check QR authentication409 · provider_not_readyChannels: WhatsApp
- Start QR authentication409 · provider_not_readyChannels: WhatsApp
- Start code authentication409 · provider_not_readyChannels: WhatsApp
- Add contact409 · provider_not_readyChannels: WhatsApp
- Block contact409 · provider_not_readyChannels: WhatsApp
- Set contact note409 · provider_not_readyChannels: WhatsApp
- Unblock contact409 · provider_not_readyChannels: WhatsApp
- Request conversation history409 · provider_not_readyChannels: WhatsApp
- Add / remove label on conversations409 · provider_not_readyChannels: WhatsApp
- Delete label409 · provider_not_readyChannels: WhatsApp
- Create or update label409 · provider_not_readyChannels: WhatsApp
- Mute conversation409 · provider_not_readyChannels: WhatsApp
- Pin conversation409 · provider_not_readyChannels: WhatsApp
- Mark conversation as read409 · provider_not_readyChannels: WhatsApp
- Unmute conversation409 · provider_not_readyChannels: WhatsApp
- Unpin conversation409 · provider_not_readyChannels: WhatsApp
- Mark conversation as unread409 · provider_not_readyChannels: WhatsApp
- Create group409 · provider_not_readyChannels: WhatsApp
- Set group join approval mode409 · provider_not_readyChannels: WhatsApp
- Approve / reject join requests409 · provider_not_readyChannels: WhatsApp
- Leave group409 · provider_not_readyChannels: WhatsApp
- Manage group members409 · provider_not_readyChannels: WhatsApp
- Update group info409 · provider_not_readyChannels: WhatsApp
- Reconnect runtime409 · provider_not_readyChannels: WhatsApp
- Refresh runtime state409 · provider_not_readyChannels: WhatsApp
- Start runtime409 · provider_not_readyChannels: WhatsApp
- Stop runtime409 · provider_not_readyChannels: WhatsApp
- Create a call409 · provider_not_readyChannels: WhatsApp
- Hang up a call409 · provider_not_readyChannels: WhatsApp
- Send text message409 · provider_not_readyChannels: WhatsApp
- Edit message409 · provider_not_readyChannels: WhatsApp
- Pin / unpin message409 · provider_not_readyChannels: WhatsApp
- React to message409 · provider_not_readyChannels: WhatsApp
- Revoke message409 · provider_not_readyChannels: WhatsApp
provider_auth_code_rejected30016The provider explicitly rejected the submitted authentication code. Check the channel’s code flow and expiry. Existing paths may use 30001 instead of the contract’s 30016.
What to do: Query the current authorization flow and check whether user action is required. Do not start another authorization attempt merely because this request failed; do not resubmit an expired or finished session.
Provider rejected the authentication code
provider_rate_limited30017The upstream channel explicitly rejected excessive request frequency. This numeric classification preserves the operation’s existing HTTP status and code.
What to do: Pause requests and retry later within a bounded policy. No fixed delay or Retry-After handling is guaranteed here. Confirm the previous result before retrying a write.
Provider rate limit exceeded
Related operations (1)
- Add contact500 · create_contact_failedChannels: WhatsApp
provider_app_state_out_of_sync30018The account’s provider App State baseline is out of sync. This is an account synchronization condition, not a generic request-format error.
What to do: Wait for the provider to restore the account’s App State baseline, then check current state before retrying. Do not infer that credentials are invalid or begin reauthorization solely from this classification.
Provider app state is out of sync
Related operations (1)
- Add contact500 · create_contact_failedChannels: WhatsApp
provider_message_restricted30019The platform explicitly restricted this message send: HTTP 502, provider_unavailable, 30019. This does not establish a permanent account ban or a fixed time when sending will be allowed again.
What to do: Stop automatic retries for this message restriction. Resume sending only after the platform restriction is confirmed lifted; there is no fixed release time, and this error alone does not require reauthorization.
Message sending is restricted by the platform
Related operations (1)
- Send text message502 · provider_unavailableChannels: WhatsApp
provider_account_restricted30020A synchronous request using whatsapp-protocol identified an account login restriction with numeric_code=30020. This can affect session import, runtime, sending and contact queries while retaining the current operation’s HTTP status and code. Do not substitute the WhatsApp 20102 event contract for this channel.
What to do: Stop automatic sends and retries, and ask the user to inspect and resolve the restriction in the official WhatsApp app. Resume only after resolution and any required reauthorization. A previously running connection does not prove the restriction has cleared.
Account login is restricted. Check the official WhatsApp app for details.
Related operations (8)
- Delete account502 · provider_unavailableChannels: WhatsApp Protocol
- Get contact502 · provider_unavailableChannels: WhatsApp Protocol
- Import authentication session502 · provider_unavailableChannels: WhatsApp Protocol
- Reconnect runtime502 · provider_unavailableChannels: WhatsApp Protocol
- Refresh runtime state502 · provider_unavailableChannels: WhatsApp Protocol
- Start runtime502 · provider_unavailableChannels: WhatsApp Protocol
- Stop runtime502 · provider_unavailableChannels: WhatsApp Protocol
- Send text message502 · provider_unavailableChannels: WhatsApp Protocol
provider_connection_disconnected30021WhatsApp was not connected when this operation ran. The original connection message is retained. This does not prove logout or expired authorization and does not automatically reconnect, resend or change account state.
What to do: Pause operations that require the connection. First call POST /v1/accounts/{account_id}/runtime/refresh, recover according to the latest state and confirm runtime_status=running before business requests. Confirm the previous write result before resending.
Account is not connected to the messaging platform
Related operations (49)
- Delete account502 · provider_unavailableChannels: WhatsApp
- List contacts502 · provider_unavailableChannels: WhatsApp
- Get blocklist502 · provider_unavailableChannels: WhatsApp
- Get contact502 · provider_unavailableChannels: WhatsApp
- Check contact membership502 · provider_unavailableChannels: WhatsApp
- List conversations502 · provider_unavailableChannels: WhatsApp
- Get conversation502 · provider_unavailableChannels: WhatsApp
- List conversation labels502 · provider_unavailableChannels: WhatsApp
- List conversation members502 · provider_unavailableChannels: WhatsApp
- List groups502 · provider_unavailableChannels: WhatsApp
- Get group502 · provider_unavailableChannels: WhatsApp
- Get group invite link502 · provider_unavailableChannels: WhatsApp
- List group join requests502 · provider_unavailableChannels: WhatsApp
- Update account500 · update_account_failedChannels: WhatsApp
- Cancel authentication502 · provider_unavailableChannels: WhatsApp
- Confirm Passkey authorization502 · provider_unavailableChannels: WhatsApp
- Submit Passkey credential response502 · provider_unavailableChannels: WhatsApp
- Check QR authentication502 · provider_unavailableChannels: WhatsApp
- Start QR authentication502 · provider_unavailableChannels: WhatsApp
- Start code authentication502 · provider_unavailableChannels: WhatsApp
- Add contact502 · provider_unavailableChannels: WhatsApp
- Block contact502 · provider_unavailableChannels: WhatsApp
- Set contact note502 · provider_unavailableChannels: WhatsApp
- Unblock contact502 · provider_unavailableChannels: WhatsApp
- Request conversation history502 · provider_unavailableChannels: WhatsApp
- Add / remove label on conversations502 · provider_unavailableChannels: WhatsApp
- Delete label502 · provider_unavailableChannels: WhatsApp
- Create or update label502 · provider_unavailableChannels: WhatsApp
- Mute conversation502 · provider_unavailableChannels: WhatsApp
- Pin conversation502 · provider_unavailableChannels: WhatsApp
- Mark conversation as read502 · provider_unavailableChannels: WhatsApp
- Unmute conversation502 · provider_unavailableChannels: WhatsApp
- Unpin conversation502 · provider_unavailableChannels: WhatsApp
- Mark conversation as unread502 · provider_unavailableChannels: WhatsApp
- Create group502 · provider_unavailableChannels: WhatsApp
- Set group join approval mode502 · provider_unavailableChannels: WhatsApp
- Approve / reject join requests502 · provider_unavailableChannels: WhatsApp
- Leave group502 · provider_unavailableChannels: WhatsApp
- Manage group members502 · provider_unavailableChannels: WhatsApp
- Update group info502 · provider_unavailableChannels: WhatsApp
- Reconnect runtime502 · provider_unavailableChannels: WhatsApp
- Refresh runtime state502 · provider_unavailableChannels: WhatsApp
- Start runtime502 · provider_unavailableChannels: WhatsApp
- Stop runtime502 · provider_unavailableChannels: WhatsApp
- Send text message502 · provider_unavailableChannels: WhatsApp
- Edit message502 · provider_unavailableChannels: WhatsApp
- Pin / unpin message502 · provider_unavailableChannels: WhatsApp
- React to message502 · provider_unavailableChannels: WhatsApp
- Revoke message502 · provider_unavailableChannels: WhatsApp
group_not_found34004The group was not found under this account; check the group ID.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Group not found
Related operations (1)
- Get conversation404 · conversation_not_foundChannels: WhatsApp
group_not_participant34011The group may exist, but this account is not a participant. For WhatsApp conversation details, 404 conversation_not_found / 34011 means the group is not visible to this account; it is not a temporary gateway failure.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Account is not participating in this group
Related operations (2)
- Get conversation404 · conversation_not_foundChannels: WhatsApp
- Get group404 · group_not_foundChannels: WhatsApp
group_admin_required34012WhatsApp requires group administrator privileges to send this message. Adjust the account's group role before retrying.
What to do: Keep request_id and the structured codes, and investigate the current operation before taking another action.
Group administrator privileges are required to send messages to this group
Related operations (1)
- Send text message502 · provider_unavailableChannels: WhatsApp
invalid_sticker_media36007Sticker media failed validation before the provider send. The response may give a specific preparation reason; numeric_code=36007 does not mean a send was attempted.
What to do: Fix the reported sticker media issue before sending again. This classification is returned during media preparation before the provider send; it must not be presented as an unknown completed send.
Invalid sticker media
Related operations (1)
- Send text message400 · provider_invalid_request
api_key_not_found11104The target API key was not found in this workspace. Key update and rotation preserve HTTP 400 and their original update_api_key_failed or rotate_api_key_failed code; 11104 refines the cause.
What to do: Check the target key under the current workspace before changing or rotating it. A missing target is not repaired by retrying. After an unknown rotation result, confirm which credentials remain usable without exposing key material.
API key not found
Related operations (2)
- Update API key status400 · update_api_key_failed
- Rotate API key400 · rotate_api_key_failed
webhook_endpoint_not_found40006The target webhook endpoint was not found in this scope. GET, PATCH and deactivate keep their operation-specific code and HTTP 500, with numeric_code=40006. This detail does not apply to the idempotent DELETE, which returns 204 for an absent endpoint.
What to do: Check the target identifier, resource ownership and current workspace. Do not treat a confirmed missing or inaccessible target as a temporary service failure to retry automatically.
Webhook endpoint not found
Related operations (3)
- Get webhook endpoint500 · get_webhook_endpoint_failed
- Update webhook endpoint500 · update_webhook_endpoint_failed
- Deactivate webhook endpoint500 · deactivate_webhook_endpoint_failed
account_restricted20102WhatsApp synchronous message sending identified an account login restriction: HTTP 502, provider_unavailable, 20102. The same numeric meaning can appear as account_restricted in a WhatsApp failure event; the HTTP response does not itself update account state or create an extra event.
What to do: Stop automatic sends and retries, and ask the user to inspect and resolve the restriction in the official WhatsApp app. Resume only after resolution and any required reauthorization. A previously running connection does not prove the restriction has cleared.
Account login is restricted. Check the official WhatsApp app for details.
Related operations (1)
- Send text message502 · provider_unavailableChannels: WhatsApp
Account failure events
Some WhatsApp account.auth.failed events include an optional data.error object with non-empty string fields code, numeric_code and message. Read these inside the event, separately from HTTP error responses.
Older events and other scopes may omit data.error. Preserve last_error compatibility and handle missing or unknown codes through the existing account-failure flow. Account list/detail responses do not gain this object. These classifications do not prove a permanent ban or a recovery deadline.
After securely accepting the event, return 2xx to acknowledge delivery. Account failures and HTTP delivery failures are separate: an account failure is not a reason to reject the webhook and trigger redelivery. Existing retry and replay rules still apply; historical events are not backfilled.
account_auth_failed20100Account authorization failed, but the specific cause could not be determined. Use the existing failure flow without inventing a restriction or logout reason.
What to do: Query the current authorization flow and check whether user action is required. Do not start another authorization attempt merely because this request failed; do not resubmit an expired or finished session.
Illustrative JSON; message varies with the actual cause
{ "id": "<EVENT_ID>", "type": "account.auth.failed", "provider": "whatsapp", "account_id": "<ACCOUNT_ID>", "occurred_at": "2026-10-16T00:00:00Z", "data": { "auth_status": "failed", "runtime_status": "disconnected", "event": { "kind": "account_auth_status", "auth_status": "failed", "runtime_status": "disconnected" }, "error": { "code": "account_auth_failed", "numeric_code": "20100", "message": "Account authentication failed. The specific cause could not be determined." } } }account_logged_out20101The current account session is no longer valid. Ask the user to authorize again through the channel’s supported flow.
What to do: Ask the user to authorize again through this channel’s supported flow. After authorization, query runtime state and confirm the connection before resuming dependent operations.
Illustrative JSON; message varies with the actual cause
{ "id": "<EVENT_ID>", "type": "account.auth.failed", "provider": "whatsapp", "account_id": "<ACCOUNT_ID>", "occurred_at": "2026-10-16T00:00:00Z", "data": { "auth_status": "failed", "runtime_status": "disconnected", "event": { "kind": "account_auth_status", "auth_status": "failed", "runtime_status": "disconnected" }, "error": { "code": "account_logged_out", "numeric_code": "20101", "message": "The account session is no longer valid. Reauthorization is required." } } }account_restricted20102This WhatsApp account.auth.failed event identifies a current login restriction with data.error.code=account_restricted and numeric_code=20102. It does not prove a permanent ban or state when recovery will be possible.
What to do: Stop automatic sends and retries, and ask the user to inspect and resolve the restriction in the official WhatsApp app. Resume only after resolution and any required reauthorization. A previously running connection does not prove the restriction has cleared.
Illustrative JSON; message varies with the actual cause
{ "id": "<EVENT_ID>", "type": "account.auth.failed", "provider": "whatsapp", "account_id": "<ACCOUNT_ID>", "occurred_at": "2026-10-16T00:00:00Z", "data": { "auth_status": "failed", "runtime_status": "disconnected", "event": { "kind": "account_auth_status", "auth_status": "failed", "runtime_status": "disconnected" }, "error": { "code": "account_restricted", "numeric_code": "20102", "message": "Account login is restricted. Check the official WhatsApp app for details." } } }