Перейти к основному содержанию

Лимиты OpenAI API: как исправить 429, сначала определив владельца ограничения

A
14 мин чтенияAPI Guides

Ошибка 429 в OpenAI API быстрее всего чинится не повтором запроса, а определением владельца ограничения. Сначала проверьте x-ratelimit headers и страницу Limits, затем решите: ждать reset, снижать concurrency, резать token budget, чинить billing или менять route.

Лимиты OpenAI API: как исправить 429, сначала определив владельца ограничения

Ошибка 429 в OpenAI API обычно ломает работу не потому, что разработчик не знает термина rate limit, а потому, что одно и то же число 429 скрывает несколько разных владельцев проблемы. Иногда вы упираетесь в слишком частые запросы. Иногда в слишком тяжелые prompt plus output. Иногда в квоту, биллинг или usage budget. Иногда запрос уходит не в тот project, model или organization. А иногда проблема вообще принадлежит ChatGPT, Codex или стороннему gateway, а не Platform API.

Поэтому самый быстрый честный путь выглядит так: сначала определить владельца ограничения, затем посмотреть reset signal, после этого выбрать минимальное действие. Пока вы не знаете owner, любые покупки кредитов, rotation keys или более агрессивные retry loop остаются гаданием.

Русскоязычная выдача по 429 часто смешивает официальную справку OpenAI, Reddit, неофициальные зеркала документации и обсуждения insufficient_quota. Из-за этого вопрос "что делать" быстро превращается в хаотичный выбор между sleep, billing, новым ключом и сменой продукта. Практический runbook должен разорвать эту смесь.

Короткий ответ

ВопросКороткий ответ
Что обычно означает 429 в OpenAI API?Текущий API route превысил request limit, token limit, quota, billing boundary, scope или reset window.
Что проверять первым?x-ratelimit headers и страницу Limits в аккаунте.
Кто чаще всего владеет технической проблемой?Burst traffic, избыточная concurrency, слишком большой token budget.
Кто чаще всего владеет нетехнической проблемой?Недостаточная квота, billing issue, trial boundary, неправильный product surface.
Что сделать до запроса higher limits?Уменьшить concurrency, добавить exponential backoff с jitter, сократить token output, вынести background work в queue или Batch API.
Чего не делать вслепую?Не ротировать ключи, не спамить retries, не считать кредиты эквивалентом throughput и не путать ChatGPT/Codex лимиты с Platform API.

Сначала владелец ограничения, потом retry loop

Полезный первый вопрос звучит не как "какой лимит у OpenAI API", а как "какой лимит сработал на этом запросе". Request-rate owner и token-rate owner обе возвращают 429, но ведут к разным исправлениям. Quota или billing owner тоже может выглядеть как rate problem, но backoff там не лечит корень. Неверный project, org, model или endpoint могут делать вид, что речь о capacity, хотя в реальности проблема в scope.

Официальные материалы OpenAI задают понятную рамку: live limits принадлежат странице Limits, usage tiers влияют на headroom, headers помогают понять, сколько бюджета осталось и когда откроется окно, а mitigation начинается с bounded retry, а не с brute-force resend.

Практический порядок из четырёх шагов:

  1. Прочитать owner.
  2. Прочитать reset.
  3. Применить самое маленькое безопасное исправление.
  4. Эскалировать только после того, как route, billing и traffic shape уже доказанно стабильны.

Если ваш реальный вопрос связан с org, project или ключами, идите в OpenAI API Key и Organization ID. Если вы на самом деле разбираете окна Codex или подписочный продукт, правильные соседние страницы — OpenAI Codex usage limits и Codex API key vs subscription.

Что именно измеряют лимиты OpenAI

OpenAI не описывает лимиты как одно фиксированное число, одинаковое для всех. Для реальной эксплуатации важны несколько измерений:

  • Requests per minute: слишком много вызовов в коротком окне.
  • Tokens per minute: слишком большой суммарный объём prompt plus output.
  • Usage tier: уровень аккаунта влияет на доступный headroom.
  • Live account limits: реальный потолок живёт на странице Limits, а не в старой таблице из статьи.
  • Reset signals: headers могут сказать, когда окно откроется снова.

Отсюда следует неприятная, но полезная вещь: универсальные статьи с точными RPM/TPM цифрами опасны как главная опора. Они превращают живую account boundary в якобы вечную истину. Безопаснее использовать публичные документы для понятий и шаблонов смягчения, а Limits page — как контракт текущего аккаунта.

Разделение request pressure и token pressure особенно важно. RPM problem чаще приходит от burst, tight loop и слишком высокой concurrency. TPM problem появляется, когда prompt history слишком длинная, max output завышен, контекста слишком много или каждый отдельный вызов дороже, чем кажется. Если эти случаи не разъединить, вы рискуете лечить не ту причину.

Даже средние расчёты по минуте не гарантируют безопасность: quantized windows могут сработать раньше, чем ваше "в среднем мы укладываемся". Поэтому график трафика важен не меньше среднего числа запросов.

