Принятые задачи и повторные попытки
Почему принятую задачу генерации нельзя отменить и как безопасно повторять неудачные или истёкшие задачи.
После принятия createTask задача генерации зафиксирована и не может быть отменена. Правило действует в queued и running: начатую генерацию нельзя надёжно остановить, поэтому SpicyAPI не предоставляет локальное действие, которое объявило бы отмену, пока работа и её стоимость продолжаются.
Принятую задачу нельзя отменить
До отправки проверьте модель, входные данные и ожидаемую стоимость. Закрытие браузера, уход со страницы и удаление API-ключа не останавливают принятую задачу.
Повторите терминальную задачу
Повторная попытка заново запускает завершённую неудачную задачу: создаёт новую с той же моделью, input и URL обратного вызова без повторной отправки исходного тела. Новая задача оплачивается как обычная: при принятии оценённая сумма резервируется, списывается только при успехе.
POST /api/v1/jobs/retrycurl -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. См. Коды ошибок задачи.
Контракт Spicy Schema
Общий формат запросов, единые поля, схема форм, асинхронный жизненный цикл, ошибки, хранение результатов и правила совместимости.
Диагностика и восстановление
Найдите свой симптом и узнайте, почему так происходит и что делать, — платежи, 401 и 403, баланс и лимиты, недоступные модели, задачи с ошибкой или зависшие задачи, загрузки, обратные вызовы и потоки.

