Ошибки и ретраи
Единый формат, коды, стратегия повторов
Ошибки всегда возвращаются с HTTP-статусом и единым JSON-телом. Сохраняйте request_id — он поможет нам и вам найти запрос в логах.
Формат ошибки
json
Справочник кодов
invalid_request400retry: noОтсутствуют поля, неверные типы, слишком длинный promptinvalid_api_key401retry: noНет/невалидный/отозванный/просроченный ключforbidden403retry: noДоступ запрещён — чужая организация или недостаточно правnot_found404retry: noМодель или ресурс не найденыcontent_filter400retry: noЗапрос/ответ заблокирован фильтром безопасностиrate_limited429retry: yes (backoff)RPM или квота кредитов исчерпанаinsufficient_credits402retry: noНулевой баланс, пополните счётprovider_error502retry: yesОшибка на стороне upstream-провайдераtimeout504retry: yesПровайдер не ответил в разумное времяservice_unavailable503retry: yesВременная недоступность — повторите позжеСтратегия ретраев
Повторяйте только безопасные коды (429, 502, 503, 504) с экспоненциальным backoff и джиттером.
python
Идемпотентность
Для гарантированно-однократной записи (например, списания) отправляйте заголовок Idempotency-Key: <uuid>. Повторный запрос с тем же ключом вернёт тот же ответ без дополнительной тарификации.
http
Клиенты
openai и anthropic SDK автоматически добавляют экспоненциальный backoff и Idempotency-Key. Если используете их — ретраи уже в комплекте.