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

Ashley Innocent

Ashley Innocent

11 May 2026

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

Apidog para empresas

Despliegue local

SSO & RBAC

Conforme con SOC 2

Explorar Apidog Enterprise

Si has intentado dirigir Claude Code a DeepSeek V4, OpenRouter o cualquier otro proveedor de modelos de terceros, probablemente te hayas encontrado con esto: Invalid custom3p enterprise config. El error es críptico, la documentación no lo explica claramente y te impide hacer algo que Claude Code soporta oficialmente.

Esta guía desglosa exactamente qué significa “custom3p”, las seis razones más comunes por las que la configuración falla y soluciones paso a paso para cada una. Si estás intentando ejecutar el bucle de agente de Claude Code a través de DeepSeek o una pasarela LLM como LiteLLM, aquí encontrarás ejemplos de configuración que funcionan.

botón

En resumen

Invalid custom3p enterprise config significa que Claude Code no puede validar la configuración de tu proveedor de terceros. “custom3p” es la etiqueta interna de Claude Code para cualquier endpoint de API no-Anthropic configurado a través de ANTHROPIC_BASE_URL. Las causas más comunes son: /v1 al final de la URL base, variable de credencial incorrecta, settings.json malformado y onboarding incompleto en una instalación nueva. Primero, corrige el formato de la URL, eso resuelve aproximadamente el 60% de los casos.

Qué significa realmente “custom3p”

Claude Code enruta las solicitudes a través de uno de cuatro modos:

Modo Cómo se activa
API de Anthropic (predeterminado) Sin anulación establecida
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 cualquier otra cosa

La última fila es “custom3p”, tercero personalizado. Cuando ANTHROPIC_BASE_URL se establece a un host no-Anthropic (LiteLLM, OpenRouter, un servidor vLLM local, una pasarela corporativa), Claude Code etiqueta internamente esa ruta como “custom3p” y ejecuta una comprobación de validación antes de la primera llamada a la API.

Si esa comprobación falla, obtienes: Invalid custom3p enterprise config.

El error es anterior a las restricciones de Anthropic de 2026 sobre los sistemas de terceros. Es un error de validación de configuración, no un bloqueo de política, lo que significa que puedes solucionarlo.

Por qué los desarrolladores están encontrando este error ahora

En abril de 2026, Anthropic bloqueó el acceso a las suscripciones Claude Pro y Max para herramientas de agentes de terceros que estaban suplantando la ID de cliente de Claude Code. Herramientas como OpenClaw, que enrutaban las sesiones de Claude Code a través de sus propios backends, dejaron de funcionar de la noche a la mañana.

Ese es un problema diferente a lo que cubre este artículo.

Lo que sucedió a continuación es la razón por la que estás leyendo esto: los desarrolladores comenzaron a usar el soporte oficial de proveedores de terceros de Claude Code para enrutar a través de backends más económicos. Un hilo de Reddit documentó el cambio del bucle de agente de Claude Code a DeepSeek V4 Pro a través de OpenRouter, a $0.87 por millón de tokens de salida frente a los $15 de Anthropic, lo que representa una reducción de costos de aproximadamente 17x. Proyectos como DeepClaude empaquetaron esto en una configuración de un solo comando.

El problema: el soporte oficial de proveedores de terceros de Anthropic requiere una configuración empresarial correcta. Si te equivocas en un campo, te encuentras con Invalid custom3p enterprise config. La mayoría de las guías en línea o bien omiten la configuración empresarial o muestran un formato de URL incorrecto.

Causa raíz 1: /v1 al final en ANTHROPIC_BASE_URL

Este es el error más común. Claude Code añade automáticamente /v1/messages a cualquier URL que establezcas. Si tu URL base ya incluye /v1, la ruta final se convierte en /v1/v1/messages, lo que devuelve un error 404.

Incorrecto:

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api/v1"

Incorrecto:

export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com/v1"

Correcto:

export ANTHROPIC_BASE_URL="https://api.openrouter.ai/api"

Correcto:

export ANTHROPIC_BASE_URL="https://litellm.yourcompany.com"

Para verificar la URL final a la que Claude Code está accediendo, ejecuta este curl:

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"}]}'

Un 200 o 400 (solicitud incorrecta, pero el endpoint existe) significa que la URL es correcta. Un 404 significa que todavía tienes el problema de /v1.

Causa raíz 2: Variable de credencial incorrecta

