Erros e limites

Formato dos erros, códigos, o que tentar de novo e os limites da API.

Formato dos erros

Todo erro tem o mesmo formato:

{
  "error": {
    "code": "validation_error",
    "message": "dados inválidos",
    "details": { "chatId": "informe o chatId" }
  }
}
  • code é estável: trate os erros por ele.
  • message é em português, para leitura humana, e pode mudar.
  • details, quando existe, diz qual campo está errado.

Códigos

StatusCódigoSignificado
400bad_requestCorpo ou parâmetro inválido
400url_not_allowedURL recusada (endereço interno ou porta fora de 80/443)
401missing_token, invalid_tokenToken da instância ausente ou errado
401invalid_client_tokenClient-Token ausente ou errado (conta com Client-Token exigido)
402payment_requiredInstância sem assinatura ativa
404not_foundRecurso não existe (mensagem, grupo, contato…)
409instance_not_provisionedA instância ainda não foi ativada
413payload_too_largeCorpo acima do limite (para arquivos grandes, envie por URL)
422validation_errorCampo inválido (details diz qual)
422instance_not_connectedO número não está conectado ao WhatsApp (confira connectionStatus)
422whatsapp_rejectedO WhatsApp recusou (ex.: sem permissão no grupo, número inexistente)
429rate_limitedMuitas requisições; espere o tempo do header Retry-After
429trial_limit_reachedLimite diário de mensagens do teste grátis
429queue_fullA fila da instância chegou a 10.000 mensagens pendentes
429too_many_attemptsMuitos pedidos de código de pareamento; aguarde alguns minutos
501not_supported_by_providerA rota não existe na API oficial (instância Meta)
501official_api_onlyA rota só existe na API oficial (instância API OnZap)
501not_supportedRecurso indisponível na API OnZap
4xx/502whatsapp_errorErro do WhatsApp ao processar (a message explica)
503whatsapp_unavailableServiço temporariamente fora; tente de novo (veja Retry-After)
504whatsapp_timeoutO WhatsApp demorou demais para responder

Quando tentar de novo

  • 429, 502 e 503: tente de novo depois do tempo do header Retry-After, ou com espera crescente (1 s, 2 s, 4 s…).
  • Outros 4xx: não adianta repetir; corrija a requisição.
  • Timeout num envio: antes de reenviar, confira nos eventos (message.any com fromMe: true) se a mensagem já saiu, para não mandar em duplicidade.

Limites

LimiteValor
Requisições por instância20 por segundo, com rajadas curtas de até 40
Corpo JSONaté 1 MB; com arquivo em base64, até 70 MB
Fila de envioaté 10.000 mensagens pendentes por instância
Teste grátisaté 300 mensagens por dia
Webhooksaté 5 endereços por instância
Links de mídiaválidos por 24 horas