Envelope de erro
Respostas nao-2xx usam:Comportamento real de status code
Headers de rate limit
Em429, o backend envia:
X-RateLimit-GlobalX-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-Retry-AfterX-RateLimit-Retry-Policy
X-RateLimit-Retry-Aftervem em milissegundos.- O body de erro tambem inclui
error.detailed.retryAfterInSeconds. - O backend nao adiciona hoje o header padrao
Retry-After.
Guia de retry
Retente apenas quando a falha for provavelmente transiente:4295xxtransientes
400 INVALID_JSON_BODY401 INVALID_OR_MISSING_API_KEY403 MISSING_PERMISSION403 PROJECT_SUBSCRIPTION_REQUIRED403 PROJECT_BILLING_PAYMENT_REQUIRED403 API_KEY_MODE_MISMATCH
Idempotencia
POST /messages, POST /messages/batch e POST /otp aceitam Idempotency-Key.
Comportamento atual:
- Reusar a mesma key para a mesma operacao reaproveita o resultado salvo.
- Mismatch de payload de OTP retorna
400 INVALID_JSON_BODY. - A API publica nao expoe hoje um erro dedicado de conflito de idempotencia.
Error codes comuns na pratica
INVALID_CONTENT_TYPEINVALID_JSON_BODYINVALID_OR_MISSING_API_KEYMISSING_PERMISSIONBRAZILIAN_PHONE_NUMBER_REQUIREDPROJECT_SUBSCRIPTION_REQUIREDPROJECT_BILLING_PAYMENT_REQUIREDPROJECT_MESSAGE_QUOTA_REACHEDPROJECT_WEBHOOK_LIMIT_REACHEDWEBHOOK_ENDPOINT_ALREADY_EXISTSTEMPLATE_NAME_ALREADY_EXISTSUNKNOWN_MESSAGEUNKNOWN_TEMPLATEUNKNOWN_WEBHOOKUNKNOWN_LOGRATE_LIMITEDMESSAGE_PROVIDER_ERROROTP_PROVIDER_ERRORAPI_KEY_MODE_MISMATCHINTERNAL_SERVER_ERROR