# Ошибки Codex 401, 429 и Stream Disconnected: найдите слой отказа

> Последняя строка ошибки Codex — это симптом. Установите маршрут аккаунта и provider, найдите первый отказ и только после этого меняйте состояние или повторяйте запрос.

- URL: https://blog.laozhang.ai/ru/posts/codex-exceeded-retry-limit-429
- Published: 2026-08-22
- Updated: 2026-09-01
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ru/about)
- Topic: ChatGPT и OpenAI
- Tags: Codex, 401 Unauthorized, 429 Too Many Requests, Stream Disconnected

---
Сбой Codex может закончиться разными строками:

```text
exceeded retry limit, last status: 429 Too Many Requests
stream disconnected before completion
exceeded retry limit, last status: 401 Unauthorized
```

Они не доказывают одну общую причину. `401` означает, что конкретный маршрут отклонил аутентификацию. `429` означает ограничение запросов, баланса, расходов или использования в каком-то сервисе. `stream disconnected` сообщает лишь о том, что поток ответа не завершился. А `exceeded retry limit` объясняет, почему клиент прекратил попытки, но не называет виновника.

Поэтому не начинайте с удаления auth-файла, выпуска нового ключа, увеличения timeout или повторного запуска большой задачи. Сначала зафиксируйте маршрут и первую полезную ошибку.

## Две команды до любых изменений

Для CLI выполните read-only проверки:

```bash
codex --version
codex login status
```

Запишите версию, точное время с часовым поясом, интерфейс Codex, модель, полный текст ошибки и `request ID`, если он виден. `codex login status` показывает метод аутентификации, но не доказывает, что все downstream-разрешения действуют. При custom provider зафиксируйте активный provider и base URL без ключей и полного содержимого конфигурации.

