Documentation

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.

~/.zshrc
# 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.

N’incluez pas /v1 dans ANTHROPIC_BASE_URL. Les clients Anthropic ajoutent eux-mêmes le chemin, donc 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.

VariableValeurRôle
ANTHROPIC_BASE_URLhttps://api.kunavo.comL’origine vers laquelle toutes les requêtes sont envoyées. Sans chemin ni barre oblique finale.
ANTHROPIC_AUTH_TOKENsk-kn-…Identifiant transmis dans Authorization: Bearer. C’est celui qu’attend une passerelle.
ANTHROPIC_API_KEYsk-ant-…Identifiant transmis dans l’en-tête x-api-key, le format attendu par api.anthropic.com. Définissez celui-ci OU le jeton ci-dessus, mais pas les deux.
ANTHROPIC_MODELclaude-sonnet-5Le modèle principal utilisé par Claude Code pour la conversation.
ANTHROPIC_DEFAULT_OPUS_MODELclaude-opus-5-5Le 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_DEFAULT_SONNET_MODELclaude-sonnet-5Le 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_DEFAULT_HAIKU_MODELclaude-haiku-4-5Le 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.
Les noms de modèle doivent correspondre à des modèles réellement proposés par le point de terminaison. Pointer vers une passerelle tout en conservant un identifiant de modèle qu’elle ne propose pas est la deuxième cause d’échec la plus fréquente. L’erreur affichée est 404 model_not_found, et non une erreur d’authentification. Les identifiants de modèle de Kunavo sont répertoriés sur la page des modèles et renvoyés en temps réel par 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
# ~/.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-5

Exé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.

anthropic_sdk.py
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.

openai_sdk.py
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ômeCauseCorrectif
Erreur 404 sur chaque requête/v1 ajouté à la fin de ANTHROPIC_BASE_URLDéfinissez uniquement l’origine. Le client ajoute /v1/messages.
401 / x-api-key invalideIdentifiant défini dans ANTHROPIC_API_KEY alors que le point de terminaison s’authentifie avec des jetons BearerUtilisez plutôt ANTHROPIC_AUTH_TOKEN — voir l’explication complète de la différence
Les requêtes sont toujours envoyées à api.anthropic.comVariables exportées après le démarrage de la session, ou définies dans un profil que le shell ne lit pasOuvrez un nouveau terminal ; confirmez avec echo $ANTHROPIC_BASE_URL dans le même shell que celui qui lance le client.
404 model_not_foundIdentifiant de modèle non proposé par le point de terminaisonDéfinissez ANTHROPIC_MODEL sur un identifiant provenant de GET /v1/models
Claude Code indique que le solde de crédits est trop faibleLes requêtes atteignent le point de terminaison et sont facturées à la clé, et non à l’abonnementC’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.