# Codex Token Exchange Failed: identifica la fase antes de repetir el login

> Resuelve token exchange failed y los fallos de renovación de Codex separando el intercambio OAuth, el callback de loopback local y el host donde se ejecuta el proceso.

- Source: https://www.aifreeapi.com/es/posts/codex-access-token-could-not-be-refreshed
- Language: es
- Published: 2026-08-25
- Updated: 2026-08-31
- Publisher: AI Free API (https://www.aifreeapi.com)

`Token exchange failed` y `Your access token could not be refreshed` pertenecen a la autenticación de Codex, pero aparecen en fases distintas. El primero ocurre mientras Codex intenta convertir el resultado de autorización del navegador en tokens utilizables. El segundo aparece cuando una sesión ya guardada no puede renovarse. OpenAI no publica una matriz exhaustiva que asigne cada texto a una causa única.

El navegador puede mostrar que el acceso terminó aunque el proceso de Codex no haya recibido el callback local, alcanzado el token endpoint o guardado las credenciales. Primero identifica dónde se ejecuta ese proceso y cuál fue el último paso observable; después elige entre reconstruir la sesión, usar device auth, reenviar el puerto o revisar red y TLS.

## Usa el final del error para elegir la primera prueba

Conserva el mensaje completo, pero elimina los secretos. La parte final reduce el espacio de diagnóstico:

| Señal observable | Lo que sí establece | Primera comprobación útil |
|---|---|---|
| `error sending request for url (.../oauth/token)`, timeout o connection error | La solicitud del proceso al token endpoint no terminó | Red, proxy y TLS desde el host del proceso, no solo desde el navegador |
| `token endpoint returned status 403` | El endpoint recibió la solicitud y la rechazó | Guardar el estado y el contexto saneado; comprobar cuenta, workspace y política sin adivinar una causa regional |
| El navegador termina y la CLI sigue esperando | El callback de loopback local puede no haber llegado a Codex | Confirmar WSL, SSH, contenedor o extension host remoto |
| `access token could not be refreshed` | Falló la renovación de una sesión guardada | Revisar auth status en el entorno real y reconstruir credenciales con comandos compatibles |
| `CERTIFICATE_VERIFY_FAILED` u otro error CA explícito | El proceso no confía en la cadena de certificados | Usar un bundle corporativo de confianza solo cuando exista TLS interception conocida |

Son límites de diagnóstico, no causas automáticas. Un 403 demuestra rechazo, pero no identifica por sí solo cuenta, región, VPN, suscripción o proxy.

![Diagnóstico en español de Codex por señal final del error, host que guarda la sesión, reconstrucción en CLI o App, excepciones de login, prueba pequeña y escalado sin credenciales](https://www.aifreeapi.com/posts/es/codex-access-token-could-not-be-refreshed/img/auth-phase-host-diagnostic.webp)

## Protege el estado del proyecto antes de tocar el login

Un error de autenticación no borra automáticamente los archivos que Codex ya ha modificado. El riesgo aparece al repetir la misma tarea en varias ventanas o al eliminar carpetas completas para “limpiar la caché”.

Antes de salir:

- revisa los cambios sin commit del repositorio;
- guarda el prompt no enviado y el error completo, sin datos privados;
- anota la hora y zona horaria, la superficie de Codex, la versión y la ruta del proyecto;
- registra la última acción que terminó correctamente;
- detén los intentos duplicados en App, CLI e IDE.

No compartas `auth.json`, access tokens, refresh tokens, API keys, OTP, cookies ni un HAR sin limpiar. La [documentación de autenticación](https://learn.chatgpt.com/docs/auth#credential-storage) de OpenAI explica que `auth.json`, cuando se usa almacenamiento en archivo, contiene tokens de acceso y debe tratarse como una contraseña.

## Encuentra el host que guarda la sesión

La pantalla visible no siempre coincide con el equipo que ejecuta Codex. Una ventana de VS Code puede usar un extension host por Remote SSH. La terminal puede estar dentro de WSL o de un contenedor. Un agente externo puede conservar un perfil OAuth propio aunque la CLI independiente esté sana.

| Superficie | Límite de credenciales que debes revisar | Lo que no demuestra que esté limpio |
|---|---|---|
| Codex App local | Perfil activo de la App y almacén local | Salir de ChatGPT en otro perfil del navegador |
| Codex CLI | Usuario del sistema y `CODEX_HOME` de esa shell | Que ChatGPT web funcione |
| Extensión de IDE | Extension host local o remoto | Reinstalar solo la interfaz del editor |
| WSL, SSH, contenedor o VM | Home o keyring dentro de ese entorno | Salir en el equipo anfitrión |
| Harness o gateway externo | Perfil de autenticación propio | Que la CLI de Codex funcione aparte |

OpenAI documenta que la CLI y la extensión de IDE pueden compartir credenciales guardadas. Estas pueden vivir en `~/.codex/auth.json` o en el almacén de credenciales del sistema operativo. Por eso conviene usar primero el logout admitido: borrar un archivo supuesto no sirve si el proceso usa un keyring, otro usuario o un host remoto.

## Reconstruye la sesión de CLI e IDE

Ejecuta los comandos en el entorno donde vive el proceso que muestra el error. Comprueba primero el método activo:

```bash
codex login status
```

El resultado indica si hay credenciales y qué modo de autenticación está activo. Puede revelar que el usuario esperaba acceso con ChatGPT pero la shell usa una API key, o que el IDE remoto corre con otro usuario del sistema. Un status correcto no prueba todavía que una solicitud real funcione.

Elimina las credenciales guardadas mediante la ruta compatible y vuelve a entrar:

```bash
codex logout
codex login
```

En el navegador, confirma la cuenta de ChatGPT y el workspace previstos. Después ejecuta de nuevo `codex login status`.

La [documentación oficial de autenticación](https://learn.chatgpt.com/docs/auth#check-authentication-or-sign-out) describe `codex login`, `codex login status` y `codex logout`. Reinicia completamente el IDE después del nuevo login: un extension host que ya estaba abierto puede conservar estado antiguo aunque la caché compartida haya cambiado.

En Codex App, abre el menú del perfil, confirma la cuenta o el estado de API key y cierra sesión dentro de la App. Sal por completo, vuelve a abrirla e inicia sesión con el método previsto. Cerrar `chatgpt.com` en un navegador no demuestra que el almacén local de la App se haya vaciado.

Una API key tampoco es una reparación universal del login de ChatGPT. Se factura por la cuenta de Platform y algunas funciones que dependen del workspace o de servicios cloud pueden no estar disponibles. Primero decide qué ruta de autenticación necesitabas recuperar.

![Flujo en español para completar una reautenticación segura de Codex: fase, host, método, device code o SSH, CA corporativa, comandos CLI y señal de éxito con una tarea real](https://www.aifreeapi.com/posts/es/codex-access-token-could-not-be-refreshed/img/secure-reauthentication-flow.webp)

## Cuando el nuevo inicio de sesión no termina

Si las credenciales antiguas ya se borraron pero el navegador no devuelve el control a Codex, el problema ha cambiado de fase.

En una CLI remota o sin interfaz, el endpoint de callback local puede no estar disponible. Cuando la cuenta o el workspace lo permiten, usa device code:

```bash
codex login --device-auth
```

Abre el enlace, inicia sesión e introduce el código de un solo uso. No se lo envíes a nadie. Si la opción está desactivada, debe habilitarla el usuario en su seguridad o el administrador del workspace.

Si mantienes el flujo normal del navegador y la CLI corre en un host accesible por SSH, el callback oficial predeterminado usa el puerto 1455 de loopback local. Crea el túnel desde tu equipo y ejecuta el login en esa misma sesión SSH:

```bash
ssh -L 1455:[::1]:1455 user@remote
codex login
```

No expongas el puerto 1455 a Internet ni lo añadas mecánicamente si Codex ya corre en local. El túnel solo corrige la ruta del callback; no repara un 403 del endpoint ni un fallo de certificado.

En una red corporativa con proxy TLS o autoridad raíz privada, la guía oficial ofrece `CODEX_CA_CERTIFICATE` para un bundle PEM de confianza. Además, una ejecución directa de `codex login` escribe `codex-login.log` en el directorio configurado. Ese log ayuda a separar callback, certificado y login del navegador, pero hay que eliminar tokens, correos, identificadores de workspace y rutas privadas antes de compartirlo.

Un entorno administrado puede obligar a usar ChatGPT o API key y limitar ChatGPT a un workspace concreto. Si una cuenta recién elegida se rechaza o sale de inmediato, deja de rotar archivos locales y pide al administrador que revise membership, provisioning, método permitido y workspace esperado.

Workload identity es otra excepción. Si el entorno del proceso entrega la identidad, OpenAI indica que `codex login` y `codex logout` se rechazan. La reparación corresponde al proveedor de identidad, la regla de federación o el runtime.

## Comprueba una tarea, no solo la pantalla de login

Una recuperación completa tiene tres señales:

1. `codex login status` muestra el método previsto.
2. App o IDE muestra la cuenta y el workspace correctos cuando esa información está disponible.
3. Una tarea pequeña termina en el mismo proyecto y entorno que falló.

Empieza con una acción de lectura, como resumir un archivo no sensible. No reanudes inmediatamente una escritura grande. Si la prueba funciona, revisa los cambios existentes y continúa la tarea original.

Si aparece un error distinto, cambia también el diagnóstico. HTTP 429 pertenece a [los límites de Codex](/es/posts/codex-rate-limits); una conexión, herramienta o proceso bloqueado pertenece al [diagnóstico de timeout](/es/posts/codex-timeout); una solicitud de teléfono, MFA o device verification pertenece a la [guía de verificación de Codex](/es/posts/codex-phone-verification).

## Escala sin entregar secretos

Si el login nuevo se completó en el host correcto y el mismo error vuelve, prepara un paquete mínimo:

- error redactado, hora y zona horaria;
- App, CLI o IDE y versión;
- sistema operativo y contexto local, WSL, SSH, contenedor o VM;
- método activo, sin token ni identificador completo de cuenta;
- resultado del logout y del nuevo flujo de navegador o dispositivo;
- resultado de una prueba pequeña;
- extracto saneado de `codex-login.log` solo si falló el login nuevo.

No adjuntes `auth.json`, tokens, API keys, OTP, cookies, un HAR completo ni capturas con secretos. La recuperación no termina cuando reaparece el formulario de acceso, sino cuando las credenciales nuevas del host correcto están asociadas a la cuenta y al método previstos y pueden completar una tarea acotada de Codex.
