前言
最近在迁移Codex的时候,遇到个挺让人头疼的配置问题。明明已经用官方Plus账号登录了,可每次发请求,都给我弹一个401 Unauthorized的错误:
unexpected status 401 Unauthorized:
{
"code":"INVALID_API_KEY","message":"Invalid API key"
},
url: https://...中转站.com/v1/responses,
cf-ray: a1adf952aef7cf12-SJC,
request id: c64faec8-54bc-4723-8862-1761785f3cc76
日志里暴露出来的请求地址,才是真正的问题所在:url: https://中转站.com/v1/responses
登录的是官方账号,请求却依然发往旧的中转站地址。
这篇文章把整个排查过程与底层原理都梳理了一遍,希望能帮到正在迁移的朋友,别再踩这个坑。
问题现象
先说背景吧,已经完成官方ChatGPT账号登录,Plus订阅状态正常,登录态也没问题。但执行任何Codex命令,都会报INVALID_API_KEY错误。
关键线索就在日志里的请求URL里:https://中转站.com/v1/responses
OpenAI官方接口的域名明明是api.openai.com,而不是第三方中转站域名。这说明Codex根本就没有使用官方Provider。
第一反应:是不是登录没生效?
大多数人遇到这个问题的第一反应,都是——是不是登出不干净?于是反复执行codex logout和codex login。重新登录后问题依旧,这就排除了登录状态的问题,说明根因在别处。
真正原因:config.toml 中残留的 Custom Provider 配置
打开Codex的配置文件,会发现类似这样一段配置:
# macOS / Linux vim ~/.codex/config.toml Windows 通常位于 C:Users...用户名>.codexconfig.toml
model = "gpt-5.6-sol" model_provider = "custom" [model_providers.custom] name = "custom" wire_api = "responses" requires_openai_auth = true base_url = "https://中转站.com/v1"

问题就出在这里。
容易误解的参数:requires_openai_auth = true
很多人看到这个参数会以为“开启了官方认证=使用官方接口”,其实完全不是。它的真实含义是:使用OpenAI登录获取的身份凭证,但请求仍然发送到custom provider指定的地址。
用流程图来表示更直观:
OpenAI 登录
│
▼
获取 Access Token
│
▼
请求发往 max.jojocode.com ← 仍然是中转站
而不是大家直觉中的:
OpenAI 登录
│
▼
请求发往 api.openai.com
登录身份和请求目的地是两个完全独立的配置项。
Codex 的请求路由逻辑
Codex发请求时的判断流程大致是这样的:
发起请求
│
▼
读取 model_provider 配置
│
├── model_provider = "openai" → 走官方 api.openai.com
│
└── model_provider = "custom" → 走 [model_providers.custom]
中的 base_url 地址
由于配置里写死了model_provider = "custom"和base_url = "https://max.jojocode.com/v1",无论你登录哪个账号,请求最终都会被发往中转站。官方登录只是提供了一个Token,这个Token在中转站那边验证不通过,自然就报了INVALID_API_KEY。
解决方案
第一步:清理 Custom Provider 配置
删除config.toml中以下整段内容:
model = "gpt-5.6-sol" model_provider = "custom" [model_providers.custom] name = "custom" wire_api = "responses" requires_openai_auth = true base_url = "https://max.jojocode.com/v1"
其余配置(plugins、mcp_servers、playwright、desktop、projects等)全部保留即可。删除后,Codex会回退到默认的openai provider,请求自然就走官方api.openai.com了。
第二步:重新登录
codex logout codex login
第三步:完全重启 Codex
注意:不是简单关闭窗口。需要确保所有相关进程都退出:退出Codex主程序(托盘图标也要退出)、关闭VS Code/编辑器中的Codex插件、关闭所有正在运行的终端。重新打开后再验证。
第四步:CC-Switch修改

使用官方账号后,要选择OpenAI Official供应商,防止之后启动再次转接到其他中转供应商。最后重启Codex即可解决问题。
快速自检:怎么判断是不是还在走中转?
看日志里的请求URL是最直接的方法:
| 请求地址包含 | 说明 |
|---|---|
api.openai.com | 官方接口,正常 |
jojocode.com 等第三方域名 | 仍然在走中转站 |
只要日志里出现非官方域名,就说明Provider或Base URL配置还没改干净。
总结与思考
这次踩坑的核心可以用一句话概括:登录的是官方账号≠请求走官方接口。
打个比方:登录身份就像身份证,请求地址就像快递收件地址。身份证是真的,但快递仍然寄到了旧地址,对方当然收不到。
INVALID_API_KEY这个错误信息确实很有迷惑性——它会引导你去排查API Key、账号权限,而真正的问题藏在Provider配置里。
排查同类问题的经验法则:遇到API鉴权报错,先看请求URL对不对。地址都错了,再怎么折腾Key和登录都是徒劳。
