429 Too Many Requests em vez de processar a requisição.
Por que o rate limit existe
O limite protege duas coisas ao mesmo tempo:- A plataforma, mantendo a API estável e justa para todos os clientes, sem que um único integrador consiga sobrecarregar o serviço.
- O seu número de WhatsApp, evitando rajadas de envio que o WhatsApp interpreta como comportamento de spam. Enviar devagar e de forma constante é mais seguro para a saúde do seu número do que disparar tudo de uma vez.
Limite padrão
O limite padrão é de 3 requisições por segundo, contadas por token de acesso (ou seja, por conta). Como toda chamada à API é autenticada, a cota é sempre atrelada ao seu token.O limite é aplicado a todas as rotas da API, não só ao envio de mensagens. As chamadas de listagem, consulta de destinatário e gestão de instância também consomem a mesma cota.
Flexibilidade por plano
O limite padrão atende à maioria das integrações. Se o seu volume exige mais, a cota da sua conta pode ser ampliada de acordo com o seu plano ou mediante contratação. Fale com o suporte para avaliarmos o limite ideal e a melhor condição para o seu caso.Headers de rate limit
Toda resposta da API traz headers de rate limit que informam o estado atual da sua cota. Eles seguem o padrão de cabeçalhos RateLimit para HTTP proposto pela IETF.Exemplo de resposta 200
Uma requisição bem-sucedida, ainda dentro da cota:Exemplo de resposta 429
Quando você passa do limite, a API responde:code é sempre rate_limited, e o texto de messages reflete o limite atual da sua conta e o tamanho da janela.
Como tratar o rate limit
A estratégia recomendada tem duas camadas. 1. Controle o ritmo antes de enviar (preferencial). Para integrações de alto volume (disparos em lote, filas de mensagens), limite o seu próprio ritmo de saída para nunca ultrapassar o limite. Use uma fila com throttling (por exemplo,bottleneck ou p-queue no Node.js, ou rate.Limiter em Go) configurada para o mesmo teto da sua conta. Assim você não depende de receber um 429.
2. Trate o 429 quando ele acontecer (rede de segurança). Mesmo com throttling, mantenha um retry:
- Ao receber
429, espere o número de segundos indicado emRetry-After(ou, na falta dele, emRateLimit-Reset) e tente de novo. - Se não houver header, use um backoff exponencial com jitter (espere 1s, depois 2s, 4s, e assim por diante, com um teto).
- Antes de enviar, você também pode olhar
RateLimit-Remaining: se estiver perto de zero, aguardeRateLimit-Resetsegundos antes da próxima chamada.
Exemplos de código
Os exemplos abaixo enviam uma mensagem e tratam o429 respeitando os headers. Troque YOUR_API_TOKEN pelo seu token e YOUR_INSTANCE_ID pelo ID da instância.
Em resumo
- O padrão é 3 requisições por segundo por token de acesso, válido para toda a API.
- Toda resposta traz
RateLimit-Limit,RateLimit-RemainingeRateLimit-Reset; o 429 traz tambémRetry-After.RateLimit-ReseteRetry-Aftersão contados em segundos. - O 429 devolve
{ "errors": [{ "code": "rate_limited", ... }] }. - Controle o ritmo no seu código (fila e throttling) para não depender do 429, e mantenha um retry com backoff como rede de segurança.
- Precisa de mais volume? Fale com o suporte para avaliar um limite maior.