unexpected status 401 Unauthorized - Codex
Quick fix
手动修改 Codex 的 config.toml,添加 model_provider 声明及对应的 provider 配置段,或升级 cc-switch 至最新版。
Symptom
Section titled “Symptom”unexpected status 401 Unauthorized: Incorrect API key provided: sk-9979a***********************225a. You can find your API key at https://platform.openai.com/account/api-keys., url: https://api.openai.com/v1/responses, cf-ray: a06fd811bfa649f7-TPE, request id: req_5cf0db278fa644f59381a0424fd76c15, auth error: 401, auth error code: invalid_api_keycc-switch 写入的 config.toml 使用了扁平格式,缺少 model_provider 顶层声明和 [model_providers.xxx] 配置段。这导致 Codex CLI 忽略了自定义的 base_url,默认使用内置的 openai 供应商,将请求直接发送至 api.openai.com。由于使用了 DeepSeek 或其他第三方中转的 API Key,OpenAI 会拒绝请求并返回 401 错误(部分地区可能因网络限制返回 403 Forbidden)。
官方在 v3.16.2 至 v3.16.4 期间对本地路由接管进行了修复,但根据用户反馈,在 v3.19.1 的本地代理接管模式下,该配置格式缺失问题依然存在。
尝试升级 cc-switch 至 v3.16.4 或更高版本,重新配置 DeepSeek 供应商并开启本地路由。
若升级后问题依旧,请手动编辑 Codex 的配置文件,将扁平格式修改为 Codex 要求的自定义 provider 格式。
在配置文件中添加 model_provider 声明及对应的 [model_providers.ccswitch] 配置段:
~/.codex/config.toml model_provider = "ccswitch"model = "astron-code-latest"wire_api = "responses"model_catalog_json = 'C:\Users\LENOVO\.codex\cc-switch-model-catalog.json'[model_providers.ccswitch]name = "CC Switch"base_url = "http://127.0.0.1:15721/v1"wire_api = "responses"或者在启动时通过命令行参数临时覆盖配置:codex -c model_provider=ccswitch -c model_providers.ccswitch.base_url=http://127.0.0.1:15721/v1 -c model_providers.ccswitch.wire_api=responses
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 2 个真实 issue
- 修改配置后运行 /model 仍然没有显示 DeepSeek 模型怎么办?
- 这可能是因为 Codex 本地缓存中没有该自定义模型别名(如 astron-code-latest)的元数据。这不是致命错误,Codex 仍能降级到通用模式正常工作。若提示找不到 models_cache.json,请先正常启动一次 Codex 生成该缓存文件,再使用 cc-switch 切换路由。
- 为什么我的报错信息是 403 Forbidden 而不是 401?
- 当请求直连 api.openai.com 时,如果用户的网络环境(如境内或香港出口)受到 OpenAI 的地区限制,就会在 WebSocket 重连失败降级 HTTPS 后返回 403 错误。根本原因同样是 config.toml 格式错误导致未走本地代理。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。