waiaconnect

Documentation / Complete

The full error catalog

Every code /v1 emits, with its HTTP status and what to do. They are stable: from the first integrator they are NOT renamed (that would break your switch). English only, on purpose (the code is the contract, the message is for pasting into a log and googling).

codeHTTPmessageaction
API_KEY_MISSING401The Authorization header is missing or malformedBug in your integration — send Authorization: Bearer wc_live_…
API_KEY_INVALID401The API key is invalid or has been revokedCheck / rotate the key in the panel
ACCOUNT_SUSPENDED403Account is suspended or cancelledResolve billing / contact support
RATE_LIMITED429Per-key rate limit exceededBack off and retry (limit 600/min per key)
IDEMPOTENCY_KEY_REQUIRED400The Idempotency-Key header is requiredSend a unique UUID in Idempotency-Key
INVALID_TYPE400type must be text, template, image, document, audio or videoFix type
INVALID_BODY400text.body (or template.name) is requiredFix the message body
INVALID_RECIPIENT400to must be a plausible E.164 number (8–15 digits)Fix to
AUDIO_CAPTION_NOT_ALLOWED400type audio does not accept a captionRemove audio.caption
CONNECTION_REQUIRED400Provide connectionId (conn_…) or from (phoneNumberId)Send one of them
CONNECTION_NOT_FOUND404No connection matches connectionId/from for this accountCheck the connection id (a number of ANOTHER account is also reported as not found)
CONNECTION_NOT_READY409The number exists but is not connected yet (details.status = its real state)Wait for it to become connected, or refresh its status — do NOT change your payload
MESSAGE_NOT_FOUND404No message with that id for this accountCheck the msg_… id
QUOTA_EXCEEDED429Plan message quota exceeded (policy block)Upgrade plan or wait for the period to renew
MEDIA_ID_REQUIRED400A media id is requiredInclude the media id in the path
MEDIA_NOT_FOUND404No media with that id for this account (or expired at Meta)Only fetch media ids from your own inbound events
MEDIA_TOO_LARGE413Media exceeds the size limitDo not proxy files above the limit
MEDIA_UPSTREAM502Could not resolve/download the media from MetaRetry; the media may have expired
INTERNAL500Internal server errorRetry; if it persists, contact support
APIKEY_NAME_REQUIRED400A non-empty name is required to create an API keySend a name
APIKEY_NOT_FOUND404No API key with that id for this accountCheck the key id
WEBHOOK_URL_REQUIRED400A url string is requiredSend a url
WEBHOOK_URL_UNSAFE400URL must be https to a public host (private/loopback/link-local rejected)Use a public https URL
WEBHOOK_EVENTS_INVALID400events must be known event typesUse the subscribable event types (see the event catalog)
WEBHOOK_NOT_FOUND404No webhook endpoint with that id for this accountCheck the wh_… id
WEBHOOK_STATIC_HEADER_INVALID400The static header name is invalid or reservedUse a valid header name; never Authorization/Cookie/Host/Content-*
WEBHOOK_CREATE_FAILED500Could not create the webhook endpointRetry
ALERT_NOT_FOUND404No alert with that id for this accountCheck the alert id
CONNECTION_QUOTA_EXCEEDED429This number's monthly message limit is exhaustedRaise the limit for THIS connection (≠ upgrading the plan)
CONNECTION_EXTERNAL_ID_TAKEN409Another connection in this account already uses that externalIdPick a different externalId (unique within an account)
CONNECTION_LIMIT_INVALID400monthlyMessageLimit must be a non-negative integer or nullFix the value
INVALID_DATE400from/to must be YYYY-MM-DDFix the date
INVALID_PERIOD400period must be YYYY-MMFix the period
WEBHOOK_CONNECTION_INVALID400connectionId is not a valid connection idSend a numeric connection id or omit for the account default
WEBHOOK_CONNECTION_NOT_FOUND404No connection with that id for this accountCheck the connection id
ONBOARDING_MODE_INVALID400mode must be cloud_api, coexistence, or omittedFix mode
ONBOARDING_RETURN_ORIGIN_INVALID400returnOrigin must be an exact https origin (public, no path)Send https://host (SSRF-guarded)
ONBOARDING_REDIRECT_URL_INVALID400redirectUrl must be a public https URLSend an https URL (SSRF-guarded)
BRAND_LOGO_URL_INVALID400brandLogoUrl must be a public https URLUse a public https image URL (SSRF-guarded)
BRAND_COLOR_INVALID400brandColor must be a #RRGGBB hex colorFix the color
BRAND_EMAIL_INVALID400brandSupportEmail must be a valid emailFix the email
BRAND_WEBSITE_INVALID400brandWebsite must be an https URLFix the URL