Seedance の冪等送信と障害復旧
Seedance の冪等送信と障害復旧 — Idempotency-Key, HTTP 409, acceptance_unknown.
Seedance の冪等送信と障害復旧
seedance-2.0、seedance-2.0-fast、seedance-2.0-mini、seedance-2.5 の生成要求に Idempotency-Key を付けます。対象は POST /v1/videos、POST /v1/videos/generations、POST /v1/video/generations で、キーの名前空間は共通です。画像生成、見積もり、remix と他の動画モデルは対象外です。キーなしの要求には汎用的な重複防止保証がありません。
範囲とキー
キーは APIMaster アカウント内の Seedance 動画生成操作に属し、API Key やモデルごとではありません。新しい生成ごとに 8–128 文字の可視 ASCII からなるランダムな新規キーを使います。同じアカウントの有効な認証キーで検索できます。残高を使い切ったトークンでも既存記録の検索・再取得は可能ですが、失効・無効化・削除済みキーや停止アカウントは不可です。新規生成には有効な認証と十分な割り当てが必要です。
原子的な再取得と競合
経路選択、課金、生成サービスへの接続前にデータベースへ原子的に記録します。同じキーと内容は HTTP 202 で元の記録と事前割当タスク ID を返し、同時再試行や再起動でも再送信・再引き当てしません。内容変更は HTTP 409(idempotency_conflict)です。JSON のオブジェクト順と空白は無視しますが、配列順、数値、省略と明示した既定値、モデル、通知、経路グループ・指定チャネルは区別します。multipart の境界とファイル名は無視し、ファイル内容と順序を比較します。元の本文と経路を維持し、JSON と multipart を混用しないでください。記録は最低 30 日保持し、本版は自動削除やキー再利用を行いません。
応答
初回は通常の作成応答です。X-Video-Submission-Id、要求 ID、タスク ID を保存します。再取得は受付記録であり初回と同じ応答形式とは限りません。事前割当 ID は上流の受付を証明しません。accepted は生成完了ではありません。task_ready=true の場合だけ元のタスクを検索し、それ以外は再送せずサポートへ連絡します。
送信状態
pending:ゲートウェイに記録済み、未送信。submitting:送信開始、結果待ち。accepted:上流タスク ID を受領。not_accepted:上流へ未送信、修正後に新規キーで作成可能。acceptance_unknown:受付の可能性があるが確認なし、再生成禁止。障害で残った記録は 30 分後の検索で送信前なら not_accepted、送信後なら acceptance_unknown になります。自動再送はしません。送信状態と課金状態は異なり、既存の引き当て・精算・返金照合は継続します。
復旧手順
タイムアウトや 5xx 後はタスク ID がなくても元のキーで検索します。同一キー・同一内容の再取得は安全ですが失敗した送信を再開しません。404、空の一覧、課金ログなしでは未受付を証明できません。元の要求が通信中、キーなし、機能導入前の場合があります。same_key_replay_safe は記録再取得を意味し、new_submission_safe=true は not_accepted のみです。不明または accepted かつ task_ready=false なら記録/要求 ID、モデル、UTC 時刻をサポートへ伝え、API Key は送らないでください。上流の冪等性は保証せず、公式 API への同ヘッダー送信にもこの保証はありません。旧人物素材記録は従来の再取得手順と旧形式を維持します。
使用例
curl --fail-with-body 'https://apimaster.ai/v1/videos' \
-H "Authorization: Bearer $APIMASTER_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: seedance-order-20261014-001' \
-d '{"model":"seedance-2.0","prompt":"A paper boat on a pond","duration":4,"resolution":"480p","generate_audio":false}'
curl --fail-with-body 'https://apimaster.ai/v1/video-submissions/by-key' \
-H "Authorization: Bearer $APIMASTER_KEY" \
-H 'Idempotency-Key: seedance-order-20261014-001'
{
"code": 200,
"data": {
"submission_id": "HASH",
"task_id": "task_PUBLIC_ID",
"request_id": "ORIGINAL_REQUEST_ID",
"model": "seedance-2.0",
"status": "accepted",
"task_ready": true,
"created_at": 1791936000,
"updated_at": 1791936001,
"next_action": "query_task",
"same_key_replay_safe": true,
"new_submission_safe": false,
"retention": "at_least_30_days_no_automatic_key_reuse"
}
}
curl --fail-with-body 'https://apimaster.ai/v1/videos/task_PUBLIC_ID' \
-H "Authorization: Bearer $APIMASTER_KEY"
curl --fail-with-body 'https://apimaster.ai/v1/videos/task_PUBLIC_ID/billing' \
-H "Authorization: Bearer $APIMASTER_KEY"