Claude Code utiliza dos variables de entorno diferentes para la autenticación según el contexto, y mezclarlas hace que la configuración empresarial falle la validación silenciosamente.

Variable Enviado como Cuándo usar
ANTHROPIC_API_KEY Encabezado x-api-key Pasarelas con formato Anthropic que esperan autenticación por clave API
ANTHROPIC_AUTH_TOKEN Encabezado Authorization: Bearer Pasarelas estilo OAuth, LiteLLM, la mayoría de las configuraciones de OpenRouter

OpenRouter, por ejemplo, espera un token de portador:

export ANTHROPIC_AUTH_TOKEN="sk-or-your-openrouter-key"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"

Usar ANTHROPIC_API_KEY con OpenRouter envía un encabezado x-api-key que OpenRouter ignora — la solicitud falla la autenticación, y Claude Code lo reporta como una configuración empresarial inválida.

Para LiteLLM:

export ANTHROPIC_AUTH_TOKEN="sk-litellm-your-virtual-key"
export ANTHROPIC_BASE_URL="https://your-litellm-server:4000"

Para una pasarela DeepSeek o un servidor vLLM local que se ejecuta con una clave API:

export ANTHROPIC_API_KEY="your-key-here"
export ANTHROPIC_BASE_URL="https://your-vllm-server"

Consulta la documentación de autenticación de tu pasarela para confirmar qué encabezado espera.

Causa raíz 3: settings.json malformado

Si estás configurando la URL base y las credenciales en ~/.claude/settings.json en lugar de variables de entorno, los errores de formato JSON hacen que la configuración empresarial falle antes de que se realice cualquier solicitud.

Los errores más comunes:

Coma al final (JSON inválido):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
    "ANTHROPIC_AUTH_TOKEN": "sk-or-your-key",  ← coma al final
  }
}

Comillas rizadas/inteligentes (copiar-pegar de documentos o Word):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api"  ← comillas incorrectas
  }
}

Formato correcto:

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

Valida tu archivo de configuración antes de iniciar Claude Code:

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

O usa jq:

jq . ~/.claude/settings.json

Un error de análisis aquí significa que la validación de la configuración empresarial nunca se completa — Claude Code no puede leer la configuración, por lo que la marca como inválida.

Causa raíz 4: La instalación nueva no ha completado el onboarding

Claude Code verifica ~/.claude.json en busca de hasCompletedOnboarding: true antes de leer la configuración empresarial de settings.json. En una instalación nueva, este indicador no está configurado, por lo que Claude Code omite tu configuración personalizada de terceros e intenta autenticarse a través de su flujo estándar, lo que falla si no tienes una suscripción a Anthropic configurada.

Verifica tu estado actual:

cat ~/.claude.json | python3 -m json.tool 2>/dev/null | grep hasCompletedOnboarding

Si esa clave falta o es falsa, Claude Code está en modo de onboarding y tu configuración empresarial de settings.json no será leída.

Solución: Añade el indicador de onboarding a ~/.claude.json:

{
  "hasCompletedOnboarding": true,
  "primaryApiKey": "sk-placeholder"
}

El valor de primaryApiKey es un marcador de posición — es sobrescrito por tu configuración empresarial. Establécelo a cualquier cosa que comience con sk- para pasar la verificación de formato. Después de guardar, reinicia Claude Code.

Causa raíz 5: La pasarela no reenvía los encabezados requeridos

La validación de la configuración empresarial de Claude Code incluye un handshake de características — envía un encabezado anthropic-beta a la pasarela para negociar qué capacidades están disponibles. Si tu pasarela elimina este encabezado, Claude Code recibe una respuesta que no coincide con lo que espera, y reporta Invalid custom3p enterprise config.

Encabezados requeridos que tu pasarela debe reenviar:

anthropic-beta
anthropic-version
X-Claude-Code-Session-Id

Para LiteLLM, esto funciona por defecto desde la v1.82.9+. Para proxies personalizados o configuraciones de nginx, añade el reenvío de encabezados explícitamente:

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 modificar la pasarela para reenviar el encabezado beta, configura esto antes de iniciar:

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1

Esto le indica a Claude Code que omita las características que requieren el encabezado beta para que las solicitudes tengan éxito a través de pasarelas que no pueden reenviarlo. Pierdes acceso a algunas características experimentales, pero el bucle de agente principal funciona.

Causa raíz 6: Conflicto de política empresarial

