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.

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 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:
bashcodex 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:
bashcodex 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 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.

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:
bashcodex 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:
bashssh -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:
codex login statusmuestra el método previsto.- App o IDE muestra la cuenta y el workspace correctos cuando esa información está disponible.
- 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; una conexión, herramienta o proceso bloqueado pertenece al diagnóstico de timeout; una solicitud de teléfono, MFA o device verification pertenece a la guía de verificación de Codex.
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.logsolo 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.



