Revisado el 2026-11-12

Codex CLI con saldo prepago, mediante un bloque de provider

Codex CLI se conecta añadiendo un bloque de model provider en ~/.codex/config.toml: base_url lleva https://api.relayswitch.io/v1 y la key se guarda en una variable de entorno. La forma de usar Codex no cambia, y cada turno se descuenta por token del saldo prepago a través de la ruta Responses.

01Qué es Codex y qué se cambia aquí

Codex CLI es el agente de programación de línea de comandos de OpenAI. Su configuración tiene un ajuste model_provider cuyo valor por defecto es openai, de modo que las peticiones van a la interfaz de la propia OpenAI. Ese ajuste se puede cambiar: define tu provider en config.toml con la dirección del endpoint y el nombre de la variable de entorno donde está la key, y apunta model_provider a él. Los comandos y el uso de Codex siguen igual; solo cambia quién cobra.

Codex habla un único protocolo, la Responses API de OpenAI: su referencia de configuración dice que wire_api solo admite el valor responses. Por eso lo primero que hay que confirmar en un gateway es que ofrezca /v1/responses y no solo /v1/chat/completions. Aquí existen las dos rutas, y Codex usa la primera.

02config.toml: un bloque de provider

El bloque de abajo tiene cuatro líneas y la API key no se escribe en el archivo. Qué significa cada ajuste:

  • model_provider elige el bloque por el nombre de su tabla. Ese nombre lo decides tú, pero openai, ollama, lmstudio, amazon-bedrock, amazon-bedrock-runtime y gcp son id integrados de Codex que no se pueden sobrescribir.
  • base_url lleva https://api.relayswitch.io/v1, con /v1; Codex añade /responses detrás.
  • env_key es el nombre de la variable de entorno donde está la key, no la key en sí. Como la key se queda en la variable de entorno, el archivo de configuración se puede subir a un commit o sincronizar sin riesgo.
  • wire_api solo tiene un valor válido, responses, que además es el valor por defecto, así que esta línea se puede borrar.
  • requires_openai_auth vale false por defecto y no hace falta escribirlo: un provider propio usa la key de env_key, no el inicio de sesión de una cuenta de OpenAI.
toml
1# ~/.codex/config.toml
2model = "gpt-6.1-sol"
3model_provider = "relayswitch"
4
5[model_providers.relayswitch]
6name = "RelaySwitch"
7base_url = "https://api.relayswitch.io/v1"
8env_key = "RELAYSWITCH_API_KEY"
9wire_api = "responses"

03Guarda la key en una variable de entorno y ejecuta codex

Escribe ese bloque en ~/.codex/config.toml. El directorio lo fija la variable de entorno CODEX_HOME y por defecto es ~/.codex; el provider debe ir en este archivo de nivel de usuario. Después exporta la key en la terminal donde vas a ejecutar Codex y arranca. Añade la línea export al archivo de configuración de tu shell para que las terminales nuevas también la lleven.

bash
1export RELAYSWITCH_API_KEY="sk-relay-..."
2codex

04Probar la ruta Responses con curl

Antes de ejecutar Codex, envía una petición Responses pequeña para confirmar que la key y la dirección son correctas. La opción -i muestra la línea de estado y los headers de la respuesta, entre ellos el id de la petición.

Si la respuesta es 200, ejecuta codex y envía la primera instrucción. Esa petición aparece en la página Usage de la consola en cuestión de segundos, con sus tokens y su costo. Para cambiar de modelo de forma puntual, usa codex --model seguido del id.

bash
1curl -i https://api.relayswitch.io/v1/responses \
2 -H "Authorization: Bearer sk-relay-..." \
3 -H "content-type: application/json" \
4 -d '{"model": "gpt-6.1-sol", "input": "Reply with ok"}'

05Precios de los modelos GPT y costo de una tarea

Esta tabla recoge los modelos GPT del catálogo en USD por millón de tokens, con los precios de input, cached input y output por separado. Codex está diseñado para los modelos GPT y la ruta Responses, así que comprueba que el id que escribes en config.toml responde a la prueba con curl de arriba.

Codex reenvía la conversación y el output de las herramientas en cada turno. Esos tokens se cobran al precio de cached input cuando aciertan en la caché, y la respuesta informa de cuántos tokens quedaron en caché; que acierten o no depende del modelo y de la propia petición. Así, ahorrar se vuelve concreto: usa un modelo más barato para los cambios del día a día y pasa a uno más caro solo para revisiones y refactors difíciles, abre una sesión nueva al terminar una tarea para que el contexto no siga creciendo, y crea una key solo para Codex con un presupuesto en dólares y un límite de gasto diario. Al alcanzar el límite, el gateway responde 402 y solo se detiene esa key; el resto del saldo de la cuenta queda intacto.