Прочитайте response прежде, чем менять код

Cookbook и rate-limit guide сходятся в одной привычке: сначала читайте response. Любой failed retry продолжает расходовать budget. Поэтому blind repetition превращает одиночный limit event в длинную cooldown spiral.

Наиболее полезные headers:

  • x-ratelimit-limit-requests
  • x-ratelimit-remaining-requests
  • x-ratelimit-reset-requests
  • x-ratelimit-limit-tokens
  • x-ratelimit-remaining-tokens
  • x-ratelimit-reset-tokens

Карта чтения headers: лимиты запросов, лимиты токенов, reset timers и страница Limits проверяются отдельно

Эти сигналы говорят больше, чем просто текст ошибки:

СигналЧто он обычно означаетПервое действие
remaining-requests около нуляСлишком высокая частота или concurrencyСнизить parallelism, сгладить burst, добавить backoff
remaining-tokens около нуляPrompt и output слишком дорогиеСократить payload, уменьшить expected output
Reset короткийRoute вероятно корректен, нужно переждать окноПодождать reset plus jitter
В Limits мало headroomПотолок принадлежит аккаунту или routeСначала оптимизировать, потом думать о higher limits
Headers нормальные, но ошибка остаётсяВероятны scope, billing, wrapper или endpoint issuesПроверить project, org, model и product surface

На практике лучше логировать статус, error body, endpoint, model, project context и x-ratelimit значения так, чтобы сравнивать инцидент между попытками. Это защищает от ложных воспоминаний.

Минимальная схема классификации может выглядеть так:

ts
const resetRequests = res.headers.get("x-ratelimit-reset-requests"); const resetTokens = res.headers.get("x-ratelimit-reset-tokens"); const remainingRequests = res.headers.get("x-ratelimit-remaining-requests"); const remainingTokens = res.headers.get("x-ratelimit-remaining-tokens"); const owner = remainingRequests === "0" ? "requests" : remainingTokens === "0" ? "tokens" : "unknown"; // Если важны оба окна, используйте более поздний reset.

Здесь не нужна идеальная система с первого раза. Нужна достаточная доказательная база, чтобы не уйти в неверную ветку.

Диагностируйте owner, а не только статус-код

После response и страницы Limits следующий шаг — классификация.

1. Request-rate owner

Это классический burst problem. Слишком много одновременных вызовов, слишком плотный цикл или агрессивные повторные попытки. Обычно видно низкий remaining-requests, короткое reset window и паттерн одновременных запросов. Исправление почти всегда связано с traffic shaping, а не с billing.

2. Token-rate owner

Этот owner часто недооценивают, потому что число запросов кажется умеренным. Но каждый запрос дорогой. Длинная история, oversized system prompt, высокий max output, неоправданный контекст и длинные ответы быстро съедают TPM. В этой ветке throughput лечится не покупкой, а сокращением token budget.

3. Quota или billing owner

Здесь retry path становится почти бесполезным. Если у аккаунта нет доступной квоты, billing unhealthy или закончился релевантный trial state, вы уже не боретесь с per-minute window. Нужно проверять account availability: кредит, способ оплаты, статус биллинга, лимит бюджета. Если вопрос на самом деле про кредиты и пробный доступ, смотрите OpenAI API free trial.

4. Project, organization или model scope owner

Синтаксис запроса может быть правильным, а route — нет. У разных project и model могут быть разные профили лимитов и доступа. Неправильный organization context или скопированный config из другого окружения легко маскируется под throughput issue.

5. Wrong product surface owner

Это один из самых дорогих по времени сценариев. Разработчики путают OpenAI Platform API с ChatGPT, Codex или wrapper-level limits. Подписка ChatGPT не обязана исправлять API 429. Окно Codex usage — не то же самое, что throughput Platform API. Совместимый gateway может добавить собственные ограничения, даже если underlying model совместима с OpenAI.

Этот разрыв меняет не формулировку, а владельца следующего шага.

Исправляйте трафик маленькими безопасными действиями

Когда owner уже известен, начинайте с минимального исправления. Публичные рекомендации OpenAI и Cookbook сходятся вокруг bounded backoff with jitter, а не немедленного resend.

Практическая лестница обычно такая:

  1. Подождать reset, если route иначе выглядит корректным.
  2. Снизить concurrency, если проблема в burst.
  3. Добавить exponential backoff с jitter.
  4. Уменьшить prompt и expected output, если pressure лежит в токенах.
  5. Вынести не срочную работу в queue или Batch API.
  6. Просить более высокие лимиты только после стабилизации route и traffic shape.

Лестница смягчения OpenAI API 429: классификация owner, concurrency, backoff, trim tokens, batch, request higher limits

Главная ошибка в коде — относиться к backoff как к украшению. Retry path должен затихать после каждой новой ошибки. Базовый шаблон:

