spicyapiДокументация
Справочник
Основное содержимое

Принятые задачи и повторные попытки

Почему принятую задачу генерации нельзя отменить и как безопасно повторять неудачные или истёкшие задачи.

После принятия createTask задача генерации зафиксирована и не может быть отменена. Правило действует в queued и running: начатую генерацию нельзя надёжно остановить, поэтому SpicyAPI не предоставляет локальное действие, которое объявило бы отмену, пока работа и её стоимость продолжаются.

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

До отправки проверьте модель, входные данные и ожидаемую стоимость. Закрытие браузера, уход со страницы и удаление API-ключа не останавливают принятую задачу.

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

Повторная попытка заново запускает завершённую неудачную задачу: создаёт новую с той же моделью, input и URL обратного вызова без повторной отправки исходного тела. Новая задача оплачивается как обычная: при принятии оценённая сумма резервируется, списывается только при успехе.

POST /api/v1/jobs/retry
curl -X POST https://api.spicyapi.ai/api/v1/jobs/retry \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: retry-order-8814-1" \
  -d '{"taskId":"job_01k3m8x9q2z4v7n5p6r8s0t1w3"}'

Замените пример taskId идентификатором своей неудачной задачи. Всегда передавайте Idempotency-Key с retry, например retry-<sourceTaskId>-1: без него двойной клик или сетевой повтор создадут две оплачиваемые задачи.

Повторять следует только failed и expired. Исторические canceled остаются читаемыми и допускают повтор ради совместимости, но новые задачи не переходят в это состояние действием пользователя. Успех создаёт новую задачу в очереди и возвращает HTTP 200, а не 202, как createTask, с code: 200:

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "job_01k3mnewtask",
    "sourceTaskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.08",
    "deadlineAt": "2026-08-28T10:12:04Z"
  },
  "request_id": "req_01k3mretry"
}

Опрашивайте или ожидайте новый taskId, а не исходный; см. Асинхронные задачи.

  • Исходная задача остаётся терминальной и неизменной.
  • sourceTaskId новой задачи указывает исходную, сохраняя цепочку повторов.
  • Заново проверяются текущие схема, цена, права и баланс. Повтор — новая задача: новая очередь и независимая обработка.
  • Обратный вызов отправляется на тот же callBackUrl, срок хранения наследуется от исходной задачи; заголовок X-Spicy-Retention у retry игнорируется.
  • Повтор точно использует исходный input. Загруженные в SpicyAPI референсы, включая небольшие Base64-изображения, сохраняемые как загрузки, живут один день. Затем повтор возвращает 400: загрузите файл заново и создайте задачу через createTask.
  • Idempotency-Key действует в области исходной задачи и действия повтора. Тот же ключ той же исходной задачи возвращает уже созданную новую задачу вместо другой.

Когда повтор отклоняется

При ошибке retry ничего не резервируется и не списывается.

ОтветПричинаЧто сделать
404Исходной задачи нет или она создана другим API-ключомИспользуйте создавший её ключ
409Исходная задача succeeded (новой генерации нужен createTask), ещё queued или running либо расчёт не завершёнДождитесь failed или expired с settled: true; для другой генерации используйте createTask
409Вход больше не хранится: срок промпта истёк или содержимое уничтоженоОтправьте исходный запрос через createTask
400Загрузка истекла или сохранённый URL обратного вызова больше не проходит проверкуЗагрузите файл заново или задайте допустимый callBackUrl, затем используйте createTask
402Недостаточно баланса или достигнут лимит расходовСм. Оплата

Сетевая ошибка не равна неудачной задаче

Если соединение createTask прервалось до ответа, повторите createTask с исходным Idempotency-Key. Используйте retry только для существующей задачи с подтверждённым терминальным состоянием.

Состояния и действия

Текущее состояниеЧто можно сделать
queued / runningЖдать терминального результата; отмена невозможна
succeededЧитать или скачать результат; для другой генерации создать новую задачу
failed / expiredПовторить с созданием отдельно оплачиваемой задачи
историческое canceledЧитать или повторить запись; новая отмена пользователем недоступна

До повтора смотрите errorCode. rate_limited, upstream_unavailable и upstream_failed стоит повторить; timeout и generation_failed могут закончиться так же. При invalid_request, unsupported_combination и content_rejected тот же ввод снова не сработает; при invalid_asset нужен новый upload референса. Измените вход и используйте createTask. См. Коды ошибок задачи.

На этой странице