Si estás en un plan Claude de Equipo o Empresarial y tu administrador ha implementado configuraciones gestionadas, esas configuraciones tienen prioridad sobre todo lo demás — incluyendo tu ~/.claude/settings.json y las variables de entorno. Una política gestionada que restringe availableModels o bloquea URLs base personalizadas causa Invalid custom3p enterprise config incluso cuando tu configuración local es correcta.

Verifica si las configuraciones gestionadas están activas:

ls ~/.claude/managed-settings.json 2>/dev/null && echo "Managed settings found"

O desde dentro de Claude Code:

/status

Si “Managed settings” aparece como activo, necesitas hablar con tu administrador. Ellos pueden:

Para implementaciones empresariales que controlas, las configuraciones gestionadas se encuentran en /Library/Application Support/ClaudeCode/managed-settings.json (macOS) o la ruta equivalente en Windows/Linux.

Configuraciones completas y funcionales

Claude Code + OpenRouter (DeepSeek V4 Pro)

OpenRouter expone una API compatible con Anthropic. Esta configuración ejecuta el bucle completo de agente de Claude Code a través de DeepSeek V4 Pro:

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 del nombre del modelo es necesaria porque Claude Code predetermina claude-sonnet-4-6 incluso cuando has cambiado la URL base. Sin fijar el modelo, la solicitud llega a OpenRouter pidiendo claude-sonnet-4-6, lo que puede tener éxito (OpenRouter también soporta a Claude) o puede enrutarse incorrectamente según tu plan.

Nota: OpenRouter no implementa completamente la especificación de streaming de Anthropic para llamadas a herramientas — los argumentos de las llamadas a funciones pueden llegar vacíos en algunos casos extremos. El bucle de agente principal funciona, pero las cadenas complejas de múltiples herramientas pueden romperse. Sigue el estado de compatibilidad de OpenRouter para obtener actualizaciones.

Claude Code + LiteLLM (cualquier proveedor)

LiteLLM es la pasarela más compatible para Claude Code — maneja el reenvío de encabezados correctamente y soporta el enrutamiento de modelos a través de modelos de OpenAI, Anthropic, Vertex, Bedrock y Hugging Face.

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 de Claude Code:

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

Con esta configuración, Claude Code envía claude-sonnet-4-6 en el campo del modelo. LiteLLM intercepta eso y lo enruta a DeepSeek V4, por lo que no necesitas anular los nombres de los modelos en la configuración de Claude Code.

Claude Code + vLLM local

Para la inferencia de modelos local con vLLM, inicia el servidor en modo compatible con Anthropic:

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"

Depurando el error

Si ninguna de las soluciones anteriores funciona, ejecuta Claude Code con registro de depuración:

claude --debug 2>&1 | head -100

La salida de depuración muestra la URL exacta que se llama, los encabezados enviados y la respuesta recibida. Busca:

Para la depuración del lado de la pasarela, prueba la solicitud exacta que envía Claude Code:

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"}]
  }'

Una pasarela válida devuelve un 200 con la estructura del mensaje. Si obtienes 401, 403 o 422, eso es un problema de autenticación o formato en el lado de la pasarela, no un problema de configuración de Claude Code.

Probando APIs con Apidog

Cuando depuras integraciones de proveedores de terceros, Apidog facilita la inspección de las solicitudes y respuestas exactas que pasan por tu pasarela LLM. Puedes crear una colección para el endpoint /v1/messages de tu pasarela, guardar plantillas de solicitud funcionales y comparar respuestas entre proveedores sin tener que volver a ejecutar Claude Code cada vez.

botón

Descarga Apidog y crea una nueva colección apuntando a la URL de tu pasarela. Añade los encabezados anthropic-version, anthropic-beta y Authorization como variables a nivel de colección — de esa manera, podrás probar diferentes configuraciones de pasarela cambiando una variable en lugar de editar cada solicitud.

Esto es especialmente útil al depurar problemas de reenvío de encabezados que activan Invalid custom3p enterprise config. Puedes confirmar qué encabezados pasa tu pasarela antes de perder tiempo buscando errores en la configuración de Claude Code.

Configuraciones de Claude Code relacionadas que vale la pena conocer

Desactivar la dependencia del encabezado beta

Algunas pasarelas empresariales no pueden reenviar encabezados personalizados. Si esa es tu situación:

export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1

Esto elimina el handshake de características beta de la validación de la configuración empresarial. El bucle de agente sigue funcionando; pierdes acceso a características protegidas por el encabezado beta (algunas variantes de pensamiento extendido, ciertos formatos de llamada a herramientas).

