Busque em todas as páginas da documentação
O pacote @anthropic-ai/sdk lança uma subclasse de erro distinta para cada status HTTP que a API de Mensagens pode retornar, permitindo que você escreva blocos catch tipados em vez de analisar códigos de status manualmente. Esta referência compara cada classe de erro e mostra uma cadeia de catch funcional do mais específico para o menos específico.
catch e adapte os ramos de que você realmente precisa; a maioria dos aplicativos não precisa de todos eles.instanceof Anthropic.APIConnectionError ordenado antes de instanceof Anthropic.APIError em qualquer cadeia que você escrever, pois o primeiro é uma subclasse do último.| Classe | Status HTTP | Retentável | Causa Típica |
|---|---|---|---|
Anthropic.BadRequestError | 400 | Não | Corpo da requisição malformado, valor de parâmetro inválido ou uma combinação não suportada de opções. |
Anthropic.AuthenticationError | 401 | Não | Chave de API ausente, inválida ou expirada. |
Anthropic.PermissionDeniedError | 403 | Não | Chave de API não tem acesso ao modelo ou recurso solicitado. |
Anthropic.NotFoundError | 404 | Não | Recurso referenciado (por exemplo, um ID de modelo ou arquivo) não existe. |
Anthropic.UnprocessableEntityError | 422 | Não | A requisição é um JSON bem formado, mas falha na validação semântica. |
Anthropic.RateLimitError | 429 | Sim | Muitas requisições ou tokens para o nível de limite de taxa atual. |
Anthropic.InternalServerError | >=500 | Sim | Falha transitória no lado da Anthropic. |
Anthropic.APIConnectionError | (nenhum, nenhuma resposta recebida) | Sim | Falha de rede, erro de DNS ou tempo limite antes que uma resposta chegue. |
Anthropic.APIError | (classe base) | Depende | Classe pai genérica; corresponde apenas se nenhuma subclasse mais específica foi correspondida primeiro. |
Anthropic.APIConnectionError é uma subclasse de Anthropic.APIError no SDK TypeScript, ao contrário do Python, onde APIConnectionError é uma classe irmã. Isso significa que uma verificação instanceof Anthropic.APIError também corresponderá a um erro de conexão. Sempre verifique APIConnectionError (e qualquer outra subclasse específica) antes da verificação genérica APIError em uma cadeia if/else if, ou o ramo específico nunca será executado.
catch do Mais Específico para o Menos Específicoimport Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
async function askClaude(prompt: string) {
try {
return await client.messages.create({
model: "claude-sonnet-5",
| Categoria | Classes | Tratamento Recomendado |
|---|---|---|
| Retentável | RateLimitError, InternalServerError, APIConnectionError | Deixe o backoff exponencial integrado do SDK lidar com isso (padrão maxRetries: 2); registre e exiba apenas se ainda falhar após as retentativas. |
| Não Retentável | BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, UnprocessableEntityError | Falhe rapidamente, exiba a mensagem .message e o .type para o chamador e corrija a requisição ou as credenciais em vez de retentar. |
.typeTodo erro do SDK também expõe uma propriedade .type com a string do tipo de erro da API, que fornece uma classificação mais granular do que apenas o código de status HTTP. Dois erros podem compartilhar um status, mas ter um .type diferente:
try {
await client.messages.create({ /* ... */ });
} catch (error) {
if (error instanceof Anthropic.APIError) {
switch (error.type) {
case "invalid_request_error":
// mapeia para BadRequestError (400)
break;
case
Porque no SDK TypeScript, APIConnectionError é uma subclasse de APIError, não uma classe irmã. Uma verificação instanceof Anthropic.APIError também corresponde a erros de conexão, portanto, se essa verificação vier primeiro em uma cadeia if/else if, o ramo mais específico APIConnectionError nunca será executado.
Não. No SDK Python, APIConnectionError é uma classe irmã de APIError, não uma subclasse. Código portado do Python para TypeScript que assume a mesma relação pulará silenciosamente o ramo de erro de conexão.
Geralmente não. O SDK já retenta automaticamente erros 429, 5xx e de conexão com backoff exponencial, usando um maxRetries padrão de 2. Adicione sua própria lógica de retentativa apenas se precisar de uma contagem de retentativas diferente, estratégia de backoff ou comportamento de enfileiramento.
BadRequestError (400), AuthenticationError (401), PermissionDeniedError (403), NotFoundError (404) e UnprocessableEntityError (422). Retentar esses erros desperdiça uma requisição, pois o payload ou as credenciais, e não a rede ou a carga do servidor, causaram a falha.
Qualquer erro de SDK tipado que não correspondeu a uma verificação instanceof mais específica anteriormente na cadeia, pois cada classe de erro específica estende APIError. Coloque-a por último em uma cadeia catch como uma rede de segurança, não como seu caminho de tratamento principal.
.status é o código de status HTTP (um número, como 429). .type é a própria string de tipo de erro da API (como "rate_limit_error" ou "overloaded_error"), que permite distinguir causas que compartilham o mesmo código de status.
Sim, overloaded_error pode chegar sob um status 429 ou 5xx dependendo da causa, que é exatamente o caso em que verificar .type além da classe mapeada por status fornece informações mais precisas.
Qualquer coisa que impeça uma resposta de chegar, como uma falha de DNS, uma conexão interrompida ou um tempo limite do lado do cliente. É distinto dos erros de código de status porque nenhuma resposta HTTP foi recebida.
Para um aplicativo pequeno, uma função wrapper compartilhada (como askClaude acima) que centraliza a cadeia catch mantém o tratamento consistente. Para aplicativos maiores, envolva a cadeia catch em uma utilidade para que cada local de chamada obtenha a mesma classificação de retentável/não retentável sem duplicar a cadeia if/else if.
Sim. O else final no exemplo relança qualquer coisa que não seja um APIError do SDK, como um bug em seu próprio código de chamada. Engolir erros não-SDK silenciosamente torna bugs reais mais difíceis de encontrar.
Menos comum que BadRequestError, pois significa que a requisição era um JSON sintaticamente válido, mas falhou em uma verificação semântica, como um valor que é do tipo correto, mas fora de um intervalo permitido.
O exemplo usa claude-sonnet-5, o modelo padrão na linha atual de modelos Claude (Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5, Claude Haiku 4.5). Substitua pelo modelo que seu aplicativo tem como alvo.
Versões da Pilha: Escrito contra a linha de modelos Claude atual a partir de ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão), e Claude Haiku 4.5 - e o SDK oficial
@anthropic-ai/sdkTypeScript (última versão). Nomes de modelos, versões de SDK e preços mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs antes de confiar neles.