ts
const base = 500; // ms const max = 15000; for (let attempt = 0; attempt < 6; attempt += 1) { const wait = Math.min(max, base * 2 ** attempt); const jitter = Math.random() * 0.25 * wait; await sleep(wait + jitter); }

Для TPM pressure часто дешевле всего сократить token output: уменьшить max output, сократить историю, убрать лишние блоки контекста. Если workload не требует мгновенного ответа, лучше рассматривать queue или Batch API, чем продолжать давить synchronous path.

Повышайте throughput только после устойчивых доказательств

Многие команды слишком рано переходят к higher limits. Это маскирует архитектурную проблему и не даёт понять, стабилизировалась бы система сама после исправления трафика.

Эскалация уместна, если одновременно верно всё следующее:

  • route корректен;
  • billing здоровый;
  • owner известен;
  • retries уже ограничены;
  • prompt и output budget разумны;
  • workload по-прежнему требует больше sustained capacity.

Только тогда usage tier и запрос на limit increase становятся частью решения. Публичные документы OpenAI объясняют общую механику, но фактическая точка управления остаётся в Limits page вашего аккаунта.

Перед запросом повышения полезно собрать evidence pack:

  • какой model и endpoint используется;
  • какая request и token pressure реально наблюдается;
  • как ведут себя reset windows;
  • какой профиль concurrency у трафика;
  • что уже было оптимизировано;
  • почему queue или Batch API недостаточно.

Такой пакет нужен не только для внешнего запроса. Он защищает саму команду от преждевременного вывода "нам просто нужно больше лимита".

Stop rules

Некоторые действия настолько привычны и настолько вредны, что их проще назвать отдельным чек-листом запретов.

Stop rules для OpenAI API 429: безопасный retry отделён от quota, billing, scope и неправильной поверхности продукта

Не делайте это по умолчанию:

  • Не ротируйте ключи. Если limit owner остался тем же аккаунтом, project или route, смена ключа не чинит проблему.
  • Не покупайте кредиты, не проверив throughput. Кредиты могут решить quota или billing, но не поднимут автоматически RPM или TPM.
  • Не обновляйте ChatGPT или Codex plan ради Platform API 429. Это разные поверхности.
  • Не копируйте точные цифры из старых tutorials как текущую правду. Live limits принадлежат странице Limits.
  • Не повторяйте запросы вслепую. Failed retries тоже сжигают budget.

Полезная рабочая таблица:

Если проблема вДелайте дальше
Request burstСнижайте parallelism и добавляйте jitter
Token pressureУрезайте prompt и output size
Коротком reset windowЖдите и повторяйте безопасно
Billing или quotaЧините состояние аккаунта
Project или model scopeИсправляйте route и scope
Не API поверхностиВыходите из API-статьи и переключайтесь на правильный продукт

Последняя строка важнее, чем кажется. Если реальный вопрос звучит как "почему Codex или ChatGPT перестал принимать работу", то этот runbook уже не ваш.

FAQ

Что означает 429 в OpenAI API?

Это означает, что текущий API route превысил request, token, quota, billing, scope или reset-window boundary. Начинайте с классификации, а не с общего retry.

Где смотреть точные текущие лимиты OpenAI API?

На странице Limits в аккаунте. Публичные документы нужны для понятий и headers, а живой ceiling — это свойство вашего аккаунта и route.

Дают ли кредиты автоматически больше throughput?

Нет. Они важны только тогда, когда owner — quota или billing. Они не повышают автоматически request-rate и token-rate ceilings.

Могут ли ChatGPT Plus, Pro или подписка Codex исправить Platform API 429?

Нет. Потребительские планы и продуктовые окна Codex — отдельные контракты относительно Platform API throughput.

Когда помогает Batch API?

Когда работа не срочная. Если ответ не нужен синхронно, batching снижает нагрузку на живой request path и обычно лучше подходит, чем бесконечный realtime loop.

Когда уже уместно просить higher limits?

После того как route корректен, billing здоровый, retry path ограничен, token budget разумен, а workload всё ещё требует большей устойчивой ёмкости.

Практический вывод

Самое быстрое честное исправление OpenAI API 429 — не "попробовать позже" и не "что-нибудь обновить". Это "понять владельца ограничения, прочитать reset signal и сделать минимальное безопасное действие". Если owner — requests, сгладьте burst. Если owner — tokens, сократите payload. Если owner — billing или quota, чините аккаунт. Если owner — scope, переходите к правильному project, organization, model или endpoint. А если задача не срочная, не заставляйте её жить в synchronous path, когда queue или Batch API подходят лучше.

Поделиться:

laozhang.ai

Один API, все модели ИИ

AI Изображения

Gemini 3 Pro Image

$0.05/изобр.
-80%
AI Видео

Sora 2 · Veo 3.1

$0.15/видео
Async API
AI Чат

GPT · Claude · Gemini

200+ моделей
Офиц. цена
Обслужено 100K+ разработчиков
|@laozhang_cn|$0.1 бонус