Selector de modelos con descubrimiento de pasarela

A partir de Claude Code v2.1.129, puedes poblar el selector /model automáticamente desde la lista de modelos de tu pasarela:

export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1

Claude Code consulta el endpoint /v1/models de tu pasarela al inicio y añade los modelos descubiertos al selector. Solo se añaden modelos con IDs que comienzan con claude o anthropic — para otros modelos como DeepSeek, fíjalos manualmente con ANTHROPIC_DEFAULT_SONNET_MODEL.

Entrada personalizada del selector de modelos

Añade un único modelo personalizado al selector sin afectar otras configuraciones:

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 aparece en la parte inferior del selector /model, facilitando el cambio entre tu modelo de pasarela y el modelo Claude predeterminado a mitad de sesión.

Guías relacionadas

Si estás explorando las capacidades de agente de Claude Code con backends de modelos personalizados, estas publicaciones cubren temas adyacentes:

Preguntas frecuentes

¿Es el uso de un proveedor de terceros con Claude Code contrario a los términos de Anthropic?

No. Anthropic documenta y soporta oficialmente el patrón ANTHROPIC_BASE_URL para enrutar a través de Bedrock, Vertex AI, Foundry y pasarelas personalizadas. Lo que Anthropic bloqueó en abril de 2026 fueron herramientas de terceros que suplantaban la ID de cliente de Claude Code para acceder a la propia API de Anthropic con precios de suscripción. Usar tu propia pasarela o un proveedor como OpenRouter con tu propia clave API es algo completamente diferente.

¿Funciona el bucle de agente de Claude Code con DeepSeek V4 Pro?

El bucle central funciona — edición de archivos, comandos de shell, tareas de varios pasos. Dos cosas no funcionan a través de proveedores de terceros: las herramientas de servidor MCP y la entrada de imágenes/visión. Si tu flujo de trabajo necesita esas, debes permanecer en la API de Anthropic o Bedrock/Vertex.

¿Por qué el error dice “configuración empresarial” si no tengo un plan empresarial?

Claude Code utiliza la etiqueta “configuración empresarial” para cualquier configuración de proveedor de terceros, independientemente de tu nivel de suscripción. Es una etiqueta a nivel de código, no una restricción de plan. Los desarrolladores individuales en el nivel gratuito o Pro pueden configurar y usar proveedores de terceros personalizados.

¿Puedo cambiar entre Anthropic y un proveedor de terceros a mitad de sesión?

No dentro de una sola sesión. La URL base se lee al iniciar. Para cambiar de proveedor, sal de Claude Code, cambia tus variables de entorno o configuraciones, e inicia una nueva sesión. La herramienta DeepClaude encapsula esto en un flag de CLI (--backend ds, --backend anthropic) que maneja el cambio de entorno por ti.

Mi pasarela está detrás de un firewall corporativo. ¿Claude Code soporta la configuración de proxy?

Sí. Configura HTTPS_PROXY antes de iniciar:

export HTTPS_PROXY="http://your-proxy:8080"
export ANTHROPIC_BASE_URL="https://your-internal-gateway"

Para la intercepción TLS por un proxy corporativo, añade tu certificado CA:

export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca-bundle.pem"

El error aparece aunque mi prueba con curl funciona. ¿Qué es diferente?

Claude Code realiza una solicitud de validación previa adicional que curl no replica. Ejecuta Claude Code con --debug para ver la solicitud previa exacta y compararla con tu prueba de curl. Diferencias comunes: el encabezado anthropic-beta, el encabezado X-Claude-Code-Session-Id y el formato exacto del cuerpo JSON para la solicitud de validación.

Conclusión

Invalid custom3p enterprise config es un error de validación de configuración, no un bloqueo de política. Primero, corrige el formato de ANTHROPIC_BASE_URL (elimina el /v1), luego verifica tu variable de credencial (ANTHROPIC_AUTH_TOKEN vs. ANTHROPIC_API_KEY), valida tu settings.json en busca de errores JSON y asegúrate de que el onboarding se haya completado en instalaciones nuevas.

Una vez que la configuración se valida, el bucle de agente completo de Claude Code se ejecuta a través de tu backend elegido. DeepSeek V4 Pro a través de OpenRouter o LiteLLM cubre la mayoría de los casos de uso de Claude Code a una fracción de los costos de la API de Anthropic — las principales limitaciones son las herramientas MCP y la entrada de visión, que requieren la API de Anthropic.

botón

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs