Erro API 429 Too Many Requests: limites, Retry-After e backoff seguro
Guia prático para resolver erros HTTP 429 em APIs de LLM: análise de limites RPM/TPM, leitura de Retry-After e implementação de backoff com jitter.
O erro HTTP 429 Too Many Requests ocorre quando o cliente ultrapassa os limites de frequência de requisições ou o volume de tokens estabelecidos pelo provedor de API. Executar tentativas infinitas e sem controle não resolve a falha, mas sim agrava o bloqueio, gerando tempestades de repetição (retry storms).
Para restabelecer a estabilidade do seu sistema, é fundamental identificar com precisão o tipo de limite (RPM, TPM ou saldo esgotado), processar corretamente o cabeçalho Retry-After e aplicar um algoritmo de recuo exponencial com ruído aleatório (Full Jitter Exponential Backoff).
Por que ocorre o HTTP 429: anatomia dos limites
Em APIs modernas de modelos de linguagem (OpenAI, Anthropic e gateways compatíveis), o status 429 é disparado por três mecanismos principais:
- RPM (Requests Per Minute): limite na quantidade de requisições HTTP por minuto. Ocorre com frequência ao executar vários workers paralelos sem filas de controle.
- TPM (Tokens Per Minute): limite no volume acumulado de tokens de entrada e saída em uma janela de um minuto. É comum ao enviar contextos extensos.
- Esgotamento de cota ou saldo: bloqueio decorrente de saldo zerado, limite de gastos atingido ou término do pacote pré-pago.
Quando o erro decorre de falta de créditos ou limites rígidos de assinatura, tentativas automáticas apenas desperdiçam recursos de rede. Para diagnosticar a causa raiz imediatamente e sem decodificar logs complexos, o BetterToken oferece um painel de controle transparente: exibe em tempo real o status HTTP de cada chamada, o detalhamento exato de tokens de entrada, saída e cache, e o saldo no modelo pay-as-you-go sem bloqueios de 5 horas.
Matriz de diagnóstico do erro 429
Como interpretar o cabeçalho Retry-After
A especificação RFC 6585 define dois formatos válidos para o cabeçalho Retry-After:
- Segundos relativos (número inteiro ou decimal, por exemplo
Retry-After: 12); - Data HTTP (timestamp GMT padronizado, por exemplo
Retry-After: Sun, 23 Aug 2026 03:05:00 GMT).
Implementação do Full Jitter Exponential Backoff
Caso o cabeçalho Retry-After não esteja presente, a abordagem padrão é o recuo exponencial com ruído aleatório total (Full Jitter). A fórmula para a tentativa é:
Idempotência e segurança em operações com efeitos colaterais
Repetir operações de leitura (GET) é seguro por natureza. No entanto, ao acionar tarefas generativas via POST:
- Evite duplicar execuções de agentes: caso uma conexão caia por timeout, verifique se tokens foram debitados antes de reenviar a tarefa.
- Utilize identificadores únicos de cliente: inclua o cabeçalho
X-Request-IDpara rastrear requisições nos logs. - Não trate erros 401 ou 403 como 429: falhas de autenticação exigem correção de credenciais e não pausas em loop.
Verificação e recuperação do serviço
Antes de restaurar o fluxo completo de requisições:
- Envie uma requisição de teste mínima (
max_tokens: 5). - Confirme o recebimento do código HTTP 200 e inspecione o cabeçalho
x-ratelimit-remaining-requests. - Aumente a concorrência gradualmente enquanto monitora a taxa de erros 429 em suas métricas.
Para evitar interrupções inesperadas por limites de requisições por minuto e manter visibilidade completa sobre o status de cada chamada, acesse a BetterToken API, crie chaves dedicadas e monitore o consumo de tokens em tempo real no Dashboard.