Reference

Error codes

Every error code the API answers: what happened, why, and how to fix it.

A refused request answers a JSON body with an error code, a message, a requestId to quote to support, whether it is retryable, and a docslink to the code's page here. Authentication errors and the event and webhook routes answer a smaller body: error and message, sometimes details.

ErrorStatusWhat happened
invalid_request400The request is not valid
invalid_idempotency_key400The Idempotency-Key header is malformed
unauthorized401No valid API key
insufficient_scope403The key does not cover this
no_project403The request names no workspace
sms_refused403, 429The text was refused by the SMS rules
wallet_refused402The balance cannot cover this message
not_found404No such resource in this workspace
capability_not_ready409The sender cannot do this right now
recipient_opted_out409The person opted out
idempotency_conflict409The Idempotency-Key names a different message
window_closed409The channel's reply window is closed
controller_conflict409The conversation has another controller
controller_unsupported409This conversation cannot have that controller
channel_not_priced409The channel has no delivery price
channel_not_supported409This sender cannot send on that channel
not_linkable409The send cannot become a conversation message
number_inactive409The number is not active
plugin_suspended409The channel is suspended for this workspace
outcome_unknown409A provider attempt has no recorded result
send_in_progress409A request with this Idempotency-Key is still in flight
content_too_long422The text is longer than the channel takes
media_too_large413The media is larger than the channel takes
media_unavailable422The media could not be fetched or is not carried
operation_not_supported422The channel does not support this yet
output_refused422The output guard refused the text
rate_limited429Too many requests
channel_not_registered503The channel is reloading
trust_unavailable503Message checks are briefly unavailable
wallet_unavailable503The wallet is briefly unavailable
messaging_unavailable503Sending is briefly unavailable
provider_error502The provider did not take the message
provider_retry_later503The provider is rate limiting this sender
no_sender409Nothing to send from on this channel
sender_ambiguous409Several senders could send this
recipient_not_allowed403The channel does not allow this recipient
test_mode_only403Only a test key can do this
test_address_required422A test key can only reach a test address
test_address_not_allowed422A live key cannot reach a test address
test_limit_reached429The workspace's test allowance for today is used
invalid_event_types400Unknown event types
invalid_conversation_id400The conversationId is not a conversation id
invalid_cursor400The cursor is not one this API returned
cursor_expired410The cursor is older than the stream's replay window
events_unavailable503Events are briefly unavailable