Si has intentado apuntar Claude Code a DeepSeek V4, OpenRouter u otro proveedor de modelos de terceros, es probable que hayas visto este error: Invalid custom3p enterprise config. El mensaje no explica qué validar ni dónde mirar, pero normalmente se resuelve corrigiendo la URL base, la variable de autenticación o el archivo de configuración.
Esta guía explica qué significa custom3p, cómo depurar el error y qué configuraciones usar para ejecutar el bucle de agente de Claude Code con OpenRouter, LiteLLM o un backend local como vLLM.
En resumen
Invalid custom3p enterprise config significa que Claude Code no puede validar la configuración de un proveedor de terceros.
En Claude Code, custom3p es la etiqueta interna para cualquier endpoint no-Anthropic configurado mediante:
ANTHROPIC_BASE_URL
Las causas más comunes son:
-
ANTHROPIC_BASE_URLtermina en/v1 - Estás usando la variable de credencial incorrecta
-
~/.claude/settings.jsontiene JSON inválido - La instalación nueva no completó el onboarding
- La pasarela no reenvía encabezados requeridos
- Una política empresarial bloquea la configuración
Empieza por la URL base: en la mayoría de casos, eliminar /v1 resuelve el problema.
Qué significa realmente custom3p
Claude Code puede enrutar solicitudes en varios modos:
| Modo | Cómo se activa |
|---|---|
| API de Anthropic | Sin anulación configurada |
| Amazon Bedrock | CLAUDE_CODE_USE_BEDROCK=1 |
| Google Vertex AI | CLAUDE_CODE_USE_VERTEX=1 |
| Microsoft Foundry | CLAUDE_CODE_USE_FOUNDRY=1 |
| Tercero personalizado |
ANTHROPIC_BASE_URL apunta a otro host |
La última opción es custom3p: “custom third-party provider”.
Cuando ANTHROPIC_BASE_URL apunta a LiteLLM, OpenRouter, vLLM, una pasarela corporativa u otro endpoint no-Anthropic, Claude Code ejecuta una validación antes de enviar la primera solicitud real.
Si esa validación falla, muestra:
Invalid custom3p enterprise config
Este error es de configuración. No significa necesariamente que el proveedor esté bloqueado.
Por qué aparece este error ahora
En abril de 2026, Anthropic bloqueó el acceso a suscripciones Claude Pro y Max para herramientas de agentes de terceros que suplantaban la ID de cliente de Claude Code.
Eso es diferente a usar el soporte oficial de Claude Code para proveedores personalizados.
Después de ese cambio, muchos desarrolladores empezaron a enrutar Claude Code a backends más económicos mediante ANTHROPIC_BASE_URL. Por ejemplo, un hilo de Reddit documentó el uso de DeepSeek V4 Pro a través de OpenRouter, con un coste menor por millón de tokens de salida frente a Anthropic. Proyectos como DeepClaude empaquetaron esta configuración en un flujo de un solo comando.
El problema: Claude Code exige que la configuración de proveedor personalizado sea válida. Si falla una URL, una credencial o un encabezado, obtienes Invalid custom3p enterprise config.
Causa raíz 1: ANTHROPIC_BASE_URL termina en /v1
Este es el fallo más común.
Claude Code añade automáticamente:
/v1/messages
a la URL configurada en ANTHROPIC_BASE_URL.
Si tu URL ya termina en /v1, Claude Code termina llamando a:
/v1/v1/messages
y la pasarela suele responder 404.
Incorrecto
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"
Correcto
export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"
export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"
Verifica el endpoint real
Ejecuta:
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"}]}'
Interpreta el resultado:
-
200: el endpoint existe y respondió correctamente -
400: el endpoint existe, aunque el body no sea válido para esa pasarela -
404: probablemente tienes un problema con/v1
Causa raíz 2: variable de credencial incorrecta
Claude Code puede enviar credenciales de dos formas distintas:
| Variable | Encabezado enviado | Cuándo usar |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-key |
Pasarelas compatibles con el formato Anthropic |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearer |
LiteLLM, OpenRouter y pasarelas estilo OAuth |
Si usas la variable incorrecta, la pasarela puede rechazar la solicitud y Claude Code lo reportará como configuración inválida.
OpenRouter
OpenRouter normalmente espera Authorization: Bearer:
export ANTHROPIC_AUTH_TOKEN="sk-or-your-openrouter-key"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
No uses ANTHROPIC_API_KEY para OpenRouter si tu configuración espera Bearer tokens.
LiteLLM
export ANTHROPIC_AUTH_TOKEN="sk-litellm-your-virtual-key"
export ANTHROPIC_BASE_URL="https://your-litellm-server:4000"
Pasarela DeepSeek o vLLM con API key
export ANTHROPIC_API_KEY="your-key-here"
export ANTHROPIC_BASE_URL="https://your-vllm-server"
Regla práctica: revisa la documentación de tu pasarela y confirma si espera Authorization: Bearer o x-api-key.
Causa raíz 3: settings.json malformado
Si configuras Claude Code desde:
~/.claude/settings.json
un JSON inválido impide que Claude Code lea la configuración.
Error: coma final
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-key",
}
}
Error: comillas inteligentes
{
"env": {
“ANTHROPIC_BASE_URL”: “https://openrouter.ai/api”
}
}
Configuración válida
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "sk-or-your-openrouter-key"
}
}
Valida el archivo antes de iniciar Claude Code
Con Python:
python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json')))" && echo "Valid JSON"
O con jq:
jq . ~/.claude/settings.json
Si alguno de estos comandos falla, Claude Code no podrá cargar la configuración.
Causa raíz 4: la instalación nueva no completó el onboarding
Claude Code revisa:
~/.claude.json
y busca:
"hasCompletedOnboarding": true
En una instalación nueva, si esa clave no existe o es false, Claude Code puede omitir tu configuración personalizada y entrar en el flujo estándar de autenticación.
Verifica el estado actual
cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding
Solución
Edita ~/.claude.json y añade:
{
"hasCompletedOnboarding": true,
"primaryApiKey": "sk-placeholder"
}
primaryApiKey funciona como marcador de posición. Tu configuración real vendrá de settings.json o de variables de entorno.
Después de guardar, reinicia Claude Code.
Causa raíz 5: la pasarela no reenvía encabezados requeridos
Claude Code envía encabezados adicionales durante la validación. Si tu proxy o pasarela los elimina, la validación puede fallar.
Encabezados importantes:
anthropic-beta
anthropic-version
X-Claude-Code-Session-Id
LiteLLM los maneja por defecto en versiones recientes. Si usas nginx u otro proxy personalizado, reenvíalos explícitamente.
Ejemplo con 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 no puedes reenviar anthropic-beta
Configura:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Esto desactiva características experimentales que dependen del encabezado beta. El bucle principal de agente puede seguir funcionando, pero algunas capacidades avanzadas podrían no estar disponibles.
Causa raíz 6: conflicto con política empresarial
Si usas Claude Team o Enterprise, tu administrador puede haber aplicado configuraciones gestionadas. Estas pueden tener prioridad sobre:
- Variables de entorno
~/.claude/settings.json- URLs base personalizadas
- Modelos disponibles
Verifica si hay configuración gestionada
ls ~/.claude/managed-settings.json 2>/dev/null && echo "Managed settings found"
También puedes revisar desde Claude Code:
/status
Si ves “Managed settings”, habla con tu administrador. Puede que necesites que habilite:
- El dominio de tu pasarela
- IDs de modelo específicos
- El uso de
ANTHROPIC_BASE_URL - Excepciones para URLs personalizadas
En despliegues empresariales, estas configuraciones suelen estar en rutas como:
/Library/Application Support/ClaudeCode/managed-settings.json
o su equivalente en Windows/Linux.
Configuraciones completas y funcionales
Claude Code + OpenRouter + DeepSeek V4 Pro
OpenRouter expone una API compatible con Anthropic. Para enrutar Claude Code a DeepSeek V4 Pro, usa ANTHROPIC_AUTH_TOKEN y no incluyas /v1 al final de la URL.
En ~/.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"
}
}
La anulación de modelos es importante porque Claude Code puede seguir enviando claude-sonnet-4-6 aunque cambies la URL base.
Sin estos valores, la solicitud puede llegar a OpenRouter con un modelo diferente al que esperas.
Nota: OpenRouter no implementa completamente la especificación de streaming de Anthropic para todas las llamadas a herramientas. El bucle principal funciona, pero cadenas complejas de herramientas pueden fallar en algunos casos. Revisa el estado de compatibilidad de OpenRouter.
Claude Code + LiteLLM
LiteLLM es una opción práctica si quieres mapear los nombres de modelos que Claude Code envía por defecto a otros proveedores.
config.yaml de 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"
~/.claude/settings.json
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-litellm-your-key"
}
}
Con este enfoque, Claude Code envía claude-sonnet-4-6, y LiteLLM lo enruta internamente a DeepSeek V4.
Claude Code + vLLM local
Para inferencia local con vLLM, inicia el servidor:
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--dtype auto \
--api-key local-key \
--port 8000
Luego configura Claude Code:
export ANTHROPIC_BASE_URL="http://localhost:8000"
export ANTHROPIC_API_KEY="local-key"
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-ai/DeepSeek-V3"
Cómo depurar el error paso a paso
Si las configuraciones anteriores no funcionan, ejecuta Claude Code con logs:
claude --debug 2>&1 | head -100
Busca estas líneas:
-
Sending request to:confirma la URL final -
Response status:muestra el código HTTP de la pasarela -
enterprise config error:muestra el error interno de validación
También puedes reproducir la solicitud manualmente:
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"}]
}'
Interpreta la respuesta:
-
200: la pasarela acepta la solicitud -
401: credencial incorrecta o encabezado incorrecto -
403: acceso bloqueado -
404: URL base incorrecta -
422: formato de body o modelo inválido
Probando APIs con Apidog
Cuando depuras proveedores de terceros, Apidog te permite inspeccionar solicitudes y respuestas sin reiniciar Claude Code en cada intento.
Un flujo práctico:
- Crea una colección para tu pasarela LLM.
- Añade una solicitud
POST /v1/messages. - Configura variables de colección para:
ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENanthropic-versionanthropic-beta
- Prueba la misma solicitud contra OpenRouter, LiteLLM o tu gateway interno.
- Compara encabezados, códigos HTTP y cuerpos de respuesta.
Ejemplo de body:
{
"model": "claude-sonnet-4-6",
"max_tokens": 10,
"messages": [
{
"role": "user",
"content": "hi"
}
]
}
Esto es útil para confirmar si tu pasarela está eliminando encabezados como anthropic-beta o X-Claude-Code-Session-Id.
Configuraciones de Claude Code relacionadas
Desactivar la dependencia del encabezado beta
Si tu pasarela no puede reenviar encabezados personalizados:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Esto reduce la validación de características beta. El bucle de agente sigue funcionando, pero puedes perder funciones experimentales.
Activar descubrimiento de modelos de pasarela
Desde Claude Code v2.1.129, puedes poblar el selector /model desde el endpoint /v1/models de la pasarela:
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
Claude Code consulta:
/v1/models
y añade modelos compatibles al selector.
Ten en cuenta que solo se añaden automáticamente modelos cuyos IDs comienzan con claude o anthropic. Para modelos como DeepSeek, fija el modelo manualmente:
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek/deepseek-v4-pro"
Añadir un modelo personalizado al selector
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 más barato que Claude Opus"
Esto añade una opción al selector /model, útil si alternas entre Claude y un modelo de pasarela.
Checklist rápido de solución
Antes de seguir depurando, revisa:
echo "$ANTHROPIC_BASE_URL"
Debe verse así:
https://openrouter.ai/api
No así:
https://openrouter.ai/api/v1
Luego valida credenciales:
env | grep ANTHROPIC
Para OpenRouter o LiteLLM deberías usar normalmente:
ANTHROPIC_AUTH_TOKEN=...
Para gateways compatibles con x-api-key:
ANTHROPIC_API_KEY=...
Valida JSON:
jq . ~/.claude/settings.json
Y prueba la URL:
curl -v "${ANTHROPIC_BASE_URL}/v1/messages"
Guías relacionadas
Si estás explorando Claude Code con backends personalizados, estas guías cubren temas cercanos:
- Cómo escribir archivos AGENTS.md para equipos de desarrollo de API
- Ruflo: Orquestación Multi-Agente para Claude Code
- Obtén API Claude gratuita e ilimitada a través de Puter.js
- Mejores LLM locales 2026
Preguntas frecuentes
¿Usar un proveedor de terceros con Claude Code viola los términos de Anthropic?
No necesariamente. Anthropic documenta el patrón ANTHROPIC_BASE_URL para enrutar a través de Bedrock, Vertex AI, Foundry y pasarelas personalizadas.
Lo que Anthropic bloqueó fueron herramientas que suplantaban la ID de cliente de Claude Code para acceder a la API de Anthropic usando precios de suscripción.
Usar tu propia pasarela o un proveedor como OpenRouter con tu propia clave API es un caso diferente.
¿Funciona el bucle de agente de Claude Code con DeepSeek V4 Pro?
El bucle principal funciona: edición de archivos, comandos de shell y tareas de varios pasos.
Las limitaciones principales a través de proveedores de terceros son:
- Herramientas de servidor MCP
- Entrada de imágenes o visión
Si dependes de esas capacidades, usa la API de Anthropic, Bedrock o Vertex.
¿Por qué dice “configuración empresarial” si no tengo plan empresarial?
Claude Code usa “enterprise config” como etiqueta interna para configuraciones de proveedor de terceros.
No significa que necesites un plan Enterprise.
¿Puedo cambiar entre Anthropic y un proveedor de terceros en la misma sesión?
No. Claude Code lee la URL base al iniciar.
Para cambiar proveedor:
- Cierra Claude Code.
- Cambia variables de entorno o
settings.json. - Inicia una nueva sesión.
Herramientas como DeepClaude encapsulan este cambio mediante flags como:
--backend ds
--backend anthropic
Mi pasarela está detrás de un firewall. ¿Claude Code soporta proxy?
Sí. Configura HTTPS_PROXY antes de iniciar:
export HTTPS_PROXY="http://your-proxy:8080"
export ANTHROPIC_BASE_URL="https://your-internal-gateway"
Si tu proxy corporativo intercepta TLS, añade el certificado CA:
export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"
Mi curl funciona, pero Claude Code falla. ¿Qué cambia?
Claude Code hace una validación previa adicional. Esa solicitud puede incluir encabezados que tu prueba manual no envía.
Ejecuta:
claude --debug
y compara:
- URL final
- Encabezados
- Modelo solicitado
- Body JSON
- Código HTTP
Diferencias comunes:
- Falta
anthropic-beta - Falta
X-Claude-Code-Session-Id - Modelo no soportado por la pasarela
- Autenticación en encabezado incorrecto
Conclusión
Invalid custom3p enterprise config es un error de validación de configuración.
La ruta de solución más rápida es:
- Elimina
/v1deANTHROPIC_BASE_URL - Usa la variable correcta:
ANTHROPIC_AUTH_TOKENoANTHROPIC_API_KEY - Valida
~/.claude/settings.json - Confirma que el onboarding está completo
- Asegúrate de que tu pasarela reenvía encabezados requeridos
- Revisa políticas gestionadas si estás en un entorno empresarial
Cuando la configuración valida correctamente, Claude Code puede ejecutar su bucle de agente a través de OpenRouter, LiteLLM, vLLM u otra pasarela compatible. Las principales limitaciones al usar proveedores de terceros son MCP y entrada de visión, que pueden requerir la API de Anthropic o proveedores soportados oficialmente.

Top comments (0)