Обновлено: · по официальной документации IETF, OpenAI, Anthropic, Google
Два разных случая с одним кодом
Временный лимит: превышено число запросов или токенов в минуту. Ошибка проходит сама, если сделать паузу. Провайдеры считают лимиты на организацию или проект, поэтому новый ключ в том же проекте обычно не помогает.
Исчерпанная квота или баланс: у OpenAI это insufficient_quota и credit_balance_exhausted, у Anthropic — достигнутый месячный лимит расходов (без заголовка retry-after). Такой 429 не пройдёт, пока вы не пополните баланс или не поднимете лимит.
Как отличить по ответу
Смотрите тип и код ошибки в теле ответа, а не только статус. Заголовок Retry-After (RFC 9110) задаётся в секундах или датой — клиент должен понимать оба формата. У Anthropic есть заголовки anthropic-ratelimit-*, у OpenAI — x-ratelimit-remaining-requests и x-ratelimit-reset-tokens: по ним видно, какой лимит закончился.
Что делать в коде
Повторяйте только временные ошибки: 429 с Retry-After, 500, 503, 529. Ограничьте число попыток, добавляйте случайную задержку, не вкладывайте повторы SDK внутрь своих повторов — иначе нагрузка растёт лавиной. Неудачные запросы тоже засчитываются в минутный лимит.
Снижайте частоту: очередь с ограничением параллельности, батчи, разумный max_tokens. Если трафик резко вырос, наращивайте его постепенно — у Anthropic и OpenAI есть отдельные лимиты на ускорение.
Если 429 приходит через API429
API429 — тоже API, и он тоже может вернуть 429, если запросов слишком много для выбранной модели. Обрабатывайте его так же: Retry-After и повтор с паузой. Тем же ключом можно сразу отправить запрос в другую модель — поменяйте только поле model. Баланс у всех моделей общий, пополняется картой РФ, по счёту или в USDT/TON.
Повтор запроса с Retry-After: пример на Python
import email.utils, os, random, time, requests
URL = "https://gateway.api429.com/v1/chat/completions"
HEADERS = {"Authorization": "Bearer " + os.environ["API429_API_KEY"]}
TRANSIENT = {429, 500, 503, 529}
def retry_after(value):
if not value:
return None
if value.isdigit():
return int(value)
return max(0, email.utils.parsedate_to_datetime(value).timestamp() - time.time())
def chat(payload, attempts=5):
for attempt in range(attempts):
r = requests.post(URL, headers=HEADERS, json=payload, timeout=120)
if r.status_code not in TRANSIENT:
r.raise_for_status()
return r.json()
wait = retry_after(r.headers.get("Retry-After"))
time.sleep(wait if wait is not None else min(60, 2 ** attempt) + random.random())
r.raise_for_status()Частые вопросы
Что означает ошибка 429 в API?
Сервер ограничивает частоту запросов: за единицу времени вы отправили больше запросов или токенов, чем позволяет лимит. Дождитесь времени из Retry-After или повторите запрос с растущей паузой.
Почему 429 не проходит после паузы?
Скорее всего, это не лимит частоты, а исчерпанная квота или баланс: insufficient_quota у OpenAI, месячный лимит расходов у Anthropic, 402 Insufficient Balance у DeepSeek. Здесь нужно пополнить счёт.
Поможет ли новый API-ключ?
Обычно нет: у Gemini, OpenAI и Anthropic лимиты считаются на проект или организацию, а не на ключ.
Как правильно повторять запрос?
Только для временных ошибок, с ограничением попыток, экспоненциальной паузой и случайной добавкой. Если есть Retry-After — ждите не меньше указанного.
Источники
- www.rfc-editor.org/rfc/rfc6585
- www.rfc-editor.org/rfc/rfc9110
- developers.openai.com/api/docs/guides/rate-limits
- platform.claude.com/docs/en/api/rate-limits
- ai.google.dev/gemini-api/docs/rate-limits
Что дальше
- OpenAI API через API429
- Сравнение цен OpenAI API
- Модель Claude Sonnet 5.5
- Интеграция n8n HTTP Request
- Каталог моделей
- Быстрый старт
- Gemini API 429 RESOURCE_EXHAUSTED
Другие ошибки API
- Gemini API: ошибка 503 UNAVAILABLE
- Gemini API: регион не поддерживается
- Claude API: ошибка 429 rate_limit_error
- Claude API: ошибка 529 overloaded_error
- Claude API: страна не поддерживается
- OpenAI API: ошибка 429 insufficient_quota
- OpenAI API: страна не поддерживается (403)
- DeepSeek API: ошибка 402 Insufficient Balance