# Codex

## unexpected status 401 Unauthorized

先看报错末尾 `url:` 后面是哪个地址：

**是 `api.openai.com` 或 `chatgpt.com`**：你的自定义 provider 没生效，请求还在发往官方。逐项检查：

- `config.toml` 里有没有 `model_provider = "sub2api"` 这一行，名字和 `[model_providers.sub2api]` 是否完全一致（区分大小写）。
- 这几行是不是放在了某个 `[...]` 段落**下面**。放在段落下面会被当成那个段落的设置，要挪到文件最开头。
- provider 名字是不是叫 `openai`。这是 Codex 内置的名字，自定义地址会被忽略，换个名字。
- 配置是不是写在了项目目录的 `.codex/config.toml` 里。provider 只能写在 `~/.codex/config.toml`。
- 环境变量里有没有残留的 `OPENAI_BASE_URL`。

**是 `2api.dev`**：请求到了 2api，是 Key 的问题。

- `~/.codex/auth.json` 里还留着 ChatGPT 登录信息：备份后删掉，重新写入 Key（见 [Codex CLI](https://docs.2api.dev/clients/codex/)）。
- Key 错了，或者分组不是 GPT 的分组。
- 用 `codex login status` 看当前用的是哪种登录方式。

改完后完全退出 Codex，新开一个会话。

## stream disconnected before completion

- 检查 `base_url` 是 `https://2api.dev/v1`。
- 终端里设置了失效的代理：运行 `env | grep -i proxy` 看看，修好代理，或者加 `NO_PROXY=2api.dev`。
- 长时间思考时连接被断开：在 `[model_providers.sub2api]` 里加 `stream_idle_timeout_ms = 600000`。
- 配置被 CC Switch 等工具改坏过：按 [Codex CLI](https://docs.2api.dev/clients/codex/) 重新写一份。
- 换模型、换时间都会出现，请带上时间联系客服。

## 每次新对话都卡在 Reconnecting… 1/5 到 5/5

Codex 先尝试用 WebSocket 连接，你的网络或代理不支持时要重试 5 次才退回普通连接。把 `config.toml` 里的 `supports_websockets = true` 和 `[features]` 下的 `responses_websockets_v2 = true` 删掉（或改成 `false`），完全重启 Codex。

## 提示模型不支持，或者推理档位不支持

- `Model "xxx" is not supported by any configured account in this group`：这个分组没有这个模型。模型名以控制台「使用密钥」里显示的为准，或者用 [`/v1/models`](https://docs.2api.dev/start/endpoints/#模型名) 查。
- `Unsupported value: 'xxx' is not supported with the 'yyy' model`：这个模型不支持你设的推理档位，改 `model_reasoning_effort` 或者删掉这一行。
- 临时换模型试试：`codex -m 模型名 -c model_reasoning_effort="high"`

## wire_api = "chat" is no longer supported

新版 Codex 只支持 Responses 协议，把 `wire_api` 改成 `"responses"`。

## VS Code 插件报 Missing environment variable，或者一直转圈

图形界面的编辑器拿不到终端里 `export` 的变量。用 `auth.json` 写入 Key（见 [Codex CLI](https://docs.2api.dev/clients/codex/)），不要依赖环境变量。然后完全退出编辑器再打开。配置文件格式写错时插件会悄悄用默认设置，在终端运行一次 `codex` 能看到带行号的报错。

## 改了 base_url 以后，历史会话不见了

历史会话跟 provider 名字绑定。保持 `model_provider = "sub2api"`、`[model_providers.sub2api]`、`name = "sub2api"` 三处一致，只改 `base_url` 和 Key，不要换 provider 名字。

## 重新登录 Codex 会不会丢会话

不会。只要不删 `~/.codex/sessions`，重置登录或改配置都不会删历史会话。

## 只显示 exceeded retry limit, last status: 429

Codex 把真正的原因藏起来了。跑一次[自检命令](https://docs.2api.dev/faq/#先做这一步)看完整报错，再对照 [429 的几种情况](https://docs.2api.dev/faq/network/#429-too-many-requests)。