Erros da API do Claude: o que significa cada código e como resolver
Quando uma requisição falha, a API do Claude responde com um código HTTP e um JSON que diz o tipo do erro. Saber ler esses dois dados resolve a maior parte dos problemas em minutos.
Este guia lista os erros da API com o Claude Opus 5, a causa mais comum de cada um e o que fazer.
Tabela rápida
| Código | Tipo | Causa mais comum | Vale repetir? |
|---|---|---|---|
| 400 | invalid_request_error |
Parâmetro inválido ou mensagem mal montada | Não, corrija a requisição |
| 401 | authentication_error |
Chave errada, vazia ou revogada | Não |
| 403 | permission_error |
A chave não tem permissão para a operação | Não |
| 404 | not_found_error |
URL errada ou nome do modelo errado | Não |
| 413 | request_too_large |
Requisição grande demais | Não, reduza o conteúdo |
| 429 | rate_limit_error |
Limite de requisições ou de tokens atingido | Sim, depois de esperar |
| 500 | api_error |
Falha temporária no servidor | Sim |
| 529 | overloaded_error |
API sobrecarregada no momento | Sim, com intervalo |
Os SDKs oficiais já repetem sozinhos, por padrão duas vezes, os erros 429, os 5xx e as falhas de conexão. Os erros 4xx (menos o 429) não adiantam repetir: a requisição precisa ser corrigida.
400: requisição inválida
A API entendeu a requisição, mas algo nela está errado. A mensagem do erro diz o quê. As causas mais comuns:
temperature,top_poutop_kno Claude Opus 5. Esses parâmetros não são aceitos no Claude Opus 5, e enviar qualquer um deles gera 400. É o erro mais comum em código copiado de exemplos antigos: apague o parâmetro.thinkingcombudget_tokens. O formato antigo de raciocínio ({"type": "enabled", "budget_tokens": N}) também gera 400 no Claude Opus 5. O raciocínio adaptativo já vem ligado por padrão; se quiser deixar explícito, usethinking={"type": "adaptive"}.- Mensagens fora de ordem. A lista
messagesprecisa começar com uma mensagemuser. A última também não pode ser doassistant: o Claude Opus 5 não aceita que você comece a resposta por ele. - Esquema recusado no
output_config. Todo objeto do esquema precisa de"additionalProperties": false. Veja o guia de respostas em JSON. max_tokensacima do limite. O Claude Opus 5 aceita até 128 mil tokens de saída.- JSON malformado ou um campo obrigatório faltando (
model,max_tokens,messages).
401: chave inválida
A chave está errada, vazia ou foi revogada. Na open33, a resposta vem assim:
{"error": {"message": "Chave de acesso invalida.", "type": "authentication_error", "code": "invalid_api_key"}}
Confira se ANTHROPIC_API_KEY tem exatamente a chave do painel, sem espaço, quebra de linha ou aspas sobrando. Se você editou o ~/.bashrc ou o ~/.zshrc, abra um terminal novo antes de testar.
No Claude Code, se aparece a tela de login em vez do erro 401, a chave nem chegou a ser usada: veja o guia Claude Code pedindo login.
403: sem permissão
A chave é válida, mas não pode fazer aquela operação. Confira se está usando a chave certa para o projeto e fale com o suporte se o erro continuar.
404: URL ou modelo não encontrado
Duas causas respondem por quase todos os 404:
A URL base com /v1 no final. Os SDKs e o Claude Code acrescentam /v1/messages sozinhos. Com https://api.open33.tech/v1 na URL base, a chamada vai para /v1/v1/messages e a API responde:
{"error": {"message": "Endpoint nao encontrado.", "type": "invalid_request_error", "code": "not_found"}}
Use exatamente https://api.open33.tech, sem barra e sem /v1. Só no cURL, em que você escreve o endereço completo, o caminho é https://api.open33.tech/v1/messages.
O nome do modelo errado. O identificador do Claude Opus 5 é claude-opus-5, com hífens e sem espaços.
413: requisição grande demais
O corpo da requisição passou do tamanho permitido. Reduza o conteúdo: resuma o histórico antigo da conversa ou divida documentos longos em partes.
429: limite atingido
Você passou do limite de requisições ou de tokens por período. Toda conta de API tem limite, inclusive direto na Anthropic. Na open33, os limites de cada plano aparecem no painel, e a API volta a responder na janela seguinte.
O que fazer:
- Deixe o SDK repetir. Ele já espera e tenta de novo sozinho. Quando a resposta traz o cabeçalho
retry-after, ele diz quantos segundos esperar. - Espalhe as requisições. Rajadas de chamadas em paralelo batem no limite mais rápido do que o mesmo volume distribuído no tempo.
- Gaste menos tokens por requisição. Envie só o contexto necessário e use cache de prompt no que se repete.
- Mude de plano se o 429 virar rotina no seu uso normal.
500 e 529: erro no servidor ou sobrecarga
São falhas temporárias, do lado do servidor. O SDK já repete sozinho. Se você faz as chamadas sem SDK, repita com intervalos crescentes (1 s, 2 s, 4 s...) e um número máximo de tentativas.
Quando a resposta vem, mas não do jeito esperado
Nem todo problema é um código de erro. Confira o campo stop_reason da resposta:
"max_tokens": a resposta foi cortada porque atingiu omax_tokens. Aumente o valor; para respostas longas, use streaming."refusal": o modelo recusou o pedido por segurança. Verifique ostop_reasonantes de ler o texto.- Texto vazio em
content[0]: o Claude Opus 5 pode devolver outros blocos antes do texto, como os de raciocínio. Filtre os blocos comtype == "text"em vez de ler sempre o primeiro.
Outro erro comum: com max_tokens alto e sem streaming, o SDK de Python recusa a requisição antes de enviá-la, porque ela pode passar de 10 minutos. A solução é usar streaming.
Tratando erros no código
Python, do erro mais específico para o mais geral:
import anthropic
client = anthropic.Anthropic() # ANTHROPIC_BASE_URL=https://api.open33.tech
try:
resposta = client.messages.create(
model="claude-opus-5",
max_tokens=16000,
messages=[{"role": "user", "content": "Olá!"}],
)
except anthropic.BadRequestError as e:
print(f"Requisição inválida: {e.message}")
except anthropic.AuthenticationError:
print("Chave inválida: confira ANTHROPIC_API_KEY.")
except anthropic.NotFoundError:
print("URL base ou modelo errado: use https://api.open33.tech e claude-opus-5.")
except anthropic.RateLimitError:
print("Limite atingido (429): aguarde a próxima janela.")
except anthropic.APIStatusError as e:
print(f"Erro da API ({e.status_code}): {e.message}")
except anthropic.APIConnectionError:
print("Falha de rede: confira a conexão.")
TypeScript, com APIConnectionError antes de APIError, porque no SDK de TypeScript o primeiro é um caso particular do segundo:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
try {
await client.messages.create({
model: "claude-opus-5",
max_tokens: 16000,
messages: [{ role: "user", content: "Olá!" }],
});
} catch (err) {
if (err instanceof Anthropic.AuthenticationError) {
console.error("Chave inválida: confira ANTHROPIC_API_KEY.");
} else if (err instanceof Anthropic.NotFoundError) {
console.error("URL base ou modelo errado.");
} else if (err instanceof Anthropic.RateLimitError) {
console.error("Limite atingido (429): aguarde a próxima janela.");
} else if (err instanceof Anthropic.APIConnectionError) {
console.error("Falha de rede: confira a conexão.");
} else if (err instanceof Anthropic.APIError) {
console.error(`Erro da API (${err.status}): ${err.message}`);
} else {
throw err;
}
}
Para mudar o número de tentativas automáticas, passe max_retries (Python) ou maxRetries (TypeScript) ao criar o cliente.
Perguntas frequentes
Por que recebo 404 se a minha chave está certa?
Quase sempre é a URL base com /v1 no final. Use https://api.open33.tech, sem /v1: o SDK acrescenta o caminho sozinho.
O erro 429 significa que a minha conta foi bloqueada?
Não. O 429 só indica que você passou do limite daquele período. A API volta a responder na janela seguinte.
Por que o Claude Opus 5 recusa o parâmetro temperature?
Porque o Claude Opus 5 não aceita os parâmetros de amostragem temperature, top_p e top_k. Remova-os da requisição e controle o estilo da resposta pelo prompt.
Devo repetir a requisição quando dá erro 400?
Não. O 400 indica um problema na própria requisição, e repetir dá o mesmo erro. Leia a mensagem, corrija o campo indicado e envie de novo.