Erros

O formato canônico de erro da API v1 e os códigos transversais a todos os endpoints.

Toda resposta de erro da API v1 segue o mesmo formato: um objeto JSON com success: false, uma mensagem legível em error e um código estável em code — use code para tratamento programático, não a mensagem.

Formato canônico de erro
{
  "success": false,
  "error": "Permissão insuficiente para esta operação",
  "code": "INSUFFICIENT_SCOPE",
  "required_scope": "contacts:write"
}

Códigos transversais

CódigoHTTPQuando ocorre
UNAUTHORIZED401Token ausente ou inválido.
FORBIDDEN403A empresa dona da chave está inativa.
INSUFFICIENT_SCOPE403A chave não tem o escopo exigido pelo endpoint — o campo required_scope indica qual.
PLAN_REQUIRED403O recurso exige um plano superior (ex.: Enterprise) ao da empresa.
VALIDATION_ERROR422O corpo da requisição não passou na validação — o campo details traz o erro por campo.
RATE_LIMITED429A chave excedeu o limite de requisições por minuto.
NOT_FOUND404O recurso não existe — inclusive quando o ID pertence a outra empresa (nunca revela dados de terceiros).
INTERNAL_ERROR500Erro inesperado no servidor.

Duas exceções ao formato canônico: (1) o erro 429 gerado pela camada de infraestrutura (limite por IP, antes de chegar na sua chave) devolve apenas { "error": "Too many requests" }, sem code; (2) os endpoints de webhooks têm formato próprio de resposta — sucesso { "ok": true }, erro { "error": "...", "code": "..." } — não o envelope success/error/code desta seção.

Nas rotas legadas de campanha E de envio (/send/message, /send/template), erros 500 usam o código PROVIDER_ERROR em vez de INTERNAL_ERROR — trate ambos como falha interna não recuperável pelo cliente.

Erros — Prosalab Developers