O 529 é o único erro da Claude que o seu código não causou: a própria Anthropic está sobrecarregada. Não dá para corrigir — dá para absorver bem. Isso significa retry paciente, um modelo de reserva e nunca amplificar o incidente com tentativas imediatas.
O erro
{
"type": "error",
"error": { "type": "overloaded_error",
"message": "Overloaded" }
}Causas e correções em resumo
| Causa | Correção |
|---|---|
| Saturação do provedor (dias de lançamento, incidentes regionais) | Backoff exponencial com jitter. Consulte a página de status do provedor em vez de refazer o deploy. |
| Seu pico de tráfego caiu durante um incidente parcial | Distribua os jobs em lote; dez minutos de espera costumam resolver. |
| Retry imediato em loop | Tentar de novo na hora multiplica a carga e prolonga o incidente para todo mundo, inclusive para você. |
Faça retry como um bom cidadão
Trate o 529 como um 429 sem cabeçalho retry-after: backoff exponencial começando em ~2s, com jitter, teto de 30–60s, desistindo depois de ~5 tentativas e enfileirando o trabalho. O mesmo ramo de código que trata 429 serve para 529.
import time, random
from openai import APIStatusError
def com_retry(fn, tentativas=5):
for i in range(tentativas):
try:
return fn()
except APIStatusError as e:
if e.status_code not in (429, 500, 529):
raise
espera = min(2 ** i + random.random(), 60)
time.sleep(espera)
raise RuntimeError("esgotou as tentativas")Troque de modelo em vez de cair
Em caminhos sensíveis a latência, defina uma reserva: dentro da mesma família (Sonnet → Haiku) o comportamento fica parecido; entre provedores (Claude → Gemini) você sobrevive a um incidente inteiro. Em um endpoint compatível com OpenAI isso é a troca de uma string.
PREFERIDOS = ["claude-sonnet-4-6", "claude-haiku-4-5", "gemini-2-5-flash"]
def completar(mensagens):
ultimo = None
for modelo in PREFERIDOS:
try:
return client.chat.completions.create(
model=modelo, messages=mensagens, max_tokens=800)
except APIStatusError as e:
if e.status_code not in (429, 500, 529):
raise
ultimo = e # saturado — tenta o próximo
raise ultimoNão confunda 529 com 429 nem com 402
429 quer dizer que você passou dos seus limites (o servidor está bem). 529 quer dizer que o servidor está sobrecarregado (sua cota está bem). 402 quer dizer saldo insuficiente. Os três se parecem no log e têm correções completamente diferentes: só o 429 e o 529 devem ser repetidos.
Se você chama pela Kunavo
Na Kunavo o mesmo catálogo multimodelo fica atrás de uma única chave e de uma única carteira, então o failover entre provedores do exemplo acima é a troca do nome do modelo — não exige segunda conta nem segundo cadastro. Requisições que falham não são cobradas. Capacidade e preço são perguntas separadas; para a segunda, as tarifas por token estão em nosso guia de preços da API da Claude.
Perguntas frequentes
O erro 529 é culpa minha?
Não. É capacidade do lado do provedor. Suas únicas responsabilidades são não amplificar o problema (backoff com jitter) e ter para onde migrar se o incidente durar mais que o seu orçamento de latência.
Qual a diferença entre 529 e 429?
429 significa que você ultrapassou seus limites; 529 significa que o servidor está sobrecarregado. Ambos podem ser repetidos, mas só o 429 costuma vir com uma dica de retry-after.
Vou ser cobrado por uma requisição que deu 529?
Não deveria — a requisição não produziu tokens. Na Kunavo, requisições com falha não são debitadas do saldo.
Guias relacionados
- Erro 429 rate_limit_error na API da Claude — o que significa e como resolver
- Erro 401 authentication_error / invalid x-api-key — o que verificar, na ordem
- Claude API 529 overloaded_error — what it is and how to ride it out
A semântica completa dos erros está na referência de erros; para obter uma chave, basta criar uma conta e seguir a documentação de autenticação.