ДокументацияОшибки API

Ошибки API

Справочник API

Zukko отвечает на ошибки обычным HTTP-статусом и JSON-телом в формате OpenAI. Разбирайте ошибку по status и error.code, а не по тексту: текст собственных ошибок Zukko на русском и может меняться.

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

json
{
  "error": {
    "message": "Модель 'gpt-5.4' снята с обслуживания. Используйте 'gpt-5.6-sol' — актуальный список: GET /v1/models. Поддержка — https://t.me/zukkopro?direct, напишите, пожалуйста.",
    "type": "invalid_request_error",
    "code": "model_retired",
    "param": "model"
  }
}
  • error.message есть всегда;
  • error.code — у всех ошибок Zukko, кроме 401;
  • error.type и error.param — там, где применимо.

К каждому сообщению об ошибке в конце дописывается строка поддержки: «Поддержка — https://t.me/zukkopro?direct, напишите, пожалуйста.» У 401 есть ещё поле верхнего уровня "type": "error" и error.type: "authentication_error". У 403 email_unverified поля message и code продублированы и на верхнем уровне.

2Коды ошибок

СтатусКодКогдаПовторять?
400model_retiredмодель снята с обслуживания; в сообщении — на какую перейтинет, смените модель
400invalid_jsonтело не JSON (GLM, веб-поиск, изображения)нет, исправьте запрос
400invalid_requestвеб-поиск без queryнет
400invalid_request_errorизображения: нет prompt или images для edit-моделинет
400unknown_glm_modelнеизвестная модель GLMнет
401— (authentication_error)ключа нет, он с опечаткой или отозваннет
402insufficient_balanceна балансе меньше $0.01 (для изображений — меньше цены картинки)после пополнения
403email_unverifiedemail не подтверждёнпосле подтверждения
403model_not_allowed_for_keyмодели нет в списке разрешённых для этого ключанет
404model_not_foundмодели нет в каталоге; запрос не уходит к провайдеру и не оплачиваетсянет, исправьте имя по GET /v1/models
404not_foundнесуществующий путьнет
405method_not_allowedневерный HTTP-методнет
413payload_too_largeтело запроса больше 32 МБнет, уменьшите запрос
422idempotency_conflictIdempotency-Key уже использован с другим теломнет, новый ключ
429key_daily_limit_reachedисчерпан дневной лимит ключапосле 00:00 UTC или поднимите лимит
429key_monthly_limit_reachedисчерпан месячный лимит ключас нового месяца (UTC) или поднимите лимит
429код провайдералимит на стороне провайдера моделида, с паузой
502upstream_unreachableпровайдер модели не ответилда, с паузой
502web_search_failedвеб-поиск не выполнилсяда
502image_generation_failedгенерация изображения не удаласьда
503model_disabledмодель временно выключенанет, возьмите другую из GET /v1/models
503provider_unavailableпровайдер модели временно недоступенда, с паузой или другой моделью
503maintenanceтехнические работы, есть заголовок Retry-After: 600да, через Retry-After секунд
503image_provider_unavailable, image_provider_busyсервис изображений недоступен или перегруженда, позже
504image_generation_timeoutгенерация изображения заняла больше 3 минутда

Собственного ограничения частоты запросов у Zukko нет. 429 от Zukko — это только лимиты ключа, которые вы задали сами. Любой другой 429 пришёл от провайдера модели.

3Ошибки провайдера

Ошибки, которые вернул провайдер модели, Zukko отдаёт с тем же статусом и текстом — например, превышение контекста или неверный параметр. Исключения:

  • если провайдер ответил 402, клиент получает 503 provider_unavailable — это не ваш баланс;
  • если текст ошибки ничего не объясняет, Zukko заменяет его своим: для 5xx — «Провайдер модели временно недоступен, повторите запрос позже», для 4xx — «Провайдер модели отклонил запрос, проверьте параметры»;
  • к ошибкам 5xx Zukko дописывает список моделей, которые сейчас работают.

500 с телом {"error": "Internal server error"} означает сбой на стороне Zukko — повторите запрос и, если не помогло, напишите в поддержку.

4Ошибки внутри потока

При stream: true статус 200 приходит раньше, чем ответ модели. Если ошибка случилась уже после этого, она придёт внутри потока событием с полем error. Проверяйте события потока, а не только HTTP-статус. Поток, в котором была только ошибка — без текста и без usage, — не оплачивается. Подробнее — Стриминг.

5Как повторять запросы

  • повторяйте 429 от провайдера, 500, 502, 503 (кроме model_disabled) и 504 с экспоненциальной паузой;
  • при 503 maintenance ждите столько секунд, сколько указано в Retry-After;
  • остальные 4xx не повторяйте — исправьте запрос, ключ или баланс;
  • добавляйте заголовок Idempotency-Key: повтор уже выполненного запроса вернёт сохранённый ответ и не спишет деньги второй раз. Отправляйте повтор после того, как первый запрос завершился, — см. идемпотентность.
Ошибки API · Документация Zukko