API リファレンス

動画

POST/v1/videos
GET/v1/videos/{task_id}
GET/v1/videos/{task_id}/content

非同期の動画生成(Seedance、Kling、Veo、Wan、Grok Imagine …)。/v1/videos は、テキストから動画と画像から動画の入力を OpenAI 形式の 1 つのリクエストで受け付けます。ポーリング用の task_id を返します — または送信時に Webhook を登録できます。

#リクエストパラメーター

  • modelstring必須

    モデルページにある動画モデルの ID(例:doubao-seedance-2.5)。

  • promptstring必須

    シーンの説明。image2video では動きの方向を指定します。

  • imagestring任意

    image2video のみ:開始フレームの画像(URL または base64)。

  • imagesarray任意

    1 つのタスクで複数の画像を受け付けるベンダー向けの参照フレーム。

  • durationnumber任意

    クリップの長さ(秒) — 料金ティアの軸の 1 つです。対応値はモデルカードを参照してください。

  • secondsnumber任意

    一部のモデルファミリーがクリップの長さに使うエイリアス。duration を優先して使用してください。

  • resolutionstring任意

    モデルが対応している場合の出力解像度ティア(720p や 1080p など)。

  • sizestring任意

    幅 x 高さ形式のサイズを使うモデルファミリー向けの、アスペクト比またはサイズの指定。

  • webhook_urlstring任意

    タスクが終了状態になったときに呼び出される HTTPS URL — コールバックの仕様は動画ガイドを参照してください。

  • webhook_secretstring任意

    設定すると、配信に X-Xiaoxiang-Signature: sha256=hex(HMAC-SHA256(body, secret)) が付きます。

ベンダーパラメーターのパススルー

モデルファミリーはベンダー独自の追加パラメーター(aspect_ratio、cfg_scale、negative_prompt …)を受け付け、そのまま転送されます — 詳細はモデルカードに記載されています。不明なフィールドはゲートウェイではなく上流で拒否されます。

失敗したタスクは自動で返金

動画タスクは送信時に事前課金され、failed で終了した場合は全額返金されます — 台帳には元の課金にひも付けて返金が記録されます。

#実行中のタスクをキャンセル

DELETE/v1/videos/:task_id

終了状態に達していないタスクを停止します。成功すると確保済みの利用枠が返金され、タスクは理由 "cancelled by user" の failed として記録され、登録済みの Webhook は task.failed として送信されます。

大半のプロバイダーはキャンセル不可

キャンセルは上流プロバイダーに転送されますが、対応しているのは一部だけです。それ以外は 501 task_cancel_not_supported を返します。UI ではキャンセルをベストエフォートとして扱い、ポーリングを続け、この呼び出しが 200 を返すまではユーザーに返金を約束しないでください。
curl -X DELETE https://www.aisplice.store/v1/videos/task_xxx \
  -H "Authorization: Bearer sk-YOUR_KEY"
cancelled.json
{
  "id": "task_xxx",
  "task_id": "task_xxx",
  "status": "cancelled"
}

"cancelled" はこのレスポンスにしか現れない点に注意してください。後でポーリングすると、タスクは failed と報告されます。移行先の状態がそれだからです。

  • 404 task_not_exist不明なタスク ID か、別のアカウントのものです。
  • 409 task_not_cancellableタスクはすでに終了しています — 停止するものはありません。
  • 501 task_cancel_not_supportedこのプロバイダーはキャンセル API を提供していません。

エラーコード一覧 →

#既存の動画をリミックス

POST/v1/videos/:video_id/remix

対応モデルで、完成した動画を新しいプロンプトで再生成します。送信するのは prompt だけです:モデル、長さ、解像度、料金の要素はすべて元のタスクから引き継がれ、リクエストは元の動画を生成したチャネルに固定されます。

curl https://www.aisplice.store/v1/videos/task_xxx/remix \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: remix-of-task_xxx" \
  -d '{"prompt": "Same shot, at night"}'
remix.json
{
  "task_id": "task_yyy",
  "status": "queued",
  "remixed_from_video_id": "task_xxx"
}

リミックスは新しい課金対象タスク

料金は元のタスクと同じで、同じライフサイクルに従い、独自の task_id を返します。新しい ID をポーリングしてください — 元のタスクには影響しません。
  • 400 invalid_requestリミックスには prompt が必須です。
  • 400 task_not_existソース動画の ID が不明か、別のアカウントのものです。
  • 400 task_channel_disable元の動画を生成したチャネルは現在無効になっています。

エラーコード一覧 →

#関連するエラー

  • 404 not_found不明なパス、不明なモデル名、または期限切れか他アカウントの task_id です。
  • 422 unprocessable_entityゲートウェイが転送したパラメーター値をベンダーが拒否しました(対応していないサイズや長さなど)。
  • 401Bearer トークンが無効か、ありません。このパスでは error.code が付きません — ステータスで判定してください。
  • 402 insufficient_user_quotaウォレット残高が事前確保の見積額に足りません。
  • 429キー単位のレート制限です。ボディは空なので、Retry-After の時間だけ待ってください。insufficient_user_quota が付いた 429 は、レート制限ではなく 1 日の利用上限額によるものです。
  • 503 model_not_found不明なモデルか、現在そのモデルを提供できる正常なチャネルがありません。

エラーコード一覧 →

#リクエスト例

# submit
curl https://www.aisplice.store/v1/videos \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "doubao-seedance-2.5", "prompt": "A drone shot of a lighthouse at dawn"}'

# poll every 5s
curl https://www.aisplice.store/v1/videos/$TASK_ID -H "Authorization: Bearer sk-YOUR_KEY"

# download when completed
curl -L https://www.aisplice.store/v1/videos/$TASK_ID/content -o out.mp4 -H "Authorization: Bearer sk-YOUR_KEY"

#レスポンス

response.json
// POST — submit accepted
{"task_id": "task_xxx", "status": "queued"}

// GET /v1/videos/{task_id}
{
  "task_id": "task_xxx",
  "status": "in_progress",      // queued | in_progress | completed | failed
  "progress": "45%"
}

// terminal state
{
  "task_id": "task_xxx",
  "status": "completed",
  "metadata": {"url": "https://…"}
}

まだ解決しませんか?

リクエスト ID かエラーメッセージを送っていただければ、こちらで調査します。