Voltar aos guias
Troubleshooting·30 de agosto de 2026·6 min de leitura

Erro 401 authentication_error / invalid x-api-key — o que verificar, na ordem

Quase todo 401 tem uma de quatro causas, e só uma delas é "a chave está errada". As outras três deixam a chave perfeitamente válida — por isso recriar a chave costuma ser esforço desperdiçado.

Quase todo 401 tem uma de quatro causas, e só uma delas é "a chave está errada". As outras três deixam a chave perfeitamente válida — por isso recriar a chave costuma ser esforço desperdiçado.

O erro

resposta (HTTP 401)
{
  "type": "error",
  "error": { "type": "authentication_error",
             "message": "invalid x-api-key" }
}

Causas e correções em resumo

CausaCorreção
Cabeçalho errado para o hostA Anthropic lê x-api-key; a maioria dos gateways compatíveis com OpenAI lê Authorization: Bearer. O mesmo valor no cabeçalho errado chega como ausente.
Variável de ambiente antiga sobrandoUma ANTHROPIC_API_KEY esquecida no perfil do shell pode vencer a que você acabou de exportar.
Base URL trocada sem trocar a credencialApontar para outro host não torna a chave do provedor anterior válida ali. Host e credencial mudam juntos.
Espaço, quebra de linha ou aspas na chaveCopiar de um PDF ou de um chat costuma trazer caracteres invisíveis. Confira o comprimento da string.

Verifique o que o ambiente realmente contém

Antes de mudar qualquer coisa, olhe as variáveis no mesmo shell que executa a aplicação. Uma parte surpreendente dos casos tem duas credenciais definidas ao mesmo tempo, de provedores diferentes.

conferir.sh
for v in ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN ANTHROPIC_BASE_URL; do
  printf '%-22s [%s] tamanho=%s\n' \
    "$v" "$(printenv "$v" | cut -c1-10)" "$(printenv "$v" | wc -c)"
done

Teste a credencial fora da aplicação

Uma requisição direta separa "o host recusa a chave" de "a aplicação não envia a chave". Se o curl funciona e o código não, o problema não é a credencial.

testar.sh
curl -s -o /dev/null -w 'status=%{http_code}\n' \
  "$ANTHROPIC_BASE_URL/v1/models" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"

# 200 -> credencial boa; investigue a aplicação
# 401 -> credencial ou cabeçalho errados para este host

Separe 401 de 403 e de 402

401 é "não sei quem você é": a credencial não foi aceita. 403 é "sei quem você é e não pode": autenticado, sem permissão. 402 é "sei quem você é e falta saldo". Só o 401 se resolve mexendo na credencial.

Se você chama pela Kunavo

A Kunavo autentica por Authorization: Bearer com a chave sk-kn-, e a base URL é a origem do site sem nenhum caminho depois. Com o Claude Code isso significa ANTHROPIC_AUTH_TOKEN mais ANTHROPIC_BASE_URL, e ANTHROPIC_API_KEY explicitamente removida — um valor antigo nessa variável é a causa mais comum de uma sessão que parece configurada e mesmo assim recusa. O passo a passo de autenticação está na documentação de autenticação.

Perguntas frequentes

Recriar a chave resolve?

Só se a chave tiver sido mesmo revogada. Nas outras três causas mais comuns — cabeçalho errado, variável antiga, base URL trocada — a chave nova falha exatamente igual.

401 pode ser falta de saldo?

Não. Saldo insuficiente é 402, com uma mensagem que fala de créditos. O 401 é sempre sobre identidade.

Funciona no curl e falha no meu código. Por quê?

Quase sempre o código lê outra variável de ambiente, ou roda em outro shell/container onde o export não chegou. Imprima a credencial mascarada dentro do processo para confirmar.

Guias relacionados

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.