Отказы
Отказы задач
Тело отказа одно на все случаи: {"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 — их таблица в
разделе Как устроена задача.