DEV Community

Cover image for Cómo Solucionar Error 'Invalid custom3p enterprise config' en Código Claude
Roobia
Roobia

Posted on • Originally published at apidog.com

Cómo Solucionar Error 'Invalid custom3p enterprise config' en Código Claude

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.

Prueba Apidog hoy

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

Las causas más comunes son:

  1. ANTHROPIC_BASE_URL termina en /v1
  2. Estás usando la variable de credencial incorrecta
  3. ~/.claude/settings.json tiene JSON inválido
  4. La instalación nueva no completó el onboarding
  5. La pasarela no reenvía encabezados requeridos
  6. 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
Enter fullscreen mode Exit fullscreen mode

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

a la URL configurada en ANTHROPIC_BASE_URL.

Si tu URL ya termina en /v1, Claude Code termina llamando a:

/v1/v1/messages
Enter fullscreen mode Exit fullscreen mode

y la pasarela suele responder 404.

Incorrecto

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

Correcto

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

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

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

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

Pasarela DeepSeek o vLLM con API key

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

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

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

Error: comillas inteligentes

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

Configuración válida

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

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

O con jq:

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

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

y busca:

"hasCompletedOnboarding": true
Enter fullscreen mode Exit fullscreen mode

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

Solución

Edita ~/.claude.json y añade:

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

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

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

Si no puedes reenviar anthropic-beta

Configura:

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Enter fullscreen mode Exit fullscreen mode

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

También puedes revisar desde Claude Code:

/status
Enter fullscreen mode Exit fullscreen mode

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

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

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

~/.claude/settings.json

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

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

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

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

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

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:

  1. Crea una colección para tu pasarela LLM.
  2. Añade una solicitud POST /v1/messages.
  3. Configura variables de colección para:
    • ANTHROPIC_BASE_URL
    • ANTHROPIC_AUTH_TOKEN
    • anthropic-version
    • anthropic-beta
  4. Prueba la misma solicitud contra OpenRouter, LiteLLM o tu gateway interno.
  5. 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"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Apidog API testing

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

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

Claude Code consulta:

/v1/models
Enter fullscreen mode Exit fullscreen mode

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

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

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

Debe verse así:

https://openrouter.ai/api
Enter fullscreen mode Exit fullscreen mode

No así:

https://openrouter.ai/api/v1
Enter fullscreen mode Exit fullscreen mode

Luego valida credenciales:

env | grep ANTHROPIC
Enter fullscreen mode Exit fullscreen mode

Para OpenRouter o LiteLLM deberías usar normalmente:

ANTHROPIC_AUTH_TOKEN=...
Enter fullscreen mode Exit fullscreen mode

Para gateways compatibles con x-api-key:

ANTHROPIC_API_KEY=...
Enter fullscreen mode Exit fullscreen mode

Valida JSON:

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

Y prueba la URL:

curl -v "${ANTHROPIC_BASE_URL}/v1/messages"
Enter fullscreen mode Exit fullscreen mode

Guías relacionadas

Si estás explorando Claude Code con backends personalizados, estas guías cubren temas cercanos:

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:

  1. Cierra Claude Code.
  2. Cambia variables de entorno o settings.json.
  3. Inicia una nueva sesión.

Herramientas como DeepClaude encapsulan este cambio mediante flags como:

--backend ds
--backend anthropic
Enter fullscreen mode Exit fullscreen mode

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

Si tu proxy corporativo intercepta TLS, añade el certificado CA:

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

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

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:

  1. Elimina /v1 de ANTHROPIC_BASE_URL
  2. Usa la variable correcta: ANTHROPIC_AUTH_TOKEN o ANTHROPIC_API_KEY
  3. Valida ~/.claude/settings.json
  4. Confirma que el onboarding está completo
  5. Asegúrate de que tu pasarela reenvía encabezados requeridos
  6. 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)