Conecta Codex a modelos de terceros mediante Responses
El Codex actual solo admite el protocolo Responses. Configura el proveedor y la clave, comprueba la ruta API y descubre qué hacer si una pasarela solo ofrece Chat Completions.
La respuesta corta
El Codex actual solo admite "responses" en wire_api. "chat" se eliminó y provoca un error de configuración al arrancar. KimiSeek ofrece /v1/responses, por lo que puedes conectarte directamente con la configuración siguiente.
Tabla de decisión en 30 segundos
| Capacidad de la pasarela | Qué hacer |
|---|---|
Ofrece /v1/responses | Usar "responses" |
Solo /v1/chat/completions | Usar una pasarela compatible o una capa de conversión que exponga Responses |
| Desconocida | Comprobar la ruta y el cuerpo de la respuesta con el comando siguiente |
Por qué Codex usa responses por defecto
Codex envía solicitudes a /responses y procesa sus eventos de streaming y llamadas a herramientas. Chat Completions utiliza estructuras distintas; cambiar wire_api no permite al Codex actual usarlo. Las capacidades también dependen del modelo y de la pasarela. Una respuesta válida no verifica por sí sola todas las funciones de las herramientas.
Requisitos previos
- Node.js 20 o superior
- Codex CLI:
npm install -g @openai/codex - Una API key de KimiSeek (empieza por
ks-), creada en el panel
Step 1 · Escribe el archivo de configuración
El archivo está en ~/.codex/config.toml; si no existe, créalo:
model = "deepseek-v4-pro-0813"
model_provider = "kimiseek"
[model_providers.kimiseek]
name = "KimiSeek"
base_url = "https://api.kimiseek.app/v1"
env_key = "KIMISEEK_API_KEY"
wire_api = "responses"Tres puntos con los que la gente tropieza:
base_urldebe incluir/v1. Codex añade/responsesdirectamente abase_url. Si te falta el/v1, la petición va ahttps://api.kimiseek.app/responsesy te llevas un 404.env_keyes un nombre de variable, no la key en sí. Aquí escribesKIMISEEK_API_KEY; el valor real vive en tus variables de entorno.modeltiene que ser un id que exista de verdad en el catálogo. Una errata devuelvemodel not found, y un modelo retirado también.
Step 2 · Define la variable de entorno y arranca
export KIMISEEK_API_KEY="ks-your-key"
codexPara cambiar de modelo de forma temporal, edita model en config.toml o pasa codex --model <id>.
Step 3 · Confirma que la key funciona
curl https://api.kimiseek.app/v1/models \
-H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}"Si te devuelve una lista de modelos, tanto la key como la red están bien. El sentido de este paso es separar los fallos de autenticación de los fallos de protocolo: si no, ante un 404 te quedas adivinando cuál de los dos era.
Step 4 · Sondea responses en 30 segundos
curl https://api.kimiseek.app/v1/responses \
-H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro-0813",
"input": "Explain what a base URL is in one sentence.",
"max_output_tokens": 256,
"stream": false
}'- HTTP 200 con un array JSON
output→ la ruta Responses funciona; después prueba una tarea real y llamadas a herramientas. - HTTP 404 → comprueba
/v1enbase_urly si el cuerpo indica una ruta inexistente o un modelo no encontrado. El estado por sí solo no basta. - HTTP 401 → vuelve al Step 3 y revisa las credenciales.
Si la pasarela solo ofrece Chat Completions
Mantén wire_api = "responses". Elige una pasarela con /v1/responses o añade una capa de conversión compatible. No cambies al valor eliminado "chat".
Errores habituales
| Error | Causa | Solución |
|---|---|---|
unexpected status 401 Unauthorized: Missing bearer | La variable que indica env_key no está definida o está mal escrita | Comprueba que KIMISEEK_API_KEY sea visible en el shell actual |
unexpected status 404 Not Found | A base_url le falta /v1, o la pasarela no tiene /v1/responses | Añadir /v1 y leer el cuerpo del error; si falta Responses, usar una pasarela o capa de conversión compatible |
stream disconnected before completion | El stream se cortó: proxy local, pasarela corporativa o timeout | Revisa la configuración del proxy HTTP y reintenta en otra red |
model not found | model tiene un nombre que no es un alias, o el id está retirado | Usa el id completo del catálogo, por ejemplo deepseek-v4-pro-0813 |
Hay más errores de nivel de protocolo en la tabla de errores.
Coste
El uso de Codex es intensivo en entrada: cada turno reenvía el contexto. DeepSeek V4 Pro se factura en CNY por millón de tokens, en dos franjas:
| Franja | Entrada | Entrada en caché | Salida |
|---|---|---|---|
| Off-peak | ¥4.5 | ¥0.45 | ¥13.5 |
| Peak | ¥9 | ¥0.9 | ¥27 |
La franja peak cuesta exactamente el doble. Si agrupas los refactorizados grandes en horas off-peak, la factura se reduce a la mitad. Los precios en vivo de cada modelo están en la página de precios, que lee directamente la configuración del catálogo de modelos.
Versiones y verificación
Configuración comprobada con Codex CLI 0.154.0 el 2026-10-26. Consulta la referencia oficial de configuración para los protocolos admitidos.
Preguntas frecuentes
Con una pasarela así, ¿sigo necesitando un puente como Codex-Bridge?
No. Un puente existe para traducir peticiones Responses a Chat Completions en local, pensado para pasarelas que solo hablan chat completions. KimiSeek implementa /v1/responses por sí mismo, así que un puente solo añade un salto más y otro sitio donde fallar.
¿Por qué base_url tiene que incluir /v1?
Porque Codex concatena: base_url + "/responses". Si escribes https://api.kimiseek.app, la petición va a https://api.kimiseek.app/responses, que es una página web y no una API.
¿El Codex actual todavía admite wire_api = "chat"?
No. Las versiones actuales rechazan ese valor al arrancar. Usa responses; un upstream que solo ofrece Chat Completions necesita una pasarela compatible o una capa de conversión.
¿Puede una misma key servir para Claude Code y para Codex?
Sí. Las keys son a nivel de cuenta; los clientes simplemente llaman a la misma key por rutas de protocolo distintas. Mira la guía de Claude Code.