Skip to main content
An API error is a red traffic light on the road: HTTP tells you severity and code tells you what stopped. Handle by code, not free-text message.

What is an error response?

When something goes wrong, the API returns an HTTP status code and a stable code field in the JSON. Use both to decide whether to fix the request, retry, or alert the user. Think of it like a car dashboard: the light comes on (HTTP) and the manual says what’s wrong (code).

What is it for?

With error responses you can:
  • Automate handling in your code (retry, user message, internal alert)
  • Debug faster with API logs
  • Avoid relying on translated text in message

Standard format

On all API v1 errors:
On templates, variable errors may also include missingVariables ({{…}} keys that were missing) and details (array { field, message } per field).
Since Jul 2026 all API v1 HTTP errors include code + message. Legacy integrations that only read message should migrate to code.

Most common HTTP codes

Missing field, invalid format, routing conflict (instanceId + sendingPoolId together), etc. Fix the body and try again.
Wrong header, revoked or expired key. Check Authorization: Bearer sk_.... On an official WhatsApp line, an expired/invalid Meta token can also return 401 with META_TOKEN_EXPIRED / META_TOKEN_INVALID (key is fine; reconnect the instance).
Trial ended, zero balance, or key cap hit. Top up, upgrade, or adjust the key limit.
Missing scope, resource outside key list, or blocked operation. Adjust scopes or key restrictions.
Wrong ID, inactive instance, or resource from another workspace. Check the ID in URL or body.
Duplicate resource or invalid state (e.g. delete active instance; email domain already registered, EMAIL_DOMAIN_ALREADY_REGISTERED). Use existing resource or change state first.
The request is well formed, but an external provider refused the operation. On POST /v1/email/domains, antispam blocks or ZeptoMail/SES rejection return EMAIL_DOMAIN_PROVIDER_ANTISPAM or EMAIL_DOMAIN_PROVIDER_REJECTED. Handle by code; use message (localized) for end users.
API rate limit, sandbox daily limit (SANDBOX_DAILY_LIMIT), or Trust Factor daily cap (TRUST_DAILY_LIMIT). Wait, reduce volume, or improve workspace score. See Trust Factor.
Disconnected instance or temporary provider failure. Retry in a few minutes. On email domain registration, provider unavailability uses EMAIL_DOMAIN_PROVIDER_UNAVAILABLE (502 or 503). Do not confuse with antispam (422).

Special cases

Some flows do not follow the standard “error HTTP” pattern. Keep these in mind:

Verify email domain (POST /v1/email/domains/:id/verify)

Scopes: email:domains:list or email:domains:create.

FELCA reports (POST /v1/report)

Public endpoint (no API Key). Errors use the same success: false envelope with code. Full guide: Report API (FELCA).

WhatsApp inbound media download

GET /v1/whatsapp/messages/inbound/{id}/media/download or POST .../media. Scope whatsapp:read. Types: image, audio, document, video, sticker (QR instance). See Inbound messages and replies.

Telegram inbound media download

GET /v1/telegram/messages/inbound/{id}/media/download or POST .../media. Scope telegram:read. Types: image, audio, video, document, sticker (Bot and User/QR).

Instagram inbound media download

GET /v1/instagram/messages/inbound/{id}/media/download or POST .../media. Scope instagram:read. Types: image, video, audio/voice.

Sending Pools (WhatsApp)

Guide: Sending Pools. Campaigns with a pool: CAMPAIGN_SENDING_POOL_INVALID (Campaigns section below).

Number protection (WhatsApp)

Guide: Anti-ban policy.

Groups (WhatsApp, unofficial)

Guide: Groups. Unofficial instance only.

Official Meta line (WhatsApp)

Guide: Official Meta templates. With sk_live_, Meta gates run; in sandbox (sk_test_) they do not. TEMPLATE_NOT_ALLOWED_FOR_INSTANCE and TEMPLATE_META_STRUCTURE_REQUIRES_OFFICIAL are under Templates below.

Full enum list (code)

All 245 public code values returned by the API v1. Internal platform codes are not listed. Expand each section to view the table. For the exact request that caused the error, open API logs.

Next steps