Codex CLI 配置:为 apiToken.sale 写一个自定义提供商配置档
Codex CLI 的配置归结为一个 TOML 配置档:声明自定义模型提供商、把 base_url 指向 apiToken.sale、指定存放密钥的环境变量名。之后 Codex 完全以 API 密钥认证运行 GPT-6 Astra / GPT-5.6 模型,走预付余额扣费——无需 ChatGPT 登录,支出比 OpenAI 官方统一低 50%。
·
Codex CLI 不需要 ChatGPT 账户
Codex 的认证方式由当前启用的模型提供商决定。在 model_providers 表里定义一个自定义提供商、导出它指定的 API 密钥,Codex 就不会再看 auth.json 里的 ChatGPT 登录——每个请求都用你的密钥签名,由端点归属方计费。把端点指向 apiToken.sale,每次会话就从同一个预付余额扣费:按 OpenAI 官方 token 费率计量,再叠加统一的 50% B2C 折扣。
干净的做法是用命名配置档,而不是改动主配置。配置档独立存放在自己的文件里,你的默认 Codex 配置和已有的 ChatGPT 登录原样保留,每次运行用一个 flag 显式启用。删掉这个文件,环境里就不会再留下任何 apiToken.sale 的痕迹。
一次写好 apitoken 配置档
将以下内容保存为 ~/.codex/apitoken.config.toml。它声明了提供商、端点、wire 协议,以及 Codex 读取密钥的环境变量:
# ~/.codex/apitoken.config.toml model = "gpt-5.6-sol" model_provider = "apitoken" [model_providers.apitoken] name = "apiToken.sale" base_url = "https://router.apitoken.sale/v1" wire_api = "responses" env_key = "APITOKEN_API_KEY"
两行承载了安全姿态。env_key 指定变量名而不是存放密钥本身,密钥留在 shell 里,绝不写进可能被提交的文件。base_url 必须保留 /v1 后缀——丢掉它是首次运行失败最常见的原因,因为 Codex 调用的每个路由都挂在这个前缀下。
保持 wire_api = "responses"。Codex 0.149 只接受 Responses wire。网关也为其他客户端提供 Chat Completions,但这不表示 wire_api = "chat" 是 Codex 的有效设置。
导出密钥、查目录、运行
- 01在将要启动 Codex 的 shell 里导出密钥:export APITOKEN_API_KEY=sk-pool-•••——想永久生效就把同一行写进 shell 配置文件。
- 02先确认启用了什么再猜模型 ID:用同一个 Bearer 密钥请求 curl https://router.apitoken.sale/v1/models,返回的是实时目录。
- 03用配置档 flag 启动:codex --profile apitoken。显式传 flag 可以消除本次会话用哪个提供商——以及哪个环境变量——的一切歧义。
- 04先发一个小提示词。一次干净的回答能在一个往返里同时验证密钥、base_url 和余额;这一步出问题,排查成本也最低。
export APITOKEN_API_KEY=sk-pool-••• curl https://router.apitoken.sale/v1/models \ -H "Authorization: Bearer $APITOKEN_API_KEY" codex --profile apitoken
目录接口回答的是整个网关,不只是 GPT:统一目录按提供方给 ID 划分命名空间(anthropic/*、openai/*、google/*)。同一把密钥和余额也覆盖支持的 Claude、Gemini 与 Kimi 模型——Codex 只会调用它配置档指向的那个提供商。
按会话选对 GPT-5.6 档位
配置档里的 model 行是默认值,不是承诺——按项目改它。GPT-5.6 设三档,是因为智能体编码在不同推理强度下烧 token 的速度差别很大:
| 模型 ID | 档位 | 官方输入 / 输出($ / 1M) | 缓存输入 |
|---|---|---|---|
| gpt-5.6-sol | 旗舰 | $4 / $20(临时) | $0.40 |
| gpt-5.6-terra | 均衡 | $2 / $12 | $0.20 |
| gpt-5.6-luna | 快速 | $0.20 / $1.20 | $0.02 |
- Sol 临时官方输入/缓存/缓存写入/输出费率截至 2026-11-21(含当日)为 $4/$0.40/$5/$20,统一五折后为 $2/$0.20/$2.50/$10;自 2026-11-22 UTC 起恢复标准输入 $5、输出 $30。
- gpt-5.6-sol 用于最重的活:多文件重构、隐蔽 bug 的调试,以及任何答错比 token 更贵的场景。
- gpt-5.6-terra 作为日常主力——大多数 Codex 会话应该默认这一档。
- gpt-5.6-luna 用于又快又省的步骤:样板代码、重命名、一次性脚本,以及延迟比深度更重要的高频循环。
- 缓存输入是智能体循环真正省钱的地方——重复的上下文读取按缓存费率计费,50% 折扣再叠加其上。
Codex 真正会报给你的四个错误
- Missing APITOKEN_API_KEY——env_key 指定的变量没有在运行 codex 的 shell 里导出。在同一个 shell(或 shell 配置文件)里导出后重试。
- stream error: unexpected status 401——密钥错误、已吊销,或 base_url 丢了 /v1 后缀。在 Codex 之外用 curl 复现调用,定位坏的是哪一半。
- stream error: unexpected status 404——模型 ID 未启用。查 GET https://router.apitoken.sale/v1/models,不要假设你敲的 ID 存在。
- 402——共享预付余额需要充值。退避重试解决不了;充值后下一个请求即可成功。
这四个都是配置或余额问题,不是模型问题——没有一个靠重复同一条命令能解决。其中 401 几乎总能归结为 /v1 后缀丢失,或密钥里多粘了一个字符。
预付余额下一次 Codex 会话花多少钱
按 token 计费,费率与 OpenAI 官方一致,你的统一 50% B2C 折扣在扣预付余额之前就已减去——与平台上 Claude 用量的计费规则相同。没有订阅费也没有席位费:闲置一周不花一分钱,重度会话恰好按它消耗的 token 计费,即官方支出的一半。
余额在支持的 Claude、GPT、Gemini 与 Kimi 模型之间共享,Codex 会话和你跑的其他所有东西从同一个池子里扣。在控制台关注用量,把 402 当作它本来的信号——余额见底了,别的什么都没坏。
GPT-6 Astra:最新 GPT 模型
GPT-6 Astra 是本模型目录中的最新 GPT 模型。每百万 token 的官方新鲜输入/缓存输入/缓存写入/输出费率为 $10/$1/$12.50/$50,B2C 五折后为 $5/$0.50/$6.25/$25。Codex 最大上下文为 872K,保守输入上限为 744K,输出上限为 128K。推理强度支持 low、medium、high、xhigh 和 max。输入超过 272K 时,输入及缓存费率翻倍,输出为 1.5 倍;Fast 将适用费率再翻倍。下方 GPT-5.6 示例保留各自费率。
常见问题
Codex CLI 需要 ChatGPT 账户或订阅吗?
不需要。配置好自定义 model_providers 配置档、把提供商的 API 密钥放进环境变量后,Codex 完全以 API 密钥认证运行——auth.json 里的 ChatGPT 登录与此无关。
这个配置档会改动我的默认 Codex 配置吗?
不会。配置档独立存放,只有传入 --profile apitoken 时才启用。你的默认配置和已有的 ChatGPT 登录保持原样。
GPT-5.6 的折扣和 Claude 的一样吗?
一样。GPT-5.6 用量按 OpenAI 官方 token 费率计量,你的统一 50% B2C 折扣作用于同一个预付余额。
Codex 0.149 应该使用哪个 wire_api?
使用 wire_api = "responses"。Codex 0.149 只接受 Responses wire。网关通过 Chat Completions 为其他客户端提供服务,但 wire_api = "chat" 不是 Codex 的有效设置。
不改配置档能切换 GPT-5.6 模型吗?
配置档里的 model 行设定的是默认值;按项目编辑这一行就是在 gpt-5.6-sol、gpt-5.6-terra 和 gpt-5.6-luna 之间切换的受支持方式。
会话中途报 402 是什么意思?
共享预付余额用完了,需要充值。退避重试没有用——充值后下一个请求就会通过。