Skip to main content
A referência completa de códigos está em Erros e os números em Paginação, rate limit e limites. Esta página mostra o que fazer com eles.

Regra geral

Envios não são idempotentes

Repetir um POST /send-text que já chegou envia duas mensagens. Quando uma chamada falha por rede sem que você leia a resposta:
  1. Consulte GET /queue filtrando pelo phone. Se a mensagem estiver lá, ela chegou.
  2. Se você tem o webhook delivery, espere alguns segundos: ele confirma o envio pelo message_id.
  3. Só então reenvie.
Para facilitar, gere um id próprio por mensagem no seu sistema e registre o wabox_id assim que a resposta chegar.

Dimensionando o cliente

  • O limite é por instância: 60 req/s sustentadas, com rajadas de 120. Poucas integrações chegam perto disso, e o gargalo real de envio é o intervalo anti-ban da fila.
  • Use conexões HTTP keep-alive e um pool pequeno. Centenas de conexões simultâneas para a mesma instância só disputam o mesmo bucket.
  • Consultas repetitivas (GET /status em loop, GET /qr-code a cada segundo) contam no limite. Prefira o webhook instance_status. Se precisar consultar, a cada 10 s basta.
  • Um timeout de cliente de 30 s é razoável. Ações imediatas falam com o aparelho e podem levar alguns segundos, enquanto os envios respondem em milissegundos.

Lendo os headers

X-RateLimit-Remaining vem em todas as respostas. Use-o para desacelerar antes de bater no 429.

Erros de validação

400 invalid_request traz details.issues com o caminho de cada campo:
Os casos mais comuns são phone com +, espaços ou traços (envie só dígitos), message vazio, base64 com prefixo errado e delay_typing acima de 15.

Registrando para depurar

Guarde, por chamada, a rota, o wabox_id e o message_id da resposta, o status HTTP e o error.code. Nos webhooks, guarde o event_id. Com isso o suporte cruza a chamada com os logs do Wabox.