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.

Códigos de falha de entrega da Meta

Mensagens com status: "failed" podem trazer um código específico da Meta. Nas rotas de mensagens e destinatários de campanha, use delivery_error.code para automação e delivery_error.description para exibição em português. Os campos error_message e failure_reason preservam o texto bruto apenas por compatibilidade.

CódigoSignificado em português
130403Você bloqueou este contato no WhatsApp — desbloqueie para enviar
130472Número em teste interno da Meta — sem ação disponível pelo operador
131008Faltou um campo obrigatório no envio
131009Valor inválido em um dos campos do envio
131021Não é possível enviar mensagem pro próprio número
131026Número não tem WhatsApp ativo
131031Conta WhatsApp Business suspensa pela Meta
131042Dados fiscais ou de pagamento incompletos na Meta
131047Janela de 24h fechada — só dá pra usar template aprovado
131049Meta limitou: usuário recebeu marketing demais (de várias empresas)
131050Contato pediu para não receber marketing (opt-out)
131051Tipo de mensagem não suportado neste número
131053Falha no upload da mídia (formato ou link inválido)
131056Limite de mensagens entre essas duas contas atingido
131063Marketing desabilitado na configuração da conta
132000Variáveis do template não batem com o esperado
132001Template não existe
132005Texto traduzido muito longo
132007Conteúdo do template viola política da Meta
132012Formato da variável não bate com o template
132015Template pausado pela Meta
132016Template desabilitado
132068Flow bloqueado
132069Flow com throttle
133000Erro de registro da conta WhatsApp Business
133004Servidor da Meta indisponível temporariamente
133005PIN de verificação em duas etapas incorreto
133006Número precisa ser verificado antes de registrar
133008Muitas tentativas de PIN — aguarde o tempo indicado
133009PIN inserido rápido demais — aguarde
133010Número não registrado na Meta
133015Número recém-deletado — aguarde alguns minutos

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