Retour aux guides
Dépannage·30 août 2026·6 min de lecture

ANTHROPIC_AUTH_TOKEN vs ANTHROPIC_API_KEY — laquelle Claude Code lit réellement

Ce ne sont pas des alias. L’une devient `x-api-key`, l’autre devient `Authorization: Bearer` — et lorsque les deux sont définies, celle que vous ne vouliez pas utiliser peut l’emporter. La plupart des signalements « ma clé est correcte mais l’authentification échoue » avec une URL de base personnalisée correspondent à ce cas.

Dernière vérification le .

Ce ne sont pas des alias. L’une devient `x-api-key`, l’autre devient `Authorization: Bearer` — et lorsque les deux sont définies, celle que vous ne vouliez pas utiliser peut l’emporter. La plupart des signalements « ma clé est correcte mais l’authentification échoue » avec une URL de base personnalisée correspondent à ce cas.

L’erreur

the two variables
# Sent as:  x-api-key: <value>
export ANTHROPIC_API_KEY="sk-ant-..."

# Sent as:  Authorization: Bearer <value>
export ANTHROPIC_AUTH_TOKEN="sk-kn-..."

# Where those headers go:
export ANTHROPIC_BASE_URL="https://api.kunavo.com"

Causes et solutions en bref

CauseSolution
La passerelle attend un token bearer ; vous avez défini la variable de clé APILa plupart des passerelles compatibles OpenAI s’authentifient avec `Authorization: Bearer`. Placez la clé de la passerelle dans ANTHROPIC_AUTH_TOKEN.
Les deux variables sont définies, provenant de fournisseurs différentsUn ANTHROPIC_API_KEY obsolète dans votre profil shell peut être envoyé avec le token. Désactivez celui que vous n’utilisez pas.
L’URL de base est définie, mais pas les identifiantsPointer vers un nouvel hôte ne rend pas valide l’ancienne clé d’un autre fournisseur. L’identifiant doit changer avec l’hôte.
La variable est définie dans un shell différent de celui qui exécute l’outilUn export dans un shell interactif n’est pas transmis à un processus lancé par une interface graphique. Vérifiez la variable dans le même environnement.

Voir ce que contient réellement votre environnement

Vérifiez les deux variables dans le shell qui lance l’outil, avant de modifier quoi que ce soit. Une proportion étonnamment importante de ces sessions a les deux variables définies — souvent l’une provient d’une modification de profil datant de plusieurs mois, dont personne ne se souvient.

inspect-env.sh
for v in ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN ANTHROPIC_BASE_URL; do
  printf '%-22s %s\n' "$v" "$(printenv "$v" | cut -c1-12)"
done

# Prefixes tell you the provider at a glance:
#   sk-ant-  Anthropic direct
#   sk-kn-   Kunavo

Définir la paire correspondant à votre hôte et désactiver l’autre

Traitez l’hôte et l’identifiant comme une seule unité. Avec une URL de base tierce, il s’agit normalement du token bearer associé à l’URL de base, avec la clé API directe explicitement désactivée afin qu’elle ne puisse pas être sélectionnée.

third-party.sh
unset ANTHROPIC_API_KEY

export ANTHROPIC_AUTH_TOKEN="sk-kn-..."
export ANTHROPIC_BASE_URL="https://api.kunavo.com"

# On Kunavo, pin served models too: Claude Code's default and its opus and
# sonnet aliases follow Anthropic's newest models, and the sonnet alias asks
# for Sonnet 5.5, which Kunavo does not serve — unpinned, that request 404s.
export ANTHROPIC_MODEL="claude-sonnet-5"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-5-5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5"

claude

Confirmer sur le réseau, pas dans votre tête

Si l’authentification échoue encore, éliminez l’environnement de l’équation : envoyez la requête manuellement avec l’en-tête que vous pensez utiliser. Si elle renvoie 200 alors que l’outil échoue, cela signifie que l’outil ne lit pas la variable que vous avez définie — le plus souvent à cause d’un autre shell ou d’un fichier de configuration qui la remplace.

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

Si vous appelez via Kunavo

Kunavo lit la clé depuis `Authorization: Bearer` ou `x-api-key`, l’en-tête n’est donc pas le facteur décisif. Avec Claude Code, la paire fonctionnelle reste ANTHROPIC_AUTH_TOKEN plus ANTHROPIC_BASE_URL — le token prend effet sans l’autorisation ponctuelle requise par ANTHROPIC_API_KEY — et ANTHROPIC_API_KEY doit être désactivée plutôt que laissée en place, car une valeur obsolète est la cause la plus fréquente d’une session qui semble configurée mais refuse toujours les requêtes. La même clé `sk-kn-` fonctionne telle quelle comme token bearer de style OpenAI vers /v1/chat/completions, de sorte qu’un seul identifiant couvre les deux formats. La configuration complète, y compris les noms de modèles à utiliser, se trouve dans notre guide Claude Code sur les erreurs 401.

Questions fréquentes

Si les deux variables sont définies, laquelle l’emporte ?

Ne vous fiez pas à la réponse — il s’agit d’une règle de priorité qui a changé entre les versions et qui diffère selon les SDK. Définissez-en exactement une et désactivez l’autre ; c’est la seule configuration qui se comporte partout de la même manière.

Puis-je utiliser ANTHROPIC_AUTH_TOKEN directement avec Anthropic ?

L’API d’Anthropic s’authentifie avec x-api-key ; une clé Anthropic directe doit donc être placée dans ANTHROPIC_API_KEY. La variable de token existe pour les hôtes qui attendent un identifiant bearer.

Le SDK utilise-t-il les mêmes variables ?

Les SDK Python et TypeScript lisent ANTHROPIC_API_KEY et envoient x-api-key. Si vous dirigez un SDK vers une passerelle utilisant l’authentification bearer, transmettez explicitement l’identifiant au lieu de dépendre de l’environnement.

Guides associés

La sémantique détaillée des erreurs est disponible dans référence des erreurs ; obtenir une clé prend une minute via inscription et la guide d’authentification.