Si vous avez essayé de diriger Claude Code vers DeepSeek V4, OpenRouter ou un autre fournisseur de modèle tiers, vous avez probablement rencontré l’erreur Invalid custom3p enterprise config. Elle signifie que Claude Code n’arrive pas à valider votre configuration de fournisseur personnalisé avant d’envoyer la première requête API.
Ce guide explique ce que signifie custom3p, comment diagnostiquer les causes les plus fréquentes, et comment corriger chaque cas avec des configurations prêtes à tester pour OpenRouter, LiteLLM et vLLM.
TL;DR
Invalid custom3p enterprise config signifie que Claude Code ne peut pas valider la configuration de votre fournisseur tiers.
custom3p est l’étiquette interne utilisée par Claude Code quand ANTHROPIC_BASE_URL pointe vers une API non-Anthropic.
Les causes les plus fréquentes sont :
-
ANTHROPIC_BASE_URLse termine par/v1 - Mauvaise variable d’authentification :
ANTHROPIC_API_KEYau lieu deANTHROPIC_AUTH_TOKEN, ou inversement -
~/.claude/settings.jsoninvalide - Onboarding Claude Code incomplet sur une nouvelle installation
- La passerelle ne transmet pas les en-têtes requis
- Une politique d’entreprise bloque les fournisseurs personnalisés
Commencez par vérifier l’URL de base. Dans beaucoup de cas, supprimer le /v1 final suffit.
Ce que signifie réellement custom3p
Claude Code peut router ses requêtes via plusieurs modes :
| Mode | Déclenchement |
|---|---|
| API Anthropic par défaut | Aucune surcharge définie |
| Amazon Bedrock | CLAUDE_CODE_USE_BEDROCK=1 |
| Google Vertex AI | CLAUDE_CODE_USE_VERTEX=1 |
| Microsoft Foundry | CLAUDE_CODE_USE_FOUNDRY=1 |
| Tiers personnalisé |
ANTHROPIC_BASE_URL pointe vers un autre hôte |
Le dernier mode correspond à custom3p, pour “custom third-party provider”.
Quand ANTHROPIC_BASE_URL pointe vers OpenRouter, LiteLLM, vLLM, une passerelle interne ou un autre endpoint compatible, Claude Code applique une validation spécifique avant d’appeler /v1/messages.
Si cette validation échoue, vous obtenez :
Invalid custom3p enterprise config
Cette erreur est une erreur de configuration, pas un blocage de politique. Elle peut donc être corrigée.
Pourquoi cette erreur apparaît souvent avec DeepSeek, OpenRouter et LiteLLM
En avril 2026, Anthropic a bloqué l’accès aux abonnements Claude Pro et Max pour certains outils tiers d’agents qui usurpaient l’identifiant client de Claude Code. Des outils comme OpenClaw, qui routaient des sessions Claude Code via leurs propres backends, ont cessé de fonctionner.
Ce cas est distinct de celui traité ici.
Depuis, beaucoup de développeurs utilisent le support officiel des fournisseurs tiers de Claude Code via ANTHROPIC_BASE_URL. Par exemple, un fil Reddit a documenté l’utilisation de DeepSeek V4 Pro via OpenRouter, à 0,87 $ par million de tokens de sortie contre 15 $ pour Anthropic, soit environ 17x moins cher. Des projets comme DeepClaude automatisent ce changement de backend.
Le point critique : le support des fournisseurs tiers exige une configuration stricte. Un mauvais endpoint, un mauvais en-tête ou un JSON invalide déclenche Invalid custom3p enterprise config.
Cause 1 : ANTHROPIC_BASE_URL se termine par /v1
Claude Code ajoute automatiquement /v1/messages à l’URL de base.
Si vous configurez déjà une URL qui se termine par /v1, Claude Code appelle :
/v1/v1/messages
Résultat fréquent : 404, puis Invalid custom3p enterprise config.
Incorrect
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Correct
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Tester l’URL finale
Exécutez :
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
"${ANTHROPIC_BASE_URL}/v1/messages" \
-d '{"model":"claude-sonnet-4-6","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}'
Interprétez le résultat :
-
200: endpoint valide -
400: endpoint probablement valide, mais corps de requête incorrect -
404: votre URL est probablement mal formée, souvent à cause du/v1
Cause 2 : mauvaise variable d’authentification
Claude Code utilise deux variables différentes selon le type d’authentification attendu par la passerelle.
| Variable | En-tête envoyé | À utiliser pour |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-key |
Passerelles compatibles Anthropic qui attendent une clé API |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearer |
OpenRouter, LiteLLM, passerelles OAuth ou bearer token |
OpenRouter
OpenRouter attend généralement un bearer token :
export ANTHROPIC_AUTH_TOKEN="sk-or-your-openrouter-key"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
N’utilisez pas ANTHROPIC_API_KEY dans ce cas, car Claude Code enverrait un en-tête x-api-key.
LiteLLM
export ANTHROPIC_AUTH_TOKEN="sk-litellm-your-virtual-key"
export ANTHROPIC_BASE_URL="https://your-litellm-server:4000"
vLLM ou passerelle compatible Anthropic avec clé API
export ANTHROPIC_API_KEY="your-key-here"
export ANTHROPIC_BASE_URL="https://your-vllm-server"
Vérifiez toujours la documentation d’authentification de votre passerelle pour savoir si elle attend Authorization: Bearer ou x-api-key.
Cause 3 : settings.json invalide
Si vous configurez Claude Code via ~/.claude/settings.json, une simple erreur JSON peut empêcher la validation.
Exemple invalide : virgule finale
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-key",
}
}
Exemple invalide : guillemets typographiques
{
"env": {
“ANTHROPIC_BASE_URL”: “https://openrouter.ai/api”
}
}
Format correct
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-openrouter-key"
}
}
Valider le fichier
Avec Python :
python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json')))" && echo "Valid JSON"
Ou avec jq :
jq . ~/.claude/settings.json
Si cette commande échoue, Claude Code ne peut pas lire votre configuration.
Cause 4 : onboarding Claude Code incomplet
Sur une nouvelle installation, Claude Code vérifie ~/.claude.json.
Si hasCompletedOnboarding est absent ou vaut false, Claude Code peut ignorer votre configuration personnalisée et tenter son flux d’authentification standard.
Vérifier l’état d’onboarding
cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding
Corriger
Ajoutez ou mettez à jour ~/.claude.json :
{
"hasCompletedOnboarding": true,
"primaryApiKey": "sk-placeholder"
}
primaryApiKey sert ici de valeur de remplissage. Votre configuration réelle reste définie par settings.json ou vos variables d’environnement.
Redémarrez ensuite Claude Code.
Cause 5 : la passerelle ne transmet pas les en-têtes requis
Claude Code envoie certains en-têtes pendant la validation de configuration.
Votre passerelle doit les transmettre correctement :
anthropic-beta
anthropic-version
X-Claude-Code-Session-Id
LiteLLM le gère par défaut depuis la version 1.82.9+.
Si vous utilisez nginx ou un proxy personnalisé, ajoutez explicitement ces en-têtes.
Exemple nginx
location /v1/ {
proxy_pass http://backend;
proxy_set_header anthropic-beta $http_anthropic_beta;
proxy_set_header anthropic-version $http_anthropic_version;
proxy_set_header X-Claude-Code-Session-Id $http_x_claude_code_session_id;
}
Si votre passerelle ne peut pas transmettre anthropic-beta, désactivez les betas expérimentales :
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Cela réduit certaines fonctionnalités expérimentales, mais permet à la boucle d’agent principale de fonctionner.
Cause 6 : conflit avec une politique d’entreprise
Si vous utilisez Claude Team ou Enterprise, des paramètres gérés peuvent avoir priorité sur :
~/.claude/settings.json- les variables d’environnement
- votre
ANTHROPIC_BASE_URL
Vérifiez si des paramètres gérés existent :
ls ~/.claude/managed-settings.json 2>/dev/null && echo "Managed settings found"
Depuis Claude Code :
/status
Si les paramètres gérés sont actifs, demandez à votre administrateur de :
- autoriser le domaine de votre passerelle
- ajouter vos modèles à
availableModels - autoriser les URLs de base personnalisées
Pour les déploiements que vous contrôlez, les paramètres gérés se trouvent généralement dans :
/Library/Application Support/ClaudeCode/managed-settings.json
sur macOS, ou dans le chemin équivalent Windows/Linux.
Configurations complètes
Claude Code + OpenRouter avec DeepSeek V4 Pro
OpenRouter expose une API compatible Anthropic. Voici une configuration complète via ~/.claude/settings.json :
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-openrouter-key",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek/deepseek-v4-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-pro"
}
}
Les variables ANTHROPIC_DEFAULT_*_MODEL sont importantes : Claude Code peut continuer à demander claude-sonnet-4-6 même si vous avez changé l’URL de base.
Sans surcharge explicite, OpenRouter peut router vers un autre modèle selon votre configuration.
Limitation connue : OpenRouter n’implémente pas toujours entièrement la spécification de streaming Anthropic pour les appels d’outils. Les arguments de fonction peuvent être vides dans certains cas limites. Consultez le statut de compatibilité OpenRouter pour Claude Code.
Claude Code + LiteLLM
LiteLLM est souvent l’option la plus robuste pour Claude Code, car il gère le routage de modèles et la transmission des en-têtes.
config.yaml LiteLLM
model_list:
- model_name: claude-sonnet-4-6
litellm_params:
model: deepseek/deepseek-v4
api_key: "sk-your-deepseek-key"
- model_name: claude-opus-4-7
litellm_params:
model: deepseek/deepseek-v4-pro
api_key: "sk-your-deepseek-key"
Configuration Claude Code
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-litellm-your-key"
}
}
Avec cette configuration, Claude Code envoie claude-sonnet-4-6. LiteLLM intercepte le nom du modèle et le redirige vers DeepSeek V4.
Vous n’avez donc pas besoin de surcharger les noms de modèles côté Claude Code.
Claude Code + vLLM local
Pour une inférence locale avec vLLM, démarrez le serveur :
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--dtype auto \
--api-key local-key \
--port 8000
Puis configurez Claude Code :
export ANTHROPIC_BASE_URL="http://localhost:8000"
export ANTHROPIC_API_KEY="local-key"
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-ai/DeepSeek-V3"
Déboguer Invalid custom3p enterprise config
Lancez Claude Code en mode debug :
claude --debug 2>&1 | head -100
Cherchez notamment :
-
Sending request to:: URL exacte appelée -
Response status:: statut HTTP renvoyé par la passerelle -
enterprise config error:: message interne de validation
Reproduire la requête avec curl
curl -v -X POST "${ANTHROPIC_BASE_URL}/v1/messages" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ANTHROPIC_AUTH_TOKEN}" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: max-tokens-3-5-sonnet-2024-07-15" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 10,
"messages": [{"role": "user", "content": "hi"}]
}'
Si vous obtenez :
-
200: la passerelle répond correctement -
401ou403: problème d’authentification -
404: URL incorrecte -
422: format de requête ou modèle invalide
Tester les API avec Apidog
Lorsque vous déboguez une intégration de fournisseur tiers, Apidog permet d’inspecter rapidement les requêtes et réponses envoyées à votre passerelle LLM.
Créez une collection pour /v1/messages, puis ajoutez les en-têtes suivants comme variables de collection :
Authorization
anthropic-version
anthropic-beta
Vous pouvez ensuite tester plusieurs passerelles ou modèles sans relancer Claude Code à chaque modification.
Cette approche est utile pour vérifier si votre proxy transmet bien anthropic-beta, anthropic-version et X-Claude-Code-Session-Id.
Configurations Claude Code utiles
Désactiver les betas expérimentales
Si votre passerelle ne transmet pas les en-têtes personnalisés :
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Cela désactive la négociation des fonctionnalités beta. La boucle d’agent reste utilisable, mais certaines fonctionnalités expérimentales peuvent ne plus fonctionner.
Activer la découverte des modèles de passerelle
À partir de Claude Code v2.1.129 :
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
Claude Code interroge /v1/models au démarrage et ajoute les modèles compatibles au sélecteur /model.
Seuls les modèles dont les identifiants commencent par claude ou anthropic sont ajoutés automatiquement. Pour DeepSeek ou d’autres modèles, utilisez plutôt :
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek/deepseek-v4-pro"
Ajouter une entrée personnalisée au sélecteur /model
export ANTHROPIC_CUSTOM_MODEL_OPTION="deepseek/deepseek-v4-pro"
export ANTHROPIC_CUSTOM_MODEL_OPTION_NAME="DeepSeek V4 Pro"
export ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION="17x moins cher que Claude Opus"
Cette option apparaît dans /model et permet de basculer plus facilement pendant une session.
Guides connexes
Si vous explorez Claude Code avec des backends personnalisés, consultez aussi :
- Comment rédiger des fichiers AGENTS.md pour les équipes de développement API — configurer le comportement de Claude Code pour votre stack
- Ruflo : Orchestration Multi-Agent pour Claude Code — ajouter des essaims, une mémoire persistante et plus de 100 outils MCP
- Obtenez une API Claude illimitée gratuite via Puter.js — alternative navigateur pour les applications clientes
- Meilleurs LLM locaux 2026 — exécuter l’inférence localement avec vLLM
FAQ
Utiliser un fournisseur tiers avec Claude Code est-il contraire aux conditions d’Anthropic ?
Non. Anthropic documente et prend en charge ANTHROPIC_BASE_URL pour Bedrock, Vertex AI, Foundry et les passerelles personnalisées.
Le blocage d’avril 2026 concernait des outils tiers qui usurpaient l’identifiant client de Claude Code pour accéder à l’API Anthropic via des abonnements. Utiliser votre propre passerelle ou OpenRouter avec votre propre clé API est un cas différent.
La boucle d’agent Claude Code fonctionne-t-elle avec DeepSeek V4 Pro ?
La boucle principale fonctionne : édition de fichiers, commandes shell, tâches multi-étapes.
Deux limites importantes restent possibles via les fournisseurs tiers :
- outils serveur MCP
- entrée image/vision
Si votre workflow dépend de ces capacités, utilisez l’API Anthropic, Bedrock ou Vertex.
Pourquoi l’erreur mentionne-t-elle enterprise config si je n’ai pas de plan Enterprise ?
Claude Code utilise enterprise config comme nom interne pour certaines configurations de fournisseurs tiers. Ce n’est pas nécessairement lié à votre abonnement.
Peut-on basculer entre Anthropic et un fournisseur tiers pendant une session ?
Pas dans une même session. ANTHROPIC_BASE_URL est lu au démarrage.
Pour changer de fournisseur :
- quittez Claude Code
- modifiez les variables d’environnement ou
settings.json - relancez Claude Code
DeepClaude automatise ce changement avec des options comme --backend ds ou --backend anthropic.
Claude Code prend-il en charge un proxy d’entreprise ?
Oui. Définissez HTTPS_PROXY avant de lancer Claude Code :
export HTTPS_PROXY="http://your-proxy:8080"
export ANTHROPIC_BASE_URL="https://your-internal-gateway"
Si votre proxy intercepte TLS, ajoutez le certificat CA :
export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"
Mon test curl fonctionne, mais Claude Code échoue. Pourquoi ?
Claude Code effectue une validation préalable que votre test curl ne reproduit pas toujours.
Comparez les différences avec :
claude --debug
Vérifiez surtout :
anthropic-betaanthropic-versionX-Claude-Code-Session-Id- le modèle demandé
- le chemin exact appelé
Conclusion
Invalid custom3p enterprise config est une erreur de validation de configuration.
Corrigez dans cet ordre :
- Supprimez
/v1deANTHROPIC_BASE_URL - Vérifiez
ANTHROPIC_AUTH_TOKENvsANTHROPIC_API_KEY - Validez
~/.claude/settings.json - Confirmez que l’onboarding est terminé
- Vérifiez la transmission des en-têtes
- Vérifiez les politiques gérées si vous êtes sur Team ou Enterprise
Une fois la configuration valide, Claude Code peut exécuter sa boucle d’agent via le backend choisi. DeepSeek V4 Pro via OpenRouter ou LiteLLM couvre de nombreux cas d’usage à coût réduit, avec comme principales limites les outils MCP et l’entrée image/vision.

Top comments (0)