Документация

Отказы

Отказы задач

Тело отказа одно на все случаи: {"code":…,"msg":…,"data":null}. Задача, не дошедшая до результата, не тарифицируется — удержанные кредиты возвращаются целиком.

КодАдресКогда
400 /api/v1/jobs/createTask Тело запроса — не разбираемый JSON.
401 /api/v1/jobs/createTask Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 /api/v1/jobs/createTask Свободных кредитов меньше, чем удерживается под задачу.
413 /api/v1/jobs/createTask Тело запроса больше 512 КиБ.
415 /api/v1/jobs/createTask Тело отправлено не как application/json или заголовок Content-Type не передан.
422 /api/v1/jobs/createTask Поле model пустое или его имени нет в каталоге, input — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
500 /api/v1/jobs/createTask Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.
401 /api/v1/jobs/recordInfo Ключа нет в заголовке Authorization, либо он неверный или отключён.
404 /api/v1/jobs/recordInfo Задачи с таким номером нет или она создана другим аккаунтом.
422 /api/v1/jobs/recordInfo Параметр taskId не передан.
429 /api/v1/jobs/recordInfo Больше 300 запросов в минуту на один ключ.
500 /api/v1/jobs/recordInfo Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Отказы текстовых моделей

Тело отказа — объект error, как у OpenAI: {"error":{"message":…,"type":…,"code":…,"param":null}}. Ни один из этих отказов не тарифицируется: деньги списываются только после ответа модели, и возвращать после отказа нечего.

КодcodeКогда
400 model_not_found Имени из поля model нет среди текстовых моделей. В сообщении перечислено, что принимается.
400 invalid_messages Поле messages не передано, пустое или не массив.
400 invalid_max_tokens Поле max_tokens не целое число либо вне границ от 1 до 128000.
400 invalid_setting Настройка запроса с негодным значением: temperature вне границ от 0 до 2 (у Claude до 1), top_p вне границ от 0 до 1, штраф вне границ от −2 до 2, reasoning_effort не из списка minimal, low, medium, high, пустое стоп-слово или больше четырёх стоп-слов. В сообщении назван сам параметр.
400 key_required Названный заголовком учёта ключ не принадлежит аккаунту или отключён. При вызове по ключу Bearer такого отказа не бывает.
400 Тело запроса не разобралось как JSON. Проверьте, что отправляете правильно составленный объект.
401 invalid_api_key Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 insufficient_credits На балансе не осталось свободных кредитов. Перед вызовом шлюз проверяет только это — сумма списывается после ответа, по факту.
413 Тело запроса больше предела в 512 КиБ.
415 Не тот тип содержимого. Заголовок Content-Type должен быть application/json.
429 Больше 60 запросов в минуту на один ключ.
502 upstream_error Поставщик не ответил или ответил ошибкой. Запрос не тарифицируется: списывать нечего, ответа не было.
503 service_overloaded Поставщик перегружен или отбил запрос по своему лимиту. Запрос не тарифицируется, повторить можно через несколько секунд — срок назван в заголовке Retry-After.
503 upstream_error Модель временно недоступна у поставщика. Запрос не тарифицируется.

Тем же статусом 503 отвечает вызов модели, недоступной у поставщика, — с кодом upstream_error. Он тоже не тарифицируется. Отказы, которые формируются до маршрута (тело не разбирается, Content-Type не тот, тело больше предела, превышена частота), приходят на этом адресе в своём виде: {"statusCode":…,"error":…,"message":…} — объекта error в них нет.

Неудача самой генерации отказом не считается: запрос состояния при этом успешен, а причина лежит в полях failCode и failMsg — их таблица в разделе Как устроена задача.