Voltar aos guias
Solução de problemas·28 de agosto de 2026·6 min de leitura

Claude Code “API Error: 401 authentication_error” com uma URL base personalizada — todas as causas

Um 401 aqui diz respeito à sua credencial ou à URL base, nunca ao modelo — um problema de modelo retorna 404 com uma mensagem que nomeia o modelo. Essa única distinção resolve a maioria dos casos com um único curl.

Última revisão em .

Um 401 aqui diz respeito à sua credencial ou à URL base, nunca ao modelo — um problema de modelo retorna 404 com uma mensagem que nomeia o modelo. Essa única distinção resolve a maioria dos casos com um único curl.

O erro

terminal
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Missing or invalid API key"}}

Causas e soluções em resumo

CausaSolução
ANTHROPIC_API_KEY definida quando ANTHROPIC_AUTH_TOKEN era necessáriaUse AUTH_TOKEN para uma URL base de terceiros; API_KEY exige um prompt de aprovação única.
URL base contendo um caminho /v1Defina apenas a origem — o Claude Code acrescenta /v1/messages sozinho.
Chave revogada ou conta suspensaAmbos respondem 401, nunca 403. Gere uma nova chave e verifique a conta.
Um modelo que o endpoint Messages não ofereceIsso retorna 404 nomeando o modelo, não 401 — portanto é uma correção diferente.

Imprima as três variáveis e verifique se a URL base não tem caminho

A causa mais comum aparece aqui. A URL base deve ser uma origem — sem /v1 e sem caminho final — porque o cliente acrescenta o endpoint sozinho. Uma URL base terminada em /v1 produz uma solicitação para /v1/v1/messages.

check-env.sh
env | grep -E '^ANTHROPIC_(BASE_URL|AUTH_TOKEN|API_KEY|MODEL)='

# Right: https://api.kunavo.com
# Wrong: https://api.kunavo.com/v1

Chame o endpoint diretamente, das duas formas

O /v1/messages do Kunavo aceita a credencial tanto como x-api-key quanto como Authorization: Bearer, por isso o Claude Code não precisa de plugin ou proxy à frente. Se o curl funcionar e a CLI não, o problema está no ambiente do seu shell, não no servidor.

probe.sh
curl -s https://api.kunavo.com/v1/messages   -H "x-api-key: $ANTHROPIC_AUTH_TOKEN"   -H "anthropic-version: 2023-06-01"   -H "content-type: application/json"   -d '{"model":"claude-sonnet-5","max_tokens":8,
       "messages":[{"role":"user","content":"hi"}]}'

# Same call, other header style — both are accepted:
#   -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"

Remova a variável que você não está usando

Se ANTHROPIC_API_KEY e ANTHROPIC_AUTH_TOKEN estiverem definidas, a variável errada pode prevalecer. Remova ANTHROPIC_API_KEY, inicie um novo shell e tente novamente — uma exportação antiga em um perfil do shell sobrevive a todas as outras correções que você tentar.

Se o status for 404, pare de depurar a chave

Um 404 cuja mensagem nomeia o modelo significa que a credencial foi aceita, mas a string do modelo não foi. Corrija ANTHROPIC_MODEL; não há nada de errado com a chave. Em uma configuração nova, a causa comum é nada fixar o modelo: o Claude Code então envia seu padrão interno, o Opus mais recente, que o Kunavo talvez ainda não ofereça; e /model sonnet solicita o Sonnet 5.5, que o Kunavo não oferece — defina ANTHROPIC_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL e ANTHROPIC_DEFAULT_SONNET_MODEL como IDs obtidos de GET /v1/models.

Se você estiver chamando pela Kunavo

Um 401 do Kunavo se reduz a cinco causas: nenhuma chave chegou em Authorization: Bearer ou x-api-key; a chave não tem o prefixo sk-kn-; é uma chave sk-kn- que o Kunavo nunca emitiu (um erro de digitação ou colagem truncada); foi revogada; ou a conta está suspensa. Nenhuma delas retorna 403, portanto o código de status sozinho informa em qual família você está — e uma chave válida direcionada a um modelo que o endpoint Messages não oferece retorna 404 com o modelo nomeado na mensagem, não 401. Essa é toda a árvore de diagnóstico.

Perguntas frequentes

Por que minha chave funciona no curl, mas não no Claude Code?

Quase sempre é uma segunda variável definida em um perfil do shell ou uma URL base com um caminho. O endpoint aceita os dois estilos de cabeçalho, então a diferença não está no cabeçalho.

ANTHROPIC_AUTH_TOKEN ou ANTHROPIC_API_KEY?

AUTH_TOKEN para uma URL base de terceiros — ele é usado imediatamente. API_KEY aciona primeiro um prompt de aprovação único, que costuma ser confundido com uma falha.

Uma assinatura do Claude cobre uma URL base personalizada?

Não. Uma assinatura autentica no endpoint próprio do fornecedor; apontar a CLI para outro lugar significa usar a credencial desse endpoint, cobrada por ele.

Guias relacionados

Mais detalhes sobre o significado dos erros estão em referência de erros; obter uma chave leva um minuto por meio de cadastro e da guia de autenticação.