Erro 429: limite de requisições, cota ou tentativas?
O 429 costuma ser tratado como uma coisa só — "passei do limite, espero e tento de novo" —, e essa leitura acerta um caso em três. Na API de assinatura, três situações distintas produzem esse código: o limite de requisições por tempo, o limite de tentativas de uma etapa de verificação, e o esgotamento da cota do plano. Esperar e repetir resolve a primeira, não resolve a segunda e é inútil na terceira. Este guia mostra como distinguir as três pela resposta e o que fazer em cada uma.
Três causas, três condutas: limite de requisições pede espera; tentativas esgotadas pedem outro caminho; cota esgotada pede plano. Aplicar recuo exponencial nos três resolve um e desperdiça requisições nos outros dois.
Como distinguir, em uma olhada
| Causa | Como aparece | Esperar resolve? |
|---|---|---|
| Limite de requisições | Fala em rate limit, traz Retry-After |
Sim |
| Tentativas da etapa | Cita o máximo de tentativas daquela etapa | Não — a etapa acabou |
| Cota do plano | Fala em cota | Só na virada do período |
Daí uma recomendação de instrumentação: registre a resposta inteira, não só o código. Um log com "429" e nada mais torna impossível saber, depois, qual dos três aconteceu — e os três exigem ações diferentes de times diferentes.
Caso 1: limite de requisições
É o 429 clássico, uma proteção de tráfego. A resposta traz o intervalo a respeitar:
Duas regras práticas. Obedeça ao Retry-After em vez de inventar o intervalo — ele é a informação que o servidor tem e você não. E, quando ele não vier, use recuo exponencial com teto, nunca repetição em intervalo fixo.
Melhor ainda é não chegar lá. As respostas trazem RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; alarmar quando o remaining fica baixo avisa antes do primeiro 429. Um alarme que dispara depois chega junto com o incidente, não antes dele. O desenho completo de backoff está em rate limits, paginação e idempotência.
Caso 2: as tentativas da etapa acabaram
Este é o 429 que o recuo exponencial não resolve, porque não há nada a esperar:
Cada etapa de verificação tem um orçamento de tentativas. Quando ele acaba, a etapa é encerrada — e repetir só produz o mesmo 429.
Você foi avisado antes. A resposta da última tentativa disponível já indicava a situação: a etapa passa a falhada e o campo que informa se ainda cabe nova tentativa vem negativo. É esse campo que a sua integração deveria observar, não o 429 seguinte. Quem reage só ao 429 desperdiça a informação e ainda gera uma chamada inútil por signatário travado.
Os orçamentos são por tipo de etapa, e isso tem um efeito útil: etapas biométricas usam o limite biométrico da conta, a checagem de identidade governamental tem o seu próprio, o aviso de finalidade tem exatamente uma tentativa, e as demais usam um teto genérico. Como os orçamentos são separados, esgotar um caminho não esgota o alternativo — é o que faz o plano B ser viável quando ele é acionado.
A conduta correta aqui não é técnica: é de produto. Alguém ficou sem saída, e precisa de um caminho alternativo previsto ou de encaminhamento para atendimento humano. Decidir isso durante o incidente é a pior hora.
Caso 3: a cota do plano acabou
Cota e limite de requisições são controles independentes, e a confusão entre eles é frequente:
| Limite de requisições | Cota | |
|---|---|---|
| Mede | Requisições por tempo | Consumo por dia e por mês |
| Serve para | Proteger o serviço | Delimitar o plano |
| Resolve com | Esperar segundos | Virada do período, ou plano maior |
| É por método? | Não | Sim — clique, OTP, biometria, checagem governamental |
A última linha explica um caso que parece contraditório: é possível estar sem cota biométrica e com cota de documento sobrando. As cotas são por método, e esgotar uma não afeta as outras.
Este é o 429 que nunca deveria surpreender, porque existe aviso antes. O evento de aviso de cota é disparado ao cruzar o percentual de alerta da conta, e é literalmente a última chance de reagir antes das recusas — trate-o como alarme, não como log. E o painel traz uma previsão de uso que projeta o fechamento do mês pelo ritmo atual: é o único lugar onde você descobre que vai estourar antes de estourar. Ver o painel de API.
Note também que não existe endpoint público de consulta de cota: o acompanhamento é pelo painel ou pelo evento.
Repetições consomem cota
Um detalhe que liga os casos 2 e 3, e que costuma explicar consumo inesperado: a primeira tentativa de uma etapa já está paga pela criação da transação. Da segunda em diante, cada repetição é debitada, porque cada uma dispara de novo o provedor de verificação.
Um mecanismo de nova tentativa mal calibrado consome cota em silêncio. Vale medir a razão entre documentos enviados e cota consumida: se ela subir sem explicação, normalmente há repetição escondida.
O que implementar
- Ramifique o 429 pelas três causas antes de decidir a ação — a mensagem e a presença do
Retry-Afterbastam para separar. - Obedeça ao
Retry-After, e use recuo exponencial com teto quando ele não vier. - Observe o campo de nova tentativa nas respostas de etapa, em vez de esperar o 429.
- Alarme em
RateLimit-Remainingbaixo e em qualquer aviso de cota. - Nunca repita cota esgotada. Isso não é transitório dentro do período.
Para o conjunto de sinais que uma integração deveria observar, veja o que monitorar numa integração. Para o catálogo de códigos, códigos de erro e tratamento de falhas. E a visão geral da API de assinatura eletrônica descreve os métodos que consomem cada cota.
Perguntas Frequentes
Como sei qual dos três casos é o meu?
Pela mensagem e pelo cabeçalho. Limite de requisições traz Retry-After e fala em rate limit; tentativas esgotadas trazem uma mensagem citando o máximo de tentativas daquela etapa; cota esgotada fala em cota. Registrar a resposta inteira, e não só o código, é o que torna essa distinção possível depois.
O que faço no limite de requisições?
Obedeça ao Retry-After em vez de inventar o intervalo, e use recuo exponencial se ele não vier. Vale também monitorar RateLimit-Remaining, que permite alarmar antes do primeiro 429 — um alarme que dispara depois chega junto com o incidente.
E quando as tentativas de uma etapa acabam?
Aí repetir não adianta: a etapa foi encerrada. Antes de chegar ao 429, a última resposta já avisou — a etapa passa a falhada e o campo que indica nova tentativa vem negativo. Esse é o sinal para acionar um caminho alternativo ou encaminhar para atendimento humano.
Cada tipo de etapa tem seu próprio limite de tentativas?
Sim, e isso importa. Etapas biométricas usam o limite biométrico da conta; a checagem de identidade governamental tem o seu; o aviso de finalidade tem exatamente uma; as demais usam um teto genérico. Como os orçamentos são separados, esgotar um não esgota os outros.
Cota e limite de requisições são a mesma coisa?
Não. O limite de requisições é proteção de tráfego, medido por tempo, e se resolve esperando. A cota é do plano, medida por dia e por mês, e esperar só resolve na virada do período. São controles independentes: dá para estar dentro do limite de requisições e sem cota alguma.
Como evito o 429 de cota?
Assinando o evento de aviso de cota e tratando-o como alarme — ele é o último aviso antes das recusas. Vale olhar também a previsão de uso no painel, que projeta o fechamento do mês e avisa quando a projeção passa do contratado. É o único lugar que avisa antes de estourar.
Repetições consomem cota?
A primeira tentativa de uma etapa está incluída na cota que a transação consumiu na criação. A partir da segunda, cada repetição é debitada, porque cada uma dispara de novo o provedor. Um mecanismo de nova tentativa mal calibrado pode, portanto, consumir cota sem que ninguém perceba.
Trate os três 429 de forma diferente
Backoff resolve um caso, escalada humana resolve outro, e o terceiro precisa de aviso antes de acontecer. Teste os três em homologação, onde é gratuito.
Criar credenciais de homologação Fale com o time comercial