Ошибка 403 в Codex: причины и как продолжить работу
403 в Codex бывает трёх видов: отказ по региону, проблема с аккаунтом и ограничения ключа на шлюзе. Показываем, как отличить их по тексту ошибки и что поправить.
5 мин · · ошибки · IDE
Когда в Codex появляется ошибка 403, неприятнее всего то, что у неё нет одной причины. Один и тот же код ответа приходит и от OpenAI, когда он отказывает по стране или аккаунту, и от шлюза, когда ключу запрещена модель. Лечатся они по-разному, поэтому первое действие не «перенастроить всё», а определить, кто именно ответил отказом. Ниже порядок диагностики, таблица причин и конкретные правки конфига Codex.
Codex ошибка 403: откуда она берётся
HTTP 403 означает «запрос понят, но выполнять его не будут». В связке Codex и API отказать могут разные звенья:
| Кто отказал | Как выглядит | Что делать |
|---|---|---|
| OpenAI напрямую: регион | в тексте ошибки сказано про страну, регион или территорию, где сервис не поддерживается | это не лечится настройкой Codex; Codex нужно направить на другой провайдер (см. ниже) |
| OpenAI напрямую: аккаунт | отказ при входе, запрос подтверждения, например номера телефона | это правила самого аккаунта OpenAI; повлиять на них из Codex нельзя |
Шлюз Zukko: model_not_allowed_for_key | JSON с этим кодом; модели нет в списке разрешённых для ключа | добавить модель в ключ или сменить модель в Codex |
Шлюз Zukko: email_unverified | JSON с этим кодом; email в кабинете не подтверждён | подтвердить email в кабинете |
Различать удобно по тексту: ошибки Zukko в конце содержат строку «Поддержка — https://t.me/zukkopro?direct, напишите, пожалуйста», код лежит в поле error.code. Если такой строки нет, ответ пришёл от другого звена.
Шаг 1. Выясните, куда на самом деле идёт Codex
Если Codex настроен по умолчанию, он обращается к OpenAI, и тогда 403 по региону вполне ожидаем: региональные ограничения устанавливает OpenAI, не вы и не мы. Мы не предлагаем схем обхода, подмены региона и чужих аккаунтов: они нарушают правила сервиса и могут привести к блокировке. Законный путь из России — другой провайдер в конфиге: доступ через шлюз, оплата СБП, картой MasterCard или криптой.
Откройте ~/.codex/config.toml (в Windows %USERPROFILE%\.codex\config.toml) и сравните со стандартным:
model = "gpt-6.1-sol"
model_provider = "zukko"
model_reasoning_effort = "high"
[model_providers.zukko]
name = "zukko"
base_url = "https://api.zukko.pro/v1"
wire_api = "responses"
requires_openai_auth = trueПроверьте три вещи. Первая: строка model_provider = "zukko" на месте и название совпадает с заголовком [model_providers.zukko]. Без неё Codex пойдёт к OpenAI. Вторая: base_url заканчивается на /v1. Третья: рядом лежит ~/.codex/auth.json с ключом:
{ "OPENAI_API_KEY": "fetch_..." }Если раньше вы входили в Codex через аккаунт, в этом файле могут лежать данные прежнего входа. Сделайте резервную копию файла и впишите ключ. По инструкции Zukko отдельный вход в аккаунт OpenAI не нужен: ключ берётся из auth.json. Автонастройку с резервными копиями описывает руководство по Codex.
Шаг 2. Про запрос номера телефона
«Codex запрашивает номер телефона» чаще всего связано с регистрацией и подтверждением аккаунта на стороне OpenAI, а не с самим Codex. Это условие аккаунта, и в обход него действовать не нужно. Если вы работаете через ключ шлюза, аккаунт OpenAI для запросов не используется, и такого шага быть не должно. Если он всё же появляется, скорее всего, Codex не прочитал ваш конфиг (шаг 1) или запущен в другой учётной записи с другим домашним каталогом.
Шаг 3. Проверьте ключ отдельным запросом
Чтобы отделить проблему Codex от проблемы ключа, отправьте запрос в обход Codex:
curl -i https://api.zukko.pro/v1/chat/completions \
-H "Authorization: Bearer $ZUKKO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'Читайте код ответа и тело:
- 200. Ключ, модель и баланс в порядке. Значит, 403 приходит не от шлюза: вернитесь к шагу 1 и проверьте, куда ходит Codex.
- 403
model_not_allowed_for_key. У ключа есть список разрешённых моделей, и вашей там нет. Откройте ключ в кабинете и добавьте модель в список либо сменитеmodelвconfig.toml. Модель можно сменить и при запуске:codex -m gpt-6.1-sol. - 403
email_unverified. Подтвердите email в кабинете. При входе через Telegram подтверждение не требуется. - 401. Ключ с опечаткой или отозван. 402. На балансе меньше $0.01. Это другие ошибки, но их часто путают с 403 на первый взгляд.
Если в config.toml указана модель, которой нет в каталоге, ответ будет 404 model_not_found. Актуальный список моделей публичный: GET https://api.zukko.pro/v1/models.
Частая ловушка: модель, которую Codex не умеет
По документации Zukko, Codex ходит через Responses API, поэтому подходят модели GPT и Claude. Модели GLM в Codex не работают. Если вы ограничили ключ моделью GLM ради экономии, а в Codex стоит GPT, получите как раз 403. Решение простое: для ключа Codex разрешите модель, которую вы ставите в model.
Про ограничение ключей полезно знать шире: как разрешить ключу только нужные модели и ошибка 403 model_not_allowed_for_key.
Как продолжить работу, пока разбираетесь
- Заведите отдельный ключ для Codex с дневным лимитом и списком моделей, которые вы реально используете. Тогда ошибка
model_not_allowed_for_keyпоявляется там, где вы её ожидаете. - Держите в
config.tomlодну проверенную модель и меняйте её черезcodex -m, а не правкой файла. - После любой правки конфига запускайте короткую задачу, например «выведи версию Node в проекте», и убеждайтесь, что ответ пришёл.
Чтобы проверить расход, посмотрите «Использование» в кабинете: запрос, дошедший до модели, там виден, а отклонённый 403 ничего не списывает.
Частые вопросы
Почему Codex выдаёт 403, хотя баланс есть?
Баланс влияет на 402. Для 403 причина в другом: регион или аккаунт при обращении к OpenAI напрямую, список разрешённых моделей у ключа или неподтверждённый email. Определите по тексту ответа и полю error.code.
Нужен ли для Codex обход региона?
Мы не советуем и не описываем такие схемы. Для работы из России используйте другой провайдер в конфиге: доступ через шлюз, оплата СБП, картой MasterCard или криптой.
Можно ли использовать Codex без подписки ChatGPT?
Да, Codex читает провайдера из конфига, поэтому ему можно указать совместимый API и оплачивать токены. Пошаговая настройка есть в статье Codex без подписки ChatGPT.
403 появился после смены модели. Что проверить?
Список разрешённых моделей у ключа. Новую модель нужно добавить в него, иначе шлюз вернёт model_not_allowed_for_key.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- JetBrains AI Assistant не работает: причины и обходные путиAI Assistant не активируется, молчит или недоступен в отдельных файлах. Разбираем причины по документации JetBrains и подключаем свои модели через шлюз.
- Invalid API key в opencode: почему ключ не принимается и как проверитьОшибка Invalid API key в opencode почти всегда сводится к четырём причинам. Проверяем ключ отдельно от opencode и находим, где ломается цепочка.
- Cursor не работает: разбор частых проблем и как их исправитьCursor завис, пишет Reconnecting или не отвечает. Идём от простых причин к сложным и отдельно разбираем проблемы со своим ключом и шлюзом.
- Лимиты Cursor AI: как устроены и что делать, когда закончилисьЛимит в Cursor — это расход включённого объёма, а не число сообщений. Разбираем, что его съедает и четыре способа продолжить работу, когда он кончился.