/codex
Codex CLI
把 Codex CLI 接到 OpenToken:改 ~/.codex/config.toml。注意 wire_api 只能填 responses,chat 已被官方移除。
Codex 的接入方式和 Claude Code 不同:它不认环境变量里的地址,而是要在配置文件里定义一个 provider,再把它设为当前使用的 provider。
第一步:定义 provider
~/.codex/config.tomlmodel = "gpt-5.5"
model_provider = "opentoken"
disable_response_storage = true
[model_providers.opentoken]
name = "OpenToken"
base_url = "https://otokapi.com/v1"
wire_api = "responses"
env_key = "OPENTOKEN_API_KEY"逐行说明:
model—— 必填,Codex 没有默认值。先用 /v1/models 确认这个 ID 在你账号下可用,再填进来。model_provider—— 指向下面那段的 id。opentoken是自己起的名字,改成别的也行,两处保持一致即可。disable_response_storage—— 关掉 response 存储。第三方中转通常不实现这套接口,关掉更稳妥。base_url—— 必须带/v1,见下面两个 base URL 不一样。env_key—— 告诉 Codex 去哪个环境变量里取密钥。
第二步:把密钥放进环境变量
~/.zshrc(或 ~/.bashrc)export OPENTOKEN_API_KEY="sk-YOUR-API-KEY"PowerShellsetx OPENTOKEN_API_KEY "sk-YOUR-API-KEY"CC Switch 是一个桌面应用,帮你管理多个中转站的配置并一键切换。点下面的按钮,它会自动填好 OpenToken 的接入地址:
ccswitch://v1/import?resource=provider&app=codex&name=OpenToken&endpoint=https%3A%2F%2Fotokapi.com%2Fv1&homepage=https%3A%2F%2Fotokapi.com链接里没有密钥——你可以自己核对上面这串。导入后在 CC Switch 里填入自己的 sk- 密钥即可。点了没反应说明还没装 CC Switch,见 下载页。
导入后在 CC Switch 里填上你自己的密钥并启用。它会同时写两个文件:~/.codex/config.toml(provider 定义)和 ~/.codex/auth.json(密钥)。
CC Switch 的完整用法见 CC Switch 指南。
两个 base URL 不一样
同时配 Claude Code 和 Codex 的人,最常在这里翻车:
| 客户端 | 填的地址 | 客户端自己会拼上 |
|---|---|---|
| Claude Code | https://otokapi.com | /v1/messages |
| Codex CLI | https://otokapi.com/v1 | /responses |
**Codex 的带 /v1,Claude Code 的不带。**写反了两边都会 404。
密钥的另一种放法
除了环境变量,Codex 也支持把密钥放进 ~/.codex/auth.json。这是 CC Switch 采用的方案:
~/.codex/config.tomlmodel = "gpt-5.5"
model_provider = "opentoken"
disable_response_storage = true
[model_providers.opentoken]
name = "OpenToken"
base_url = "https://otokapi.com/v1"
wire_api = "responses"
requires_openai_auth = true~/.codex/auth.json{
"OPENAI_API_KEY": "sk-YOUR-API-KEY"
}两种方式二选一。环境变量那种更推荐,因为它不动 auth.json,你的 ChatGPT 登录态能保留。
三个容易踩的坑
别去覆盖内置的 openai provider
不能写 [model_providers.openai]——内置 provider 的 id 不允许被覆盖。要么像上面那样起一个新 id,要么用顶层的 openai_base_url 只改地址。给中转站起独立 id 是更清楚的做法。
配置必须放在用户级目录
项目里的 .codex/config.toml 会忽略 model_provider 和 model_providers(还有 openai_base_url、profiles 等一批键),只在启动时打一行警告。中转站的配置只能写在用户级的 ~/.codex/config.toml。
把配置放进项目目录还纳闷为什么不生效的,就是这个原因。
模型 ID 写错要到请求时才知道
和 Claude Code 一样,模型名不会在启动时校验,填错了要等第一次请求才报错。
验证是否接通
先绕开 Codex,直接打 /v1/responses——这正是 wire_api = "responses" 依赖的端点:
终端curl -X POST "https://otokapi.com/v1/responses" \
-H "Authorization: Bearer sk-YOUR-API-KEY" \
-H "content-type: application/json" \
-d '{"model":"gpt-5.5","input":"ping"}'curl 通了再跑 codex,随便让它做点什么。
在多个中转站之间切换
Codex 有 profile 机制,适合同时挂着好几个中转站。在同一个 config.toml 里定义多个 provider 和 profile:
~/.codex/config.tomlmodel = "gpt-5.5"
model_provider = "opentoken"
[model_providers.opentoken]
name = "OpenToken"
base_url = "https://otokapi.com/v1"
wire_api = "responses"
env_key = "OPENTOKEN_API_KEY"
[profiles.otok]
model = "gpt-5.5"
model_provider = "opentoken"
[profiles.official]
model = "gpt-5.5"
model_provider = "openai"觉得手写 TOML 麻烦,CC Switch 提供图形界面做同一件事。
切回官方账号
把 ~/.codex/config.toml 里的 model_provider 改回 openai(或整段删掉自定义 provider),然后 codex login 重新登录。用了 auth.json 方案的话那份文件已被覆盖,必须重新登录才能恢复。