Inicio → Ayuda

Claude Code y Codex necesitan base URL distintas en la misma pasarela

Los clientes estilo Anthropic (Claude Code, el SDK de Anthropic) añaden /v1/messages por sí mismos, así que su base URL debe acabar en el host. Los clientes estilo OpenAI (Codex, el SDK de OpenAI, Cursor, Cline) no añaden nada, así que la suya debe terminar en /v1.

Lo que ves

Por qué ocurre

Dos linajes de SDK, dos convenciones, un único nombre de host de pasarela. Ningún cliente está equivocado; simplemente no se ponen de acuerdo sobre quién es dueño del segmento /v1. Si los inviertes obtienes /v1/v1/… o una ruta sin versión.

El 404 resultante es especialmente difícil de depurar porque a menudo nunca llega a la API. Una pasarela que sirve su web en el mismo dominio responde a las rutas desconocidas con la página comercial: HTTP 200, Content-Type: text/html. El cliente intenta entonces interpretar HTML como JSON y muestra un error de sintaxis que no apunta ni de lejos a la causa real.

También significa que el fallo no deja rastro en el lado del proveedor. El soporte dirá que no ve peticiones de tu clave, y dirá la verdad: la petición la respondió un servidor web antes de convertirse en una llamada a la API.

Comprueba si es esta la causa

Pregunta por el tipo de contenido en lugar de leer el cuerpo: un comando lo resuelve:

curl -s -o /dev/null -w '%{http_code} %{content_type}\n' \
  -X POST 'YOUR_BASE_URL/chat/completions' \
  -H 'Authorization: Bearer YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"model":"YOUR_MODEL","messages":[{"role":"user","content":"hi"}]}'

application/json significa que la URL es correcta: incluso una clave errónea responde en JSON. text/html significa que estás hablando con una web y que el problema es la base URL.

Cómo solucionarlo

  1. Decide por linaje de SDK, no por nombre de productoTodo lo construido sobre el SDK de Anthropic quiere el host solo; todo lo compatible con OpenAI quiere /v1. Las herramientas nuevas encajan en uno de los dos sin necesitar instrucciones propias.
  2. Quita la barra finalAlgunos clientes unen rutas de forma ingenua, y una base URL que termina en / puede producir una doble barra que acaba en la web en lugar de en la API.
  3. Comprueba el tipo de contenido antes que la claveUna respuesta en HTML significa que la petición nunca llegó a la API. Rotar claves en ese momento no cambia nada y cuesta una tarde.
  4. Usa primero los ejemplos del proveedor tal cualConsigue que funcione una configuración conocida y luego cambia una cosa cada vez. La mayoría de los fallos de configuración son dos errores a la vez.
ClienteLa base URL debe
Claude Codeser solo el host, sin /v1
Anthropic SDKser solo el host: el SDK añade /v1/messages
Codexterminar en /v1
OpenAI SDK (Python, Node, Go)terminar en /v1
Cursor, Cline, Roo Codeterminar en /v1
Cherry Studio, Chatbox, LobeChatterminar en /v1
En APICLAN: https://apiclan.us para Claude Code y el SDK de Anthropic, https://apiclan.us/v1 para Codex y todo lo compatible con OpenAI. Las configuraciones listas para copiar de cada cliente están en el inicio rápido.

Relacionado

Unexpected token '<' al llamar a una API compatible con OpenAI401 invalid API key: cuando la clave parece correcta pero sigue fallando

Revisado por última vez el 2026-10-01. Escrito a partir de problemas diagnosticados en una pasarela compatible con OpenAI en producción, no recopilado de otras webs.