Ошибка 429 в OpenAI API: rate limit и insufficient_quota

В этой статье

Если запрос к api.openai.com вернулся с HTTP 429, сначала прочитайте error.type, error.code, сообщение и заголовки ответа. Временное ограничение скорости допускает повтор с паузой. Исчерпанные кредиты, предел расходов и назначенная квота требуют исправления на стороне API-аккаунта. Сам статус 429 не говорит, какой из этих случаев перед вами.

Два ответа с одним статусом

Условный ответ A — HTTP 429 с заголовком Retry-After: 3:

{
  "error": {
    "message": "Too many requests",
    "type": "rate_limit_error",
    "param": null,
    "code": "slow_down"
  }
}

Здесь поток запросов вырос слишком резко. Уберите всплеск, подождите не меньше трёх секунд и выполните один запрос, если бюджет повторов ещё не исчерпан. Три секунды — значение заголовка этого примера, а не универсальный таймер.

Условный ответ B — тоже HTTP 429:

{
  "error": {
    "message": "You exceeded your current quota",
    "type": "insufficient_quota",
    "code": "credit_balance_exhausted"
  }
}

Здесь у организации закончились предоплаченные API-кредиты. Остановите повторы и проверьте предоплату именно той организации, от имени которой ушёл запрос. Повторение запроса не создаст кредитов. Одного type=insufficient_quota для выбора исправления недостаточно: смотрите конкретный error.code.

С подпиской личного ChatGPT эта диагностика не связана: Plus и API оплачиваются отдельно. Если вы используете ChatGPT как помощника для разбора кода и хотите оформить Plus из России, сервис оплаты зарубежных сервисов Amber Market предлагает месячный ChatGPT Plus на своём аккаунте через менеджера. Заказ можно оплатить через СБП. Аккаунт должен быть Free без действующей подписки; продление оформляют после её окончания. Актуальные условия и итоговую стоимость проверьте перед оплатой. Такая покупка не пополняет API-кредиты и не меняет квоту организации — причину 429 она не устраняет.

Rate limit: ограничьте поток и повторы

OpenAI rate limit — ограничение скорости использования API. Запросы в минуту (RPM) и токены в минуту (TPM) учитываются независимо: редкие, но большие запросы могут превысить TPM, а множество маленьких — RPM. При slow_down проблема бывает именно в резком росте нагрузки, даже если минутные показатели ещё укладываются в пределы. Это различие описано в справочнике ошибок OpenAI.

Посмотрите, какой предел указан в сообщении, и сопоставьте его с лимитами своей модели, организации и проекта в панели API. Общей численной квоты для всех ключей нет.

Затем проверьте, сколько попыток создаёт одна операция. SDK может повторить запрос сам, HTTP-обёртка — повторить ещё раз, а очередь — поставить новую попытку после ошибки. Для сервера это быстро растущий поток.

Для временной ошибки настройте один согласованный механизм повторов:

  1. При корректном Retry-After ждите не меньше указанного времени.
  2. Если заголовка нет или его значение некорректно, увеличивайте паузу после неудачи и добавляйте небольшой случайный разброс — exponential backoff с jitter.
  3. Ограничьте число попыток и суммарное время ожидания. Учитывайте встроенные повторы SDK в этом бюджете.
  4. Подавайте запросы в очередь равномерно и уменьшите параллелизм. Повтор без снижения потока вернёт вас к той же ошибке.

Такой порядок приведён в рекомендациях OpenAI по 429. Добавлять внешний цикл повторов, не проверив поведение SDK, — плохая точка старта. Сначала выясните, кто уже повторяет запрос.

Quota: баланс, назначенная квота или бюджет

В сообщениях API словом quota могут обозначаться разные ограничения. Поэтому insufficient_quota нельзя автоматически переводить как «надо пополнить баланс».

error.code Что закончилось или достигнуто Следующий шаг
credit_balance_exhausted Предоплаченные кредиты организации Проверить выбранную API-организацию и её баланс; ответственному за оплату — пополнить кредиты в рамках бюджета
organization_usage_limit_exceeded Квота использования, назначенная организации OpenAI Владельцу организации — запросить повышение одобренной квоты или обратиться в поддержку
organization_spend_limit_exceeded Настраиваемый предел расходов организации Владельцу настроек — проверить расходы и при согласованном бюджете повысить соответствующий предел
project_spend_limit_exceeded Настраиваемый предел расходов проекта Владельцу настроек проекта — проверить его расходы и при согласованном бюджете повысить предел проекта

Назначенная OpenAI квота и настраиваемые расходные пределы — разные ограничения. Увеличение бюджета проекта не повышает одобренную квоту организации. Различия между кодами и действия для них указаны в таблице ошибок API.

Перед изменениями сопоставьте ключ, организацию и проект с теми, которые использует приложение. Смотреть баланс соседней организации удобно, но текущий запрос от этого не заработает. Если доступа к нужным настройкам нет, передайте код ошибки их владельцу.

Для расходного предела есть и вариант без увеличения бюджета: остановить нагрузку до ежемесячного сброса лимита. Не отключайте все ограничения расходов вслепую. Изменения пределов могут применяться с задержкой; повторный запрос до их применения ничего не исправит. Эти условия описаны в справке OpenAI об ограничениях.

Как проверить исправление

После снижения нагрузки, пополнения кредитов или изменения нужного ограничения выполните один контрольный запрос с теми же организацией, проектом и моделью. Для проверки через короткий скрипт подойдёт разбор первого запроса к GPT API на Python.

Первый критерий: контрольный запрос больше не возвращает 429. Если он завершился успешно, плавно возвращайте рабочую нагрузку и следите за ответами. Один успешный запрос ещё не подтверждает, что API выдержит всю накопленную очередь.

Не рассчитывайте на мгновенное применение платежа или нового предела. Если 429 остался, снова прочитайте код. Например, смена credit_balance_exhausted на rate_limit_error означает, что теперь нужно разбирать скорость потока. Если пришла другая ошибка, диагностируйте её прежде, чем возвращать нагрузку.

Для обращения в поддержку сохраните точное сообщение, type, code, время с часовым поясом, модель, организацию, проект и request ID. Добавьте сведения о том, что уже изменили. API-ключ для разбора не нужен: в логи и обращение его не включайте.

Источники

Есть следующая задача?Ещё по теме «Работа с API» →