kosareva.cloud

Rate limit exceeded: что значит ошибка 429 и как её убрать

Запрос не отклонён навсегда: вы просто послали их больше, чем разрешено за минуту. Разбираем, где лежит лимит и как под него подстроиться.

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

Что это значит

Rate limit exceeded — это ответ с кодом 429: за последнюю минуту от вашего ключа пришло больше запросов или токенов, чем разрешает тариф. Сам запрос корректный, его просто не приняли в этот момент. Через несколько секунд тот же запрос обычно проходит.

У OpenAI лимит считается отдельно по запросам в минуту (RPM), токенам в минуту (TPM) и запросам в день (RPD) и растёт с уровнем аккаунта: новый аккаунт получает самый низкий. У Anthropic и Google логика та же, цифры свои. Отдельный случай — 429 с текстом insufficient_quota: это не частота, а закончившиеся деньги, и ждать здесь бесполезно.

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

/ Почему

Откуда берётся ошибка

  • Слишком много запросов в минуту с одного ключа: параллельные воркеры, цикл без задержки, несколько сервисов на одном ключе.
  • Слишком много токенов в минуту: несколько длинных контекстов подряд выбирают TPM быстрее, чем RPM.
  • Низкий уровень аккаунта у поставщика: лимиты растут по мере оплаченной суммы и возраста аккаунта.
  • Insufficient quota под видом 429: баланс или предоплата исчерпаны, лимит частоты ни при чём.
  • Лимит конкретной модели: у новых и дорогих моделей квоты ниже, чем у старых.
/ Что делать

Порядок действий

01

Прочитайте тело ответа

В JSON есть поле type или code. rate_limit_exceeded — частота, insufficient_quota — деньги. От этого зависит всё остальное.

02

Добавьте повтор с растущей паузой

Первая пауза 1–2 секунды, каждая следующая вдвое длиннее, не больше пяти попыток. В официальных SDK это есть: параметр max_retries.

from openai import OpenAI
client = OpenAI(max_retries=5)  # экспоненциальные повторы встроены
03

Уважайте заголовок Retry-After

Если он есть в ответе, ждите ровно столько секунд, сколько в нём написано, а не свою паузу.

04

Сократите нагрузку

Меньше параллельных потоков, короче контекст, очередь вместо залпа. Для пакетных задач подойдёт batch-режим или ночной прогон.

05

Поднимите лимит

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

/ По инструментам

Где это чинится в разных инструментах

  • Cursor, Cline, Continue. Ошибку показывает сам редактор в чате. Подождите минуту и повторите; если повторяется на каждом запросе, проблема в ключе или балансе, а не в частоте.
  • Python и Node.js SDK. Ловите исключение RateLimitError и не пишите свой цикл повторов, пока не выставили max_retries.
  • n8n и Make. Включите в ноде Retry On Fail с паузой 5–10 секунд и ограничьте параллельность сценария.
  • LangChain. Оберните вызов в with_retry() или задайте max_retries у модели.
/ FAQ

Частые вопросы

Почему 429 приходит на первом же запросе?

Скорее всего это не частота, а квота: в тексте будет insufficient_quota или «exceeded your current quota». Нужно пополнить баланс у поставщика.

Помогает ли второй ключ на том же аккаунте?

Нет: лимит у OpenAI считается на организацию или проект, а не на ключ. Второй ключ делит тот же лимит.

Сколько ждать перед повтором?

Если в ответе есть Retry-After, столько секунд, сколько там написано. Если нет, начните с одной секунды и удваивайте.

/ На kosareva.cloud

Как это выглядит у нас

Через наш шлюз лимит частоты один на ваш ключ и заметно выше стартового у поставщика, потому что квота общая на весь сервис. Если 429 всё же пришёл, тело ответа проброшено без изменений, повторы в SDK работают как обычно. Баланс в рублях виден в кабинете, и 429 из-за пустого счёта вы увидите заранее по уведомлению о низком балансе.

Ключ, который работает из России

OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.

Получить ключ