Основы API

Коды ошибок API

Формат и коды ошибок открытого API ZroImg: авторизация, нехватка баллов, лимиты запросов и задач, конфликт идемпотентности, параметры, ресурсы, сбои и стратегия повторов.

На этой странице

Формат ошибки

При неудачном запросе API возвращает код состояния 4xx или 5xx и тело ответа:

json
{
  "error": {
    "code": "invalid_request",
    "message": "Модель gpt-image-2 не поддерживает соотношение сторон 21:9",
    "type": "invalid_request_error"
  }
}
ПолеОписание
codeСтабильный код ошибки — по нему программа должна определять тип ошибки
messageПонятное человеку описание (пока на китайском); текст может меняться, поэтому не используйте его в логике программы
typeОбщая категория ошибки: invalid_request_error, authentication_error, rate_limit_error или api_error

Список кодов ошибок

HTTP-кодcodeЗначениеЧто делать
400invalid_requestПараметр отсутствует или имеет неверный формат, режим/соотношение сторон/качество не поддерживаются, не удалось скачать референс или его адрес небезопасенИсправьте параметры по message; не повторяйте запрос без изменений
401invalid_api_keyКлюч не передан, неверен, истёк или отозван либо аккаунт заблокированПроверьте заголовок Authorization, при необходимости создайте новый ключ
402insufficient_pointsНедостаточно баллов; задача не создана, баллы не списаныКупите баллы и повторите запрос
403invalid_signatureПодпись ссылки на скачивание результата недействительна или истеклаЗаново вызовите GET /tasks/{id}, чтобы получить новую ссылку
404model_not_foundМодель не существует, отключена или её тип не соответствует методуЗаново запросите список моделей
404task_not_foundЗадача не существует или не принадлежит текущему аккаунтуПроверьте ID задачи
404file_not_foundФайл результата удалёнВосстановить нельзя — сгенерируйте заново
409idempotency_conflictЗапрос с тем же Idempotency-Key ещё обрабатываетсяПодождите несколько секунд и повторите с тем же значением
429rate_limitedПревышен лимит запросов в минутуПодождите время из заголовка ответа Retry-After и повторите
429concurrency_limitДостигнут лимит одновременно выполняемых задачПодождите время из Retry-After (10 секунд) или дождитесь завершения текущих задач, затем отправляйте новые
500server_errorВнутренняя ошибка сервераПовторите позже; для методов отправки передавайте тот же Idempotency-Key
502upstream_errorСбой внешнего сервиса (например, не удалось улучшить промпт; баллы возвращены)Повторите позже

Стратегия повторов

  • Можно повторять: 409, 429, 500, 502 и сетевые тайм-ауты. Используйте экспоненциальную задержку (например, 2, 4, 8 секунд); для 429 в первую очередь ориентируйтесь на Retry-After.
  • Не повторяйте: 400, 401, 402, 403, 404 — сначала исправьте запрос.
  • При повторе отправки используйте тот же `Idempotency-Key` — тогда, даже если первый запрос на самом деле прошёл успешно, вторая задача не будет создана и баллы не спишутся повторно. См. Идемпотентная отправка.

Ошибки задач и ошибки API

Ответ 202 метода отправки означает лишь, что задача создана. Проблемы, возникшие во время генерации, не возвращаются как HTTP-ошибки, а отражаются в самой задаче: GET /tasks/{id} возвращает status: "failed" и error.message. Баллы за неудавшиеся задачи возвращаются автоматически.