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

Отказы

Отказы задач

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

КодАдресКогда
400 /api/v1/jobs/createTask Тело запроса — не разбираемый JSON.
401 /api/v1/jobs/createTask Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 /api/v1/jobs/createTask Свободных кредитов меньше, чем удерживается под задачу.
403 /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 — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается. Тот же код — если во входе наша ссылка на готовый результат старше 14 дней: файла уже нет, его нужно загрузить заново. И если модель не может выполнить именно это сочетание полей: в сообщении сказано, что поменять, — например, другие файлы-образцы.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ, больше 50 незавершённых задач на аккаунте либо таймаут: за час 5 запросов к моделям этого вида отклонены из-за чувствительной темы, и запуск всех моделей этого вида приостановлен. У такого отказа в теле есть поле timeout с временем окончания паузы, а в заголовке Retry-After — секунды до него.
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 не целое число или меньше единицы. Значение больше потолка модели отказа не даёт: шлюз ставит потолок модели.
400 invalid_setting Настройка запроса с негодным значением: штраф вне границ от −2 до 2, reasoning_effort не из списка minimal, low, medium, high, пустое стоп-слово или больше четырёх стоп-слов. В сообщении назван сам параметр. Негодные temperature и top_p отказа не дают: шлюз их не передаёт; уровень рассуждения, которого нет у модели, заменяется ближайшим.
400 key_required Названный заголовком учёта ключ не принадлежит аккаунту или отключён. При вызове по ключу Bearer такого отказа не бывает.
400 result_link_expired Во входе стоит наша ссылка на готовый результат, а срок её вышел: результаты хранятся 14 дней. Ссылка названа в сообщении. Загрузите файл заново. Запрос не тарифицируется: к модели он не уходил.
400 invalid_request Модель отказала по самому запросу: например, не принимает поле или приложенный файл. В сообщении — её слова. Повтор того же запроса не пройдёт, поправьте то, что названо. Запрос не тарифицируется.
400 — Тело запроса не разобралось как JSON. Проверьте, что отправляете правильно составленный объект.
401 invalid_api_key Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 insufficient_credits На балансе не осталось свободных кредитов. Перед вызовом шлюз проверяет только это — сумма списывается после ответа, по факту.
403 forbidden Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте.
413 invalid_request Запрос слишком велик для модели: много или тяжёлые файлы, длинная переписка. Запрос не тарифицируется.
413 — Тело запроса больше предела в 512 КиБ.
415 — Не тот тип содержимого. Заголовок Content-Type должен быть application/json.
422 invalid_request Модель не смогла обработать запрос в таком виде. В сообщении — её слова. Запрос не тарифицируется.
429 concurrent_request Другой запрос этого аккаунта ещё считается. Пока на балансе 50 кредитов или меньше, текстовые запросы выполняются по одному: списание приходит после ответа, и одновременные запросы увели бы счёт в минус. Дождитесь ответа или пополните баланс.
429 — Больше 60 запросов в минуту на один ключ.
502 upstream_error Поставщик не ответил или ответил ошибкой. Запрос не тарифицируется: списывать нечего, ответа не было.
503 service_overloaded Поставщик перегружен или отбил запрос по своему лимиту. Запрос не тарифицируется, повторить можно через несколько секунд — срок назван в заголовке Retry-After.
503 upstream_error Модель временно недоступна у поставщика. Запрос не тарифицируется.

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

Отказы моделей решений

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

КодcodeКогда
400 model_not_found Имени из поля model нет среди моделей решений. В сообщении перечислено, что принимается.
400 invalid_state Поле state не передано или пустое. Данные принимаются строкой, объектом или списком.
400 invalid_questions Поле questions не передано или пустое, либо вопрос задан не по схеме: не назван вид (choice, noul, score, box), пустое поле instructions, у choice нет объекта вариантов или их больше 255, у score нет списка ступеней или их больше 10, у noul в criteria нет одного из полей true и false. Тот же отказ приходит на вопрос box к модели, которая на него не отвечает: box отвечает только jev/1-14. В сообщении назван сам вопрос.
400 invalid_image Картинка передана не так: ссылкой http(s), в формате кроме PNG и JPEG, строкой base64 без приставки data:image/…;base64, частью input_image или полями assets и images. В сообщении названо место в запросе и показано, как передать картинку.
400 key_required Названный заголовком учёта ключ не принадлежит аккаунту или отключён. При вызове по ключу Bearer такого отказа не бывает.
400 invalid_request Модель отказала по самому запросу. В сообщении — её слова. Запрос не тарифицируется.
401 invalid_api_key Ключа нет в заголовке Authorization, либо он неверный или отключён.
402 insufficient_credits На балансе не осталось свободных кредитов. Перед вызовом шлюз проверяет только это — сумма списывается после ответа, по факту.
403 forbidden Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте.
413 invalid_request Запрос слишком велик для модели. Запрос не тарифицируется.
422 invalid_request Модель не смогла обработать запрос в таком виде. В сообщении — её слова. Запрос не тарифицируется.
429 concurrent_request Другой запрос этого аккаунта ещё считается. Пока на балансе 50 кредитов или меньше, текстовые запросы выполняются по одному: списание приходит после ответа, и одновременные запросы увели бы счёт в минус. Дождитесь ответа или пополните баланс.
502 upstream_error Поставщик не ответил или ответил ошибкой. Запрос не тарифицируется: списывать нечего, ответа не было.
503 service_overloaded Поставщик перегружен или отбил запрос по своему лимиту. Запрос не тарифицируется, повторить можно через несколько секунд — срок назван в заголовке Retry-After.

Сверх 600 запросов в минуту с одного ключа шлюз отвечает 429 в своём виде: {"statusCode":429,"error":…,"message":…} — объекта error в таком ответе нет.

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