К содержимому
Claude Code с 0:полный курс
Уровень 3 · Деньги, скорость и production 4 мин Проверено автором · 3 июл. 2026 г.

Ошибки и повторы: 429, 529 и таймауты

Коды ошибок API: 429 и 529 безопасно повторять с backoff, а 400 нужно чинить руками. Как отличить одно от другого.

Уровень 3 · 0 / 4 уроков0%

В продакшене запросы иногда падают — это нормально. Важно различать ошибки, которые надо чинить (повтор не поможет), и ошибки, которые надо переждать и повторить.

Карта кодов

  • 400 — плохой запрос: опечатка в параметре, неверный JSON, сообщения не чередуются user/assistant. Повтор бессмысленен — чини запрос.
  • 401 — проблема с ключом: не задан или неверный x-api-key. Чини конфиг (ключ живёт в переменной окружения, не в коде).
  • 429 — rate limit: слишком много запросов. Повторять можно — с задержкой (backoff). В ответе есть заголовок retry-after.
  • 500 / 529 — перегрузка на стороне Anthropic. Повторять с backoff.

Правило простое: 429 и 5xx — ретраить с нарастающей паузой; 400 и 401 — не ретраить, исправлять.

SDK уже умеет ретраить

Официальный SDK сам повторяет 429 и 5xx с экспоненциальным backoff. Лови типизированные исключения, а не текст ошибки:

import anthropic

try:
    resp = client.messages.create(
        model="claude-opus-4-8",
        max_tokens=1024,
        messages=[{"role": "user", "content": "..."}],
    )
except anthropic.BadRequestError:
    raise            # 400 — баг в запросе, чинить
except anthropic.RateLimitError:
    pass             # 429 — SDK уже ретраил; обработай очередь
except anthropic.APIError as e:
    log(e.status)    # прочее, в т.ч. 5xx

Про таймауты

Если просишь длинный ответ (большой max_tokens), обычный запрос может упасть по таймауту. Решение — стримить: client.messages.stream(...) + .get_final_message(). Поток держит соединение живым, пока модель пишет.

Заметка

stop_reason == «max_tokens» — это не ошибка, а сигнал: ответ оборвался, потому что упёрся в лимит. Подними max_tokens и повтори.

Практика в терминале

В тренажёре ниже сломай запрос нарочно: отправь его без заголовка x-api-key и рассмотри JSON ошибки аутентификации. Затем добавь ключ и повтори тот же запрос — почувствуй разницу между «чинить» и «ретраить».

Проверь себя

Отвечено 0/3
Режим:

Пришёл код 400. Что делать?

Какие коды безопасно повторять с backoff?

Запрос с большим max_tokens падает по таймауту. Что поможет?

Выполни задание в терминале и ответь на вопросы, чтобы завершить урок.

📝 Мои заметки

Сохраняется автоматически в этом браузере · видно на странице «Заметки».

Задание

Сломай запрос нарочно: отправь его без заголовка x-api-key и рассмотри JSON ошибки аутентификации. Потом добавь ключ и повтори — запрос должен пройти.

Tab дополнить · прошлые · Ctrl+L очистить · help команды

  • Не выполнено: Получи ошибку аутентификации (запрос без ключа)
  • Не выполнено: Почини запрос — добавь ключ и получи ответ

Вопросы и ответы по уроку

Пришёл код 400. Что делать?

400 — плохой запрос. Повтор того же запроса даст ту же ошибку. Нужно исправить тело запроса.

Какие коды безопасно повторять с backoff?

429 (rate limit) и 5xx (перегрузка) — временные, повтор с задержкой обычно проходит. 400/401 нужно чинить.

Запрос с большим max_tokens падает по таймауту. Что поможет?

Стриминг держит соединение живым, пока модель генерирует длинный ответ, и снимает риск таймаута.

Почитать по теме в блоге

Листай уроки клавишами · поиск по ⌘K