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 を失敗タスクの ID へ置き換えます。retry には、retry-<sourceTaskId>-1 などの Idempotency-Key を必ず送ります。なければダブルクリックやネットワーク再試行で、課金対象が 2 件作られます。

再試行するのは failed と expired です。過去の canceled 記録は読み取り可能で、互換性のため再試行もできますが、新しいタスクはユーザー操作でその状態にはなりません。成功すると 新しい queued タスクを作り、HTTP 200(createTask の 202 ではありません)、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**で、元の保持期間を引き継ぎます。retry の X-Spicy-Retention は無視されます。
  • 元の input をそのまま使います。小さい Base64 画像も含め、SpicyAPI のアップロードは 1 日保持されます。その後の再試行は 400 になるため、再アップロードし createTask で新規作成します。
  • Idempotency-Key の範囲は元タスクと再試行操作です。同じ元タスクへ同じキーを送ると、同じ新タスクを返し、追加作成しません。

再試行が拒否される場合

retry がエラーを返すと、予約も課金も行いません。

応答理由対処
404元が存在しないか、別の API キーで作られた作成したキーを使う
409元が succeeded(別の生成には createTask が必要)、まだ queued・running、または精算未完了settled: true の failed・expired まで待つ。別の生成は createTask を使う
409プロンプト保持期間の経過か内容の破棄により、元の入力がない元の要求を createTask で再送する
400参照アップロードが期限切れ、または保存したコールバック URL が現在の検証に通らない再アップロード、または有効な callBackUrl を使い、createTask で送る
402残高不足、または支出上限に到達課金を参照

ネットワークエラーはタスク失敗ではありません

createTask の応答前に接続が切れた場合、元の Idempotency-Key で createTask を再送します。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 は参照を再アップロードする必要があります。入力を変えて createTask を使ってください。タスク失敗コードを参照します。

このページの内容