Documentation
ANTHROPIC_BASE_URL
La variable d’environnement qui dirige Claude Code et les SDK Anthropic vers un point de terminaison autre que api.anthropic.com — référence complète des variables, configuration par client et deux pièges à l’origine de presque tous les échecs.
ANTHROPIC_BASE_URL indique aux SDK Anthropic et à Claude Code vers quel hôte envoyer les requêtes API, en remplaçant la valeur par défaut https://api.anthropic.com. Définissez une origine sans chemin — le client ajoute lui-même /v1/messages — et associez-la à ANTHROPIC_AUTH_TOKEN, qui devient l’en-tête Authorization: Bearer.
# The origin only — no trailing /v1, no trailing slash.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...Ouvrez ensuite un nouveau terminal : Claude Code et les SDK lisent ces variables au démarrage du processus. Une session déjà en cours conserve donc l’ancien point de terminaison.
https://api.kunavo.com/v1 génère des requêtes vers /v1/v1/messages, et chaque appel renvoie une erreur 404. Le SDK OpenAI suit la convention inverse et attend bien /v1 dans son base_url : cette différence est l’erreur de configuration la plus fréquente dans ce cas.Toutes les variables et leur rôle
La référence des variables d’environnement d’Anthropic répertorie toutes celles que Claude Code lit. Voici celles qui comptent lorsque vous redirigez le point de terminaison.
| Variable | Valeur | Rôle |
|---|---|---|
ANTHROPIC_ | https://api. | L’origine vers laquelle toutes les requêtes sont envoyées. Sans chemin ni barre oblique finale. |
ANTHROPIC_ | sk-kn-… | Identifiant transmis dans Authorization: Bearer. C’est celui qu’attend une passerelle. |
ANTHROPIC_ | sk-ant-… | Identifiant transmis dans l’en-tête x-api-key, le format attendu par api. |
ANTHROPIC_ | claude-sonnet-5 | Le modèle principal utilisé par Claude Code pour la conversation. |
ANTHROPIC_ | claude-opus-5-5 | Le modèle derrière l’alias opus (/model opus). La valeur par défaut de Claude Code est le dernier Opus ; fixez-la donc sur un modèle servi par l’endpoint. Opus 5.5 nécessite Claude Code v2.1.280 ou une version ultérieure. |
ANTHROPIC_ | claude-sonnet-5 | Le modèle derrière l’alias sonnet (/model sonnet). Par défaut, l’alias demande Sonnet 5.5 ; fixez-le donc sur un modèle Sonnet servi par l’endpoint. |
ANTHROPIC_ | claude-haiku-4-5 | Le modèle économique utilisé par Claude Code pour ses appels en arrière-plan — le principal levier de réduction des coûts après la mise en cache. |
GET /v1/models.Configuration par client
Claude Code
Ajoutez les exports au profil shell depuis lequel Claude Code démarre, puis ouvrez un nouveau terminal. L’installation et le flux de travail ne changent pas.
# ~/.zshrc (or ~/.bashrc) — applies to every Claude Code session.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...
# Pin models this endpoint serves. Claude Code's default and its opus/sonnet
# aliases follow Anthropic's newest models, which may not be served here —
# unpinned, those calls 404.
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-5Exécutez /status dans Claude Code pour vérifier quel point de terminaison la session actuelle utilise. Instructions détaillées, y compris pour générer la clé : définir une clé API dans Claude Code.
SDK Anthropic (Python / TypeScript)
Les SDK lisent les mêmes variables d’environnement, et les deux paramètres peuvent aussi être transmis au constructeur — pratique lorsqu’un processus communique avec plusieurs points de terminaison.
from anthropic import Anthropic
# The Anthropic SDK appends /v1/messages, so pass the origin — not .../v1.
client = Anthropic(
base_url="https://api.kunavo.com",
auth_token="sk-kn-...", # sets the Authorization: Bearer header
)
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=512,
messages=[{"role": "user", "content": "Say hi"}],
)
print(msg.content[0].text)SDK OpenAI — l’autre convention
Si votre code utilise déjà OpenAI, vous n’avez pas du tout besoin de ANTHROPIC_BASE_URL. Définissez base_url sur le chemin compatible avec OpenAI — avec /v1 cette fois-ci — et appelez les mêmes modèles Claude via /v1/chat/completions.
from openai import OpenAI
# The OpenAI SDK is the other convention: it wants the /v1 in the base_url.
client = OpenAI(
api_key="sk-kn-...",
base_url="https://api.kunavo.com/v1",
)
r = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Say hi"}],
)
print(r.choices[0].message.content)Cline, Roo Code, Kilo Code, Cursor
Les agents intégrés aux éditeurs proposent généralement les deux mêmes paramètres dans leur interface plutôt que dans l’environnement : un champ « URL de base » ou « point de terminaison personnalisé » et un champ de clé API. Les règles restent les mêmes : origine sans /v1 pour un fournisseur de type Anthropic, et clé dans le champ de clé API. Guides par client : Cline, Roo Code, Kilo Code.
Vérifier le bon fonctionnement
Une commande curl vérifie à la fois l’URL de base et l’identifiant. Une réponse 200 avec un corps JSON signifie que les deux sont corrects.
# 200 and a JSON body means the base URL and the token are both right.
curl -sS https://api.kunavo.com/v1/messages \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
-H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5","max_tokens":16,
"messages":[{"role":"user","content":"ping"}]}'
# In Claude Code, /status shows the endpoint the session is actually using.En cas de problème
| Symptôme | Cause | Correctif |
|---|---|---|
| Erreur 404 sur chaque requête | /v1 ajouté à la fin de ANTHROPIC_ | Définissez uniquement l’origine. Le client ajoute /v1/ |
| 401 / x-api-key invalide | Identifiant défini dans ANTHROPIC_ alors que le point de terminaison s’authentifie avec des jetons Bearer | Utilisez plutôt ANTHROPIC_ — voir l’explication complète de la différence |
| Les requêtes sont toujours envoyées à api. | Variables exportées après le démarrage de la session, ou définies dans un profil que le shell ne lit pas | Ouvrez un nouveau terminal ; confirmez avec echo $ANTHROPIC_ |
| 404 model_ | Identifiant de modèle non proposé par le point de terminaison | Définissez ANTHROPIC_ sur un identifiant provenant de GET /v1/models |
| Claude Code indique que le solde de crédits est trop faible | Les requêtes atteignent le point de terminaison et sont facturées à la clé, et non à l’abonnement | C’est normal : approvisionnez le compte ou supprimez le jeton pour revenir à l’offre. Voir crédit insuffisant |
Effet sur un abonnement Pro ou Max
Tant qu’une variable d’identifiant est définie, Claude Code facture la clé plutôt que l’abonnement connecté : les limites de l’offre cessent de s’appliquer et l’utilisation est facturée au propriétaire de la clé. L’abonnement lui-même n’est pas modifié : supprimez la variable, ouvrez un nouveau terminal et Claude Code revient à l’offre. Les deux ne se cumulent jamais. Le calcul des coûts de chacun est expliqué dans Tarifs de Claude Code.
Suivant
Questions fréquentes
Qu’est-ce que ANTHROPIC_BASE_URL ?
ANTHROPIC_BASE_URL est la variable d’environnement qui indique aux SDK Anthropic et à Claude Code vers quel hôte envoyer les requêtes API, au lieu de l’hôte par défaut https://api.anthropic.com. Définissez uniquement une origine, sans chemin — le client ajoute lui-même /v1/messages — et associez-la à ANTHROPIC_AUTH_TOKEN, qui devient l’en-tête Authorization: Bearer. Tout point de terminaison compatible avec Anthropic convient ; sur Kunavo, la valeur est https://api.kunavo.com.
ANTHROPIC_BASE_URL doit-elle inclure /v1 ?
Non. ANTHROPIC_BASE_URL prend uniquement l’origine — https://api.kunavo.com, et non https://api.kunavo.com/v1 — car les SDK Anthropic et Claude Code ajoutent eux-mêmes le chemin /v1/messages. Si vous incluez /v1, les requêtes sont envoyées à /v1/v1/messages et renvoient une erreur 404. Le SDK OpenAI suit la convention inverse et attend bien /v1 dans son base_url. C’est pourquoi la même passerelle s’écrit de deux façons différentes selon le client qui l’appelle.
Quelle est la différence entre ANTHROPIC_AUTH_TOKEN et ANTHROPIC_API_KEY ?
ANTHROPIC_AUTH_TOKEN transmet l’identifiant dans un en-tête Authorization: Bearer, tandis que ANTHROPIC_API_KEY le transmet dans l’en-tête x-api-key attendu par api.anthropic.com. Une passerelle qui s’authentifie avec des jetons Bearer nécessite ANTHROPIC_AUTH_TOKEN ; définir ANTHROPIC_API_KEY à la place est la cause la plus fréquente d’une erreur 401 après la modification de ANTHROPIC_BASE_URL. Définissez l’une ou l’autre, mais pas les deux : si les deux sont présentes, le comportement dépend de la version du client.
Comment définir une URL de base personnalisée dans Claude Code ?
Exportez ANTHROPIC_BASE_URL et ANTHROPIC_AUTH_TOKEN dans le profil shell depuis lequel Claude Code démarre (~/.zshrc ou ~/.bashrc), puis ouvrez un nouveau terminal pour que les variables soient héritées. Claude Code les lit au démarrage ; une session déjà en cours conserve donc l’ancien point de terminaison. Exécutez /status dans Claude Code pour vérifier quel point de terminaison la session actuelle utilise.
Définir ANTHROPIC_BASE_URL désactive-t-il mon abonnement Claude Pro ou Max ?
Tant qu’une variable d’identifiant telle que ANTHROPIC_AUTH_TOKEN est définie, Claude Code facture la clé plutôt que l’abonnement connecté. Les limites des offres Pro et Max ne s’appliquent donc plus et l’utilisation est facturée au propriétaire de la clé. L’abonnement lui-même n’est pas modifié ni résilié : supprimez la variable et ouvrez un nouveau terminal pour que Claude Code revienne à l’offre.