DonnIA
Toutes les ressources
GuideFondamentaux IA12 min

Utiliser Claude Code avec un autre fournisseur

Rediriger Claude Code vers une passerelle ou une clé API différente avec deux variables d'environnement, et savoir ce que ça coûte.


Il y a plusieurs raisons de vouloir sortir Claude Code de son chemin par défaut : ton entreprise fait passer tout le trafic par une passerelle interne, tu veux facturer sur un compte API plutôt que sur ton abonnement, ou tu veux essayer un fournisseur tiers comme OpenRouter.

Dans les trois cas, le mécanisme est le même : deux variables d'environnement. Une pour dire où envoyer les requêtes, une pour dire comment s'authentifier. Le reste, c'est du détail de configuration et des pièges qu'on découvre trop tard.

Ce guide se limite à ce qui est documenté. Là où la documentation officielle d'Anthropic pose une limite, elle est reprise telle quelle plutôt que contournée.

Les deux variables qui comptent

VariableRôle
ANTHROPIC_BASE_URLL'adresse vers laquelle les requêtes partent
ANTHROPIC_AUTH_TOKENLe secret, envoyé dans l'en-tête Authorization: Bearer
ANTHROPIC_API_KEYLe secret, envoyé dans l'en-tête x-api-key

Tu choisis entre ANTHROPIC_AUTH_TOKEN et ANTHROPIC_API_KEY selon ce que la passerelle attend. Si personne ne te l'a dit, commence par ANTHROPIC_AUTH_TOKEN : un 401 te dira de basculer sur l'autre.

Ce qu'Anthropic ne prend pas en charge

La documentation est explicite : Anthropic ne cautionne, ne maintient et n'audite aucune passerelle tierce, et ne prend pas en charge le routage de Claude Code vers des modèles non-Claude, quelle que soit la passerelle. Ça marche parfois, ça n'est pas supporté. Traite ce montage comme un bricolage assumé, pas comme une configuration officielle.

Avant de commencer

  • Claude Code installé
  • L'adresse de la passerelle et un secret
  • `curl` ou PowerShell pour tester avant de configurer

1Tester la route avant de toucher à Claude Code

Une requête directe te dit si le problème vient de l'adresse, du secret ou de Claude Code. Exporte d'abord les variables dans ton shell :

export ANTHROPIC_BASE_URL=https://llm-gateway.example.com
export ANTHROPIC_AUTH_TOKEN=sk-gateway-key

Puis envoie une requête d'un seul token :

curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "claude-opus-5", "max_tokens": 1, "messages": [{"role": "user", "content": "."}]}'

Une réponse qui commence par {"id":"msg_ valide l'adresse et le secret. Une erreur qui se plaint du nom de modèle les valide aussi : la passerelle a authentifié avant de refuser. Un 401, en revanche, veut dire que ton secret part dans le mauvais en-tête : bascule sur ANTHROPIC_API_KEY et x-api-key.

2Vérifier ce que voit Claude Code

Lance claude depuis le même shell, envoie un message, puis :

/status

L'onglet Status affiche une ligne Anthropic base URL seulement quand une adresse est configurée. Une ligne Auth token ou API key confirme que c'est bien le secret de la passerelle qui sert, et pas ta connexion claude.ai enregistrée.

3Persister sans committer ton secret

Un export shell ne survit pas à la fermeture du terminal, et ne remonte pas jusqu'aux agents lancés en arrière-plan. Pour que ça tienne partout, passe par le bloc env d'un fichier de réglages :

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://llm-gateway.example.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-gateway-key"
  }
}

~/.claude/settings.json s'applique à tous tes projets. .claude/settings.local.json à un seul, et n'est pas versionné.

Jamais dans .claude/settings.json

Ce fichier-là est committé et partagé avec tous ceux qui clonent le dépôt. Ton secret n'y a rien à faire.

Quand un export shell et un bloc env définissent la même variable, c'est la valeur du fichier de réglages qui gagne.

4Le cas OpenRouter

OpenRouter expose un point d'entrée compatible avec l'API Messages, ce qui évite d'installer un proxy local. La configuration ci-dessous vient de la documentation d'OpenRouter, pas de celle d'Anthropic :

export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
export ANTHROPIC_API_KEY="<ta-cle-openrouter>"
export ANTHROPIC_AUTH_TOKEN=""
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1

CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 est une variable Claude Code documentée : elle interroge la passerelle au démarrage et ajoute ses modèles au sélecteur /model, sous l'étiquette From gateway.

Pour épingler ce que résolvent les alias sonnet, opus et haiku, quatre variables existent côté Claude Code :

export ANTHROPIC_DEFAULT_SONNET_MODEL="..."
export ANTHROPIC_DEFAULT_OPUS_MODEL="..."
export ANTHROPIC_DEFAULT_HAIKU_MODEL="..."
export CLAUDE_CODE_SUBAGENT_MODEL="..."

ANTHROPIC_DEFAULT_HAIKU_MODEL sert aussi aux tâches de fond. Note au passage que ANTHROPIC_SMALL_FAST_MODEL, qu'on voit encore dans de vieux tutoriels, est déprécié en sa faveur.

Ce que tu perds en chemin

Ce n'est pas gratuit, et les effets de bord ne sont pas annoncés au moment de la configuration :

  • Ton abonnement claude.ai n'est plus utilisé. Tant qu'un secret de passerelle est actif, il remplace la connexion claude.ai pour la session. Le trafic est facturé au token au propriétaire du secret.
  • Remote Control et la dictée vocale s'éteignent. Les deux reposent sur une identité claude.ai. Elles sont indisponibles quand ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN ou un apiKeyHelper est actif.
  • Le mode rapide peut se plaindre. Sa vérification de disponibilité tape directement api.anthropic.com et ne suit pas ANTHROPIC_BASE_URL.

Les erreurs qu'on rencontre vraiment

SymptômeCause probable
401 alors que la clé est bonneLe secret part dans l'en-tête que la passerelle ne lit pas : change de variable
Un avertissement au démarrage nommant deux sources d'authentificationUne connexion enregistrée et un secret de passerelle coexistent. /logout pour garder la passerelle
API returned an empty or malformed response (HTTP 200)La passerelle a renvoyé du HTML, souvent une page de connexion
400 nommant des champs inconnusLa passerelle transmet à un amont qui refuse des champs que Claude Code envoie
Claude Code demande de se connecter alors que le curl passeUne adresse joignable n'est pas un secret : il en faut un que Claude Code lise avant le premier lancement

La règle à retenir

Teste toujours avec curl avant de configurer Claude Code. Une erreur qui apparaît à ce niveau-là est une erreur de passerelle ; une erreur qui n'apparaît qu'ensuite est une erreur de configuration. Ces deux problèmes se cherchent à des endroits différents, et les confondre coûte une soirée.

Tu as d’autres ressources comme ça ?

Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.

Cette page est en accès libre, n’hésite pas à la partager.