Официальная [таксономия ошибок Codex App Server](https://learn.chatgpt.com/docs/app-server#errors) разделяет `Unauthorized`, upstream HTTP failure, `ResponseStreamConnectionFailed`, `ResponseStreamDisconnected` и `ResponseTooManyFailedAttempts`. Если известен upstream HTTP status, он может передаваться отдельно. Даже если интерфейс показывает только итоговую строку, эти классы полезно диагностировать отдельно.

## Какой маршрут владеет ошибкой

| Маршрут | Главные доказательства | Что нельзя подменять ими |
|---|---|---|
| Codex с ChatGPT login | активный аккаунт/workspace, Codex usage, результат в новой сессии | баланс и RPM/TPM Platform API |
| OpenAI API key | structured error, организация/проект, billing и limits, response headers | подписка ChatGPT Plus/Pro |
| Внешний provider/gateway | effective endpoint, provider account, gateway/upstream logs, trace ID | любая чужая панель OpenAI |

![Русская схема владельцев маршрута Codex, признаков 401, 429, обрыва потока и ограниченных действий с критерием восстановления](https://blog.laozhang.ai/posts/ru/codex-exceeded-retry-limit-429/img/route-owner-checklist.webp)

Сообщение «лимит ещё есть» бесполезно, если открыта панель аккаунта, который не обрабатывал запрос. Сначала свяжите способ входа, provider и проверяемую консоль в одну цепочку.

## 401: повторять нечего, пока не изменилось auth-состояние

Для OpenAI Platform API официальная [таблица ошибок](https://developers.openai.com/api/docs/guides/error-codes#api-errors) различает invalid authentication, неверный API key, отсутствие членства в организации и несовпадение IP allowlist. Конкретный `error.code`, организация и проект определяют действие.

При ChatGPT login проверьте, соответствует ли `codex login status` ожидаемому методу и аккаунту. Повторная аутентификация оправдана, когда сессия действительно недействительна или выбран не тот аккаунт. Но `codex logout` удаляет сохранённые credentials; это изменение состояния, а не безопасная диагностическая команда. [Официальное руководство по auth](https://learn.chatgpt.com/docs/auth#check-authentication-or-sign-out) отдельно отмечает workload identity, которой управляет среда процесса.

При API key убедитесь, что работающий процесс использует ключ того же endpoint, проекта и организации, которые вы проверяете. Не печатайте ключ, весь environment или `auth.json`. После исправления подтверждённого `invalid_api_key`, membership или IP policy выполните один короткий запрос. Стабильный 401 без изменения credentials или permissions не лечится backoff.

У внешнего gateway 401 может возникнуть на входе или быть ответом upstream. Сопоставьте request ID с логами. Если gateway принял клиентскую аутентификацию, но не прошёл upstream auth, ротация клиентского ключа исправляет не тот слой.

## 429: сначала прочитайте конкретный owner

В OpenAI Platform API 429 включает не только request-rate throttling. Документация также перечисляет depleted credits, organization/project spend limit и organization usage limit. Billing, spend и quota не восстанавливаются от повторов.

- Есть валидный `Retry-After` или явный request-rate code — снизьте concurrency, выждите указанный минимум и сделайте ограниченное число попыток.
- Есть `credit_balance_exhausted` — не повторяйте до изменения баланса нужной организации.
- Указан spend limit — проверьте тот же проект и организацию, которые отправили запрос.
- Ограничение отображается в ChatGPT/Codex account — следуйте условию восстановления именно этого аккаунта, не переносите его на API throughput.
- 429 пришёл от стороннего provider — смотрите его billing, quota, concurrency и logs.
- Видна только последняя строка Codex — сохраняйте время, route и request ID; фиксированное ожидание пока не обосновано.

Если один короткий последовательный запрос проходит, а параллельная работа падает, снизьте нагрузку и запишите порог. Это доказательство о форме workload, но не окончательный root cause. Если после снижения concurrency результат остаётся хаотичным, остановите тесты и откройте реальные логи gateway/provider.

## Stream disconnected: проверьте стадию обрыва

Поток может оборваться в клиенте, proxy/TLS inspection, управляемой сети, gateway, upstream-сервисе или при локальном переключении сети. Текст ошибки не доказывает, что виноват VPN или что OpenAI недоступен.

Сделайте один контролируемый сравнительный тест:

1. Новая сессия, тот же аккаунт, provider, модель и короткий запрос без секретов.
2. Отметьте: нет вывода совсем, есть частичный вывод или вернулся явный HTTP status.
3. Если политика разрешает, повторите тот же запрос один раз через другую доверенную сеть.
4. Сопоставьте время и request ID с provider/gateway logs.
5. Если сбой есть только в одной версии или клиенте, зафиксируйте различие и не меняйте ещё несколько переменных одновременно.

Успех в другой сети сужает область поиска, но не разрешает отключать корпоративные средства защиты. Одинаковый отказ в двух сетях усиливает необходимость проверить account, provider и текущие upstream-сигналы.

Не увеличивайте сразу `stream_idle_timeout_ms`. Timeout меняет время ожидания клиента, но не исправляет неверный base URL, устойчивый 401, исчерпанный баланс или соединение, которое gateway закрывает намеренно.

## Retry settings не меняют upstream

В Codex существуют настройки request retries, stream retries и stream idle timeout. [Текущий config reference](https://learn.chatgpt.com/docs/config-file/config-reference#configtoml) также указывает, что `model_providers` и provider/auth keys относятся к user-level configuration и игнорируются в project-local `.codex/config.toml`.

Эти параметры определяют поведение клиента после ошибки. Они не пополняют баланс, не обновляют permission и не меняют политику gateway. Большее число повторов может продлить детерминированный отказ, умножить запросы через многослойный gateway и скрыть первый полезный error.

Меняйте retries только после подтверждения временного rate/transport condition и с границей по числу попыток и общему времени. После изменения выполните один короткий запрос. Если первая ошибка вернулась, остановитесь.

## Что передать в поддержку

При устойчивом минимальном воспроизведении соберите:

![Доска диагностики слоёв Codex от клиента и авторизации до billing, gateway, upstream, transport и потока ответа с чек-листом поддержки](https://blog.laozhang.ai/posts/ru/codex-exceeded-retry-limit-429/img/failure-layer-board.webp)

- Codex version, CLI/App/IDE и ОС;
- auth method и provider без credentials;
- первое и последнее время отказа с time zone;
- стадия: до первого вывода или после частичного ответа;
- error category, HTTP status, `error.code`, request ID;
- одна сессия или все, одна модель или несколько;
- результат одного контролируемого сравнения;
- минимальный обезличенный фрагмент лога с первой ошибкой.

Не отправляйте API keys, tokens, authorization headers, полный auth/config, environment dump, приватный prompt или исходный код. Задача отчёта — связать request ID, время и provider, а не выгрузить состояние компьютера.

Критерий восстановления — короткий успешный запрос по исходному маршруту: тот же аккаунт, provider и клиент, поток завершился, первая ошибка больше не возникает. Успех после смены аккаунта, модели или сети — полезный обход, но не доказательство восстановления исходного пути.

## Источники

Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 2026-09-01.

- [таксономия ошибок Codex App Server](https://learn.chatgpt.com/docs/app-server) (learn.chatgpt.com)
- [таблица ошибок](https://developers.openai.com/api/docs/guides/error-codes) (developers.openai.com)
- [Официальное руководство по auth](https://learn.chatgpt.com/docs/auth) (learn.chatgpt.com)
- [Текущий config reference](https://learn.chatgpt.com/docs/config-file/config-reference) (learn.chatgpt.com)
