DEV Community

Cover image for Comment corriger l'erreur 'Invalid custom3p enterprise config' dans Claude Code
Antoine Laurent
Antoine Laurent

Posted on • Originally published at apidog.com

Comment corriger l'erreur 'Invalid custom3p enterprise config' dans Claude Code

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.

Essayez Apidog aujourd’hui

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 :

  1. ANTHROPIC_BASE_URL se termine par /v1
  2. Mauvaise variable d’authentification : ANTHROPIC_API_KEY au lieu de ANTHROPIC_AUTH_TOKEN, ou inversement
  3. ~/.claude/settings.json invalide
  4. Onboarding Claude Code incomplet sur une nouvelle installation
  5. La passerelle ne transmet pas les en-têtes requis
  6. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Résultat fréquent : 404, puis Invalid custom3p enterprise config.

Incorrect

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
Enter fullscreen mode Exit fullscreen mode
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Enter fullscreen mode Exit fullscreen mode

Correct

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
Enter fullscreen mode Exit fullscreen mode
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Enter fullscreen mode Exit fullscreen mode

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"}]}'
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

vLLM ou passerelle compatible Anthropic avec clé API

export ANTHROPIC_API_KEY="your-key-here"
export ANTHROPIC_BASE_URL="https://your-vllm-server"
Enter fullscreen mode Exit fullscreen mode

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",
  }
}
Enter fullscreen mode Exit fullscreen mode

Exemple invalide : guillemets typographiques

{
  "env": {
    “ANTHROPIC_BASE_URL”: “https://openrouter.ai/api”
  }
}
Enter fullscreen mode Exit fullscreen mode

Format correct

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
    "ANTHROPIC_AUTH_TOKEN": "sk-or-your-openrouter-key"
  }
}
Enter fullscreen mode Exit fullscreen mode

Valider le fichier

Avec Python :

python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json')))" && echo "Valid JSON"
Enter fullscreen mode Exit fullscreen mode

Ou avec jq :

jq . ~/.claude/settings.json
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Corriger

Ajoutez ou mettez à jour ~/.claude.json :

{
  "hasCompletedOnboarding": true,
  "primaryApiKey": "sk-placeholder"
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

Si votre passerelle ne peut pas transmettre anthropic-beta, désactivez les betas expérimentales :

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Depuis Claude Code :

/status
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
  }
}
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Configuration Claude Code

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:4000",
    "ANTHROPIC_AUTH_TOKEN": "sk-litellm-your-key"
  }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Déboguer Invalid custom3p enterprise config

Lancez Claude Code en mode debug :

claude --debug 2>&1 | head -100
Enter fullscreen mode Exit fullscreen mode

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"}]
  }'
Enter fullscreen mode Exit fullscreen mode

Si vous obtenez :

  • 200 : la passerelle répond correctement
  • 401 ou 403 : 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
Enter fullscreen mode Exit fullscreen mode

Vous pouvez ensuite tester plusieurs passerelles ou modèles sans relancer Claude Code à chaque modification.

Capture d'écran de l'interface Apidog pour la configuration d'une requête

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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 :

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 :

  1. quittez Claude Code
  2. modifiez les variables d’environnement ou settings.json
  3. 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"
Enter fullscreen mode Exit fullscreen mode

Si votre proxy intercepte TLS, ajoutez le certificat CA :

export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Vérifiez surtout :

  • anthropic-beta
  • anthropic-version
  • X-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 :

  1. Supprimez /v1 de ANTHROPIC_BASE_URL
  2. Vérifiez ANTHROPIC_AUTH_TOKEN vs ANTHROPIC_API_KEY
  3. Validez ~/.claude/settings.json
  4. Confirmez que l’onboarding est terminé
  5. Vérifiez la transmission des en-têtes
  6. 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)