Проверьте статус

GET /v1/jobs возвращает до 50 заданий владельца ключа в его проекте. Для продолжения передайте after=next_cursor. GET /v1/jobs/ID возвращает одно задание. Нужен ключ с правом jobs:read.

Сохраните ID из ответа на генерацию в KVANTORA_JOB_ID. Запрос ниже только читает статус и не запускает генерацию повторно.

curl "$KVANTORA_BASE_URL/v1/jobs/$KVANTORA_JOB_ID" \
  -H "Authorization: Bearer $KVANTORA_API_KEY"
status Что происходит
queued Принято, средства зарезервированы
running Отправлено или ожидает внешнего результата
storing Результат сохраняется и проверяется
succeeded Приватный результат и списание подтверждены
cancelled Отменено до отправки, резерв освобождён
failed Задание завершилось ошибкой; проверяйте billing
unknown Исход отправки или доставки результата уточняется; без результата резерв вернётся на баланс автоматически

Billing содержит estimated_cost_microrub и cost_microrub. Null в cost_microrub означает, что списание не подтверждено; не считайте его нулевой стоимостью.

Восстановление потерянного результата

Если модель уже ответила, а результат не дошёл до вас (сбой хранилища или проверки файла, истёкшая ссылка), платформа восстанавливает его сама из сохранённых данных и повторного опроса того же задания. Платная генерация второй раз не отправляется, повторять запрос не нужно. Пока идёт восстановление, в задании есть поле recovery (status: recovering, attempts, next_attempt_at, deadline_at), а списания нет.

Если срок восстановления вышел (до часа для изображений, звука и текста, до трёх часов для видео и 3D), деньги возвращаются автоматически. Задание получает status: failed, error.code: result_not_delivered и billing.status: released: результат не доставлен по вине платформы, платить за него не нужно.

Платите только за то, что получили. Если вы заказали 10 изображений, а доставлено 9, спишется стоимость 9 по тарифу карточки, а остаток резерва вернётся на баланс в той же операции. Если не доставлено ничего, резерв возвращается полностью.

Получите результат или отмените задание

После succeeded используйте output.file_id по инструкции для файлов. До этого состояния не считайте результат готовым. При unknown продолжайте проверять прежнее задание и сохраняйте его ID для поддержки.

POST /v1/jobs/ID/cancel отменяет только задание до отправки запроса модели. Если резерв истёк до отправки (через 15 минут), задание само становится cancelled с error.code: request_expired. После возможной платной отправки ответ 409; это не повод повторять генерацию с новым ID. Повтор отмены безопасен.

Сервис сохраняет результат и связь с приватным файлом. После перезапуска он продолжает проверять то же задание, не отправляя платный запрос заново. Подробнее об уведомлениях: webhooks.