ModeloDesarrolladorInputOutputContexto
GPT-6.1 Solgpt-6.1-solOpenAI$0.582$2.911,050,000
GPT-6 Lunagpt-6-lunaOpenAI$0.0625$0.201,050,000
GPT-6 Solgpt-6-solOpenAI$0.60$3.001,050,000
GPT-6 Astragpt-6-astraOpenAI$3.00$15.001,050,000
GPT-5.6 Lunagpt-5.6-lunaOpenAI$0.12$0.721,050,000
GPT-5.6 Solgpt-5.6-solOpenAI$1.20$3.001,050,000
GPT-5.6 Terragpt-5.6-terraOpenAI$1.20$3.601,050,000
GPT-5.5gpt-5.5OpenAI$1.80$9.001,050,000
GPT-5.4 Minigpt-5.4-miniOpenAI$0.75$4.50400,000
GPT-5.4gpt-5.4OpenAI$1.50$9.001,050,000
GPT-5.3-Codexgpt-5.3-codexOpenAI$1.75$14.00400,000
GPT-4o minigpt-4o-miniOpenAI$0.15$0.60128,000
GPT-4ogpt-4oOpenAI$2.50$10.00128,000
GPT-4.1 Nanogpt-4.1-nanoOpenAI$0.10$0.401,048,576
GPT 5.4 Nanogpt-5.4-nanoOpenAI$0.40$2.50400,000
GPT 5.6gpt-5.6OpenAI$0.9412$4.70591,050,000
GPT 6.1 Terragpt-6.1-terraOpenAI$0.2941$1.47061,000,000
gpt-oss-120bgpt-oss-120bOpenAI$0.20$1.80
gpt-oss-20bgpt-oss-20bOpenAI$0.16$0.72

USD por millón de tokens

06Un profile por modelo y el menú /model

Un profile es un archivo llamado ~/.codex/<name>.config.toml que solo contiene las líneas que difieren de config.toml, y se superpone a él cuando Codex se ejecuta con codex --profile <name>. Desde Codex 0.134.0, las tablas [profiles.<name>] dentro de config.toml ya no se leen y el selector profile = del nivel superior se eliminó; los tutoriales escritos antes siguen usando la forma antigua y no funcionan si se copian. El valor de model_reasoning_effort sigue los niveles que admite el modelo elegido; Codex lo envía en cada petición y el gateway lo pasa al modelo tal cual.

Con un provider propio, el menú /model de Codex sigue mostrando sus modelos integrados de OpenAI, no los de tu provider. Elegir uno reescribe el archivo del profile activo: cambia el modelo, no el provider. Si el id escrito existe en el catálogo, Codex funciona al precio de ese modelo; si no, la respuesta es 404. Para cambiar de modelo, usa --profile o --model.

07Errores frecuentes

Los estados 401 a 404 se devuelven antes de que la petición llegue al modelo, y 429, 502 y 503 no traen respuesta; ninguno se cobra. La tabla completa por estado está en la página de OpenAI API. Para programar con Claude en la terminal, usa Claude Code; los dos funcionan con la misma key y el mismo saldo, y cómo crear la key está en la página de Claude API key.

401La key es incorrecta o fue revocada, o RELAYSWITCH_API_KEY está vacía en la terminal donde se ejecuta Codex. Ejecuta export otra vez y reinicia.
402El saldo no alcanza o el presupuesto de la key se agotó. Vuelve a funcionar en cuanto recargas o subes el presupuesto.
404El id del modelo no existe en el catálogo, normalmente porque el menú /model reescribió el profile. Restaura la línea model.
429Se alcanzó el rate limit de la key. Espera lo que indique el header retry-after o sube en la consola el límite de peticiones por minuto de esa key.
El bloque de provider no se aplicaEl nombre de la tabla usa un id integrado, o model_provider no contiene el nombre de esa tabla.
El profile no se aplicaSu contenido sigue siendo una tabla [profiles.<name>] en config.toml; mueve sus líneas a un archivo propio.

Preguntas frecuentes

¿Qué es Codex CLI?
Codex CLI es el agente de programación de línea de comandos de OpenAI. El ajuste model_provider de su configuración decide adónde van las peticiones; por defecto es openai, y se puede apuntar a un provider que definas tú en config.toml.
¿Cómo se configura Codex con una API key propia?
Añade en ~/.codex/config.toml un bloque model_providers.relayswitch con name, base_url (https://api.relayswitch.io/v1) y env_key (RELAYSWITCH_API_KEY). Luego pon relayswitch en model_provider en el nivel superior y uno de los id de GPT del catálogo en model. Guarda la key en la variable de entorno con export y ejecuta codex.
¿Hace falta una cuenta de ChatGPT o una API key de OpenAI?
Según la referencia de configuración de Codex, requires_openai_auth vale false por defecto en un provider propio, y las peticiones se autentican con la key de la variable de entorno que indica env_key. Tu cuenta y tu saldo están en RelaySwitch, y la key empieza por sk-relay-.
¿base_url lleva /v1 o no, y qué se pone en wire_api?
base_url lleva https://api.relayswitch.io/v1, con /v1; Codex añade /responses detrás. wire_api solo tiene un valor válido, responses, que además es el valor por defecto, así que la línea se puede borrar. El valor chat de los tutoriales antiguos ya no sirve.
¿Cómo sé que no cambian el modelo a escondidas?
Hay dos cosas que puedes comprobar por tu cuenta. Cada modelo recibe el mismo prompt de prueba una vez al día y su respuesta se compara con los resultados anteriores; los resultados están abiertos en https://api.relayswitch.io/v1/proof. Cada petición tiene además un recibo firmado que registra el id del modelo, los tokens cobrados y el costo. El valor de model_reasoning_effort lo envía Codex en cada petición y el gateway lo pasa al modelo tal cual.
Los tokens de Codex salen caros, ¿cómo se ahorra?
Codex reenvía la conversación y el output de las herramientas en cada turno, así que el costo está sobre todo en el input y el cached input. Tres medidas: usa un modelo más barato para los cambios del día a día y el caro solo para problemas difíciles, abre una sesión nueva al terminar cada tarea, y ponle a la key de Codex un presupuesto en dólares y un límite diario para que se detenga al alcanzarlo.

Un bloque de provider, una variable de entorno

base_url https://api.relayswitch.io/v1, modelos GPT cobrados por token al precio del catálogo, con una comprobación diaria abierta al público.