Настройка Codex CLI: профиль кастомного провайдера для apiToken.sale
Настройка Codex CLI сводится к одному TOML-профилю: объявите кастомного провайдера модели, направьте base_url на apiToken.sale и назовите переменную окружения, в которой лежит ключ. Дальше Codex работает с моделями GPT-6 Astra / GPT-5.6 полностью на аутентификации по API-ключу и расходует предоплаченный баланс — без входа в ChatGPT и с единой скидкой 50% от официального расхода OpenAI.
·
Codex CLI не нужен аккаунт ChatGPT
Codex CLI аутентифицируется так, как говорит ему активный провайдер модели. Определите кастомного провайдера в таблице model_providers, экспортируйте названный им API-ключ — и Codex даже не посмотрит на вход в ChatGPT из auth.json: каждый запрос подписан вашим ключом и оплачивается тем, кто владеет эндпоинтом. Направьте этот эндпоинт на apiToken.sale — и каждая сессия расходует один предоплаченный баланс, тарифицируемый по официальным ставкам OpenAI за токены с единой скидкой B2C 50%.
Чистый способ это сделать — именованный профиль, а не правка основной конфигурации. Профиль живёт в собственном файле, ваша настройка Codex по умолчанию и возможный вход в ChatGPT остаются в точности как были, а включается он одним флагом на запуск. Удалите файл — и ничто в вашем окружении не вспомнит, что apiToken.sale существовал.
Читайте также: OpenAI-совместимый API: быстрый старт — от curl до официального SDK
Напишите профиль apitoken один раз
Сохраните это как ~/.codex/apitoken.config.toml. Здесь объявлены провайдер, эндпоинт, протокол обмена и переменная окружения, из которой 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 задаёт имя переменной вместо хранения секрета, поэтому ключ живёт в шелле и никогда не попадает в файл, который вы можете закоммитить. А base_url сохраняет суффикс /v1 — его потеря чаще всего ломает первый запуск, потому что каждый маршрут, который вызывает Codex, висит на этом префиксе.
Оставьте wire_api = "responses". Codex 0.149 принимает только Responses wire. Шлюз также обслуживает Chat Completions для других клиентов, но wire_api = "chat" не является допустимой настройкой Codex.
Экспортируйте ключ, проверьте каталог, запустите
- 01Экспортируйте ключ в шелле, который запустит Codex: export APITOKEN_API_KEY=sk-pool-••• — добавьте ту же строку в профиль оболочки, если ключ нужен постоянно.
- 02Проверьте, что включено, прежде чем угадывать ID моделей: curl https://router.apitoken.sale/v1/models с тем же Bearer-ключом вернёт актуальный каталог.
- 03Запустите с флагом профиля: codex --profile apitoken. Явно переданный флаг снимает любую двусмысленность насчёт того, какой провайдер — и какая переменная окружения — активны в сессии.
- 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 существуют потому, что агентное кодирование сжигает токены с очень разной скоростью в зависимости от глубины рассуждений:
| 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 за input/cached/запись кэша/output — $4/$0.40/$5/$20 до 2026-11-21 включительно, а после плоской скидки 50% — $2/$0.20/$2.50/$10. С 2026-11-22 UTC возвращаются стандартные $5 за input и $30 за output.
- gpt-5.6-sol — для самой тяжёлой работы: многофайловые рефакторинги, тонкая отладка, всё, где неверный ответ стоит дороже токенов.
- gpt-5.6-terra — рабочая лошадка на каждый день: уровень, который должен быть по умолчанию в большинстве сессий Codex.
- gpt-5.6-luna — для быстрых дешёвых шагов: бойлерплейт, переименования, одноразовые скрипты и высокообъёмные циклы, где задержка важнее глубины.
- Кэш входа — место, где агентные циклы реально экономят: повторные чтения контекста тарифицируются по кэш-ставке, а сверху снимается скидка 50%.
Четыре ошибки, которые Codex покажет вам на самом деле
- Missing APITOKEN_API_KEY — переменная из env_key не экспортирована в шелле, который запускает codex. Экспортируйте её в том же шелле или в профиле оболочки и повторите.
- stream error: unexpected status 401 — ключ неверен, отозван или base_url потерял суффикс /v1. Воспроизведите вызов curl'ом вне Codex, чтобы понять, какая половина сломана.
- stream error: unexpected status 404 — ID модели не включён. Проверьте GET https://router.apitoken.sale/v1/models вместо предположения, что набранный ID существует.
- 402 — общий предоплаченный баланс нужно пополнить. Ожидание с backoff не поможет; пополните баланс — и следующий запрос пройдёт.
Все четыре — проблемы конфигурации или баланса, а не модели: ни одна не решается повтором той же команды. 401 в частности почти всегда сводится к суффиксу /v1 или лишнему символу, вставленному в ключ.
Полный разбор ошибок Codex — config.toml, auth.json, stream errors →
Сколько стоит сессия Codex на предоплаченном балансе
Тарификация — за токены по официальным ставкам OpenAI, а ваша единая скидка B2C 50% вычитается до того, как списание коснётся предоплаченного баланса, — то же правило, что действует для использования Claude на платформе. Ни подписки, ни платы за место: неделя простоя не стоит ничего, а тяжёлая сессия стоит ровно столько токенов, сколько она потребила, — за половину официального расхода.
Поскольку баланс общий для поддерживаемых моделей Claude, GPT, Gemini и Kimi, сессии Codex черпают из того же пула, что и всё остальное, что вы запускаете. Следите за расходом в дашборде и воспринимайте 402 как тот сигнал, которым она является: закончился счётчик — больше ничего не сломалось.
GPT-6 Astra: новейшая модель GPT
GPT-6 Astra — новейшая модель GPT в каталоге моделей. Официальные ставки за свежий ввод/кешированный ввод/запись кеша/вывод — $10/$1/$12.50/$50 за 1 млн токенов; после скидки B2C 50% — $5/$0.50/$6.25/$25. Максимальный контекст Codex — 872K, консервативный лимит ввода — 744K, вывод — 128K. Уровни reasoning: low, medium, high, xhigh и max. Свыше 272K ввода ставки ввода и кеша удваиваются, вывода — умножаются на 1,5; Fast удваивает применимые ставки. Примеры GPT-5.6 ниже сохраняют свои ставки.
Частые вопросы
Нужен ли аккаунт или подписка ChatGPT для Codex CLI?
Нет. С кастомным профилем model_providers и ключом провайдера в окружении Codex работает полностью на аутентификации по API-ключу — вход в ChatGPT из auth.json роли не играет.
Меняет ли этот профиль мою настройку Codex по умолчанию?
Нет. Профиль живёт в собственном файле и активируется только с --profile apitoken. Конфигурация по умолчанию и любой вход в ChatGPT остаются нетронутыми.
Скидка на GPT-5.6 та же, что и на Claude?
Да. Использование GPT-5.6 тарифицируется по официальным ставкам OpenAI за токены, и ваша единая скидка B2C 50% применяется к тому же предоплаченному балансу.
Какое значение wire_api использовать в Codex 0.149?
Используйте 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 посреди сессии?
Общий предоплаченный баланс пуст и нуждается в пополнении. Повторы с backoff не помогут — пополните баланс, и следующий запрос пройдёт.
Создайте аккаунт через Google или GitHub и протестируйте шлюз с бонусом $5 на балансе платформы.