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
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Missing or invalid API key"}}Causas e soluções em resumo
| Causa | Solução |
|---|---|
| ANTHROPIC_API_KEY definida quando ANTHROPIC_AUTH_TOKEN era necessária | Use AUTH_TOKEN para uma URL base de terceiros; API_KEY exige um prompt de aprovação única. |
| URL base contendo um caminho /v1 | Defina apenas a origem — o Claude Code acrescenta /v1/messages sozinho. |
| Chave revogada ou conta suspensa | Ambos respondem 401, nunca 403. Gere uma nova chave e verifique a conta. |
| Um modelo que o endpoint Messages não oferece | Isso 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.
env | grep -E '^ANTHROPIC_(BASE_URL|AUTH_TOKEN|API_KEY|MODEL)='
# Right: https://api.kunavo.com
# Wrong: https://api.kunavo.com/v1Chame 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.
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
- Claude API 401 authentication_error / invalid x-api-key — todas as causas
- Instale o Claude Code — o comando para cada sistema operacional, primeiro login e erros comuns
- “Sua organização desativou o acesso à assinatura do Claude para o Claude Code” — as três causas e o que funciona
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.