Seedance 2.0 API
非同期タスク作成、ステータス ポーリング、Web フック、クレジット認識課金により、ビデオ生成を製品に組み込みます。
https://api.seedance2.aiこのページで
はじめに
API を使用すると、Seedance 2.0 の動画生成タスクをプログラムで送信できます。生成は非同期です。タスクを作成し、すぐにタスク ID を受け取り、タスク エンドポイントをポーリングするか、Web フックを受信して完成した動画を取得します。
非同期タスク
ポーリングは、開発およびシンプルな統合に適しています。
Webhook対応
Web フックは、積極的なポーリングを回避し、タスクが最終状態に達したときにサービスに通知するため、本番環境での使用が推奨されます。
クレジット認識
クレジットは送信時に予約されます。成功したタスクは予約から課金されます。失敗またはタイムアウトしたタスクは自動的に返金されます。
認証
ダッシュボードでAPIキーを作成し、すべてのリクエストにBearerトークンとして送信します。完全なキーは作成時に一度だけ表示されます。
Authorization: Bearer sk_live_xxxxxxxx本番環境のトラフィックには sk_live_ キーを使用してください。
サンドボックス統合テストには sk_test_ キーを使用し、同じ API 契約を使用します。
欠落、無効、または取り消されたキーは、HTTP 401 とともに invalid_api_key を返します。
クイックスタート
最初にタスクを送信します。タスクが受け入れられたら、結果配信方法を 1 つ選択します。タスク エンドポイントをポーリングするか、Web フックを介して最終結果を受け取ります。
非同期ビデオタスクを作成し、すぐにタスクIDを受け取ります。
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'統合で明示的なポーリングが必要な場合は、タスクステータスエンドポイントをフェッチします。
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"タスク提出時に callback_url を渡し、完了または失敗のコールバックを受信して独自のタスクレコードを更新します。
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}ビデオタスクを作成する
POST /v1/videos/generations でビデオタスクを作成します。リクエスト本文には、トップレベルのモデル、オプションの callback_url、およびプロンプトと生成設定を含む入力オブジェクトが含まれています。
/v1/videos/generationscurl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'生成モード
generation_type は、どのメディア入力が受け入れられ、モデルがそれらをどのように解釈するかを制御します。
| モード | 必要なメディア | オプションのメディア | 注記 |
|---|---|---|---|
text-to-video | プロンプト | 期間、アスペクト比、解像度、シード | テキストプロンプトのみ。image_urls、video_urls、audio_urls は不要です。 |
image-to-video | プロンプト + image_urls 配列 (1~2個の画像URL) | 期間、アスペクト比、解像度、シード | image_urls は配列である必要があります。最初のフレーム用に 1 つの画像URL、または最初のフレームと最後のフレーム用に 2 つの画像URL を指定します。ビデオとオーディオは無視されます。 |
reference-to-video | プロンプト + 少なくとも1つの画像またはビデオ | 素材の制限内の画像、ビデオ、オーディオ | オーディオはテキスト単独では使用できません。オーディオを提供する場合は、少なくとも 1 つの画像またはビデオを追加してください。 |
text-to-videoプロンプトが唯一の創造的な入力である場合は、text-to-video を使用します。
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'image-to-videoinput.image_urls が 1~2 個の画像 URL を含む配列である場合は、image-to-video を使用します。1 つの URL は最初のフレームを設定し、2 つの URL は最初のフレームと最後のフレームを設定します。このモードでは、ビデオとオーディオの参照は無視されます。
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"input": {
"prompt": "the subject turns toward camera, soft studio motion",
"generation_type": "image-to-video",
"image_urls": ["https://your.cdn.com/first-frame.jpg"],
"duration": 5,
"resolution": "720p"
}
}'reference-to-video参照画像、ビデオ、オーディオを使用した豊富なディレクションには、reference-to-video を使用します。オーディオはテキスト単独で使用できません。オーディオを提供する場合は、少なくとも 1 つの画像またはビデオを含めてください。
素材の制限
- 最大9枚の参照画像
- 最大3本の参照ビデオ、合計時間15秒以下
- 最大3の参照オーディオ、合計時間15秒以下
- 全種類合計で最大12の素材
サポートされている入力の組み合わせ
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"input": {
"prompt": "use the product from image 1 and the camera motion from the reference video",
"generation_type": "reference-to-video",
"image_urls": ["https://your.cdn.com/product.jpg"],
"video_urls": ["https://your.cdn.com/camera-motion.mp4"],
"audio_urls": [],
"duration": 8,
"resolution": "1080p"
}
}'リクエストパラメータ
パラメータ名、Enum値、エンドポイントパス、および例は、API契約の一部です。以下の説明は、各フィールドがどのように動作するかを説明しています。
ヘッダー
| ヘッダー | 必須 | 説明 | 例 |
|---|---|---|---|
Authorization | はい | リクエストの認証に使用される ベアラAPIキー。 | Bearer sk_live_xxx |
Content-Type | はい | すべての書き込みリクエストは JSON を使用します。 | application/json |
トップレベルのフィールド
| フィールド | タイプ | 必須 | デフォルト | 範囲 / Enum | モード | 例 |
|---|---|---|---|---|---|---|
model生成に使用されるモデルバリアント。 | string | はい | - | seedance-2-0 | seedance-2-0-fast | すべて | seedance-2-0 |
callback_urlタスクの完了および失敗のコールバックを受信する HTTPS エンドポイント。 | string | いいえ | - | HTTPS URL、プライベートネットワークなし | すべて | https://your-domain.com/hook |
input生成設定とメディア参照。 | object | はい | - | - | すべて | - |
input.* フィールド
| フィールド | タイプ | 必須 | デフォルト | 範囲 / Enum | モード | 例 |
|---|---|---|---|---|---|---|
input.prompt作成する動画を説明するテキストプロンプト。 | string | はい | - | 空でないテキスト | すべて | a cat surfing |
input.generation_type生成モード。デフォルトはtext-to-video。 | string | いいえ | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urls一般公開されている画像URL。image-to-video の場合は、最初のフレーム用に1枚、または最初のフレームと最後のフレーム用に2枚の画像を送信します。reference-to-video の場合は、視覚的な参照として最大9枚の画像を送信します。 | string[] | 条件付き | [] | Image-to-video: 1または2枚の画像。Reference-to-video: 最大9枚の画像。 (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsreference-to-video のみでパブリックにアクセス可能な参照ビデオ。最大3つのビデオファイルを送信でき、合計再生時間は15秒以下である必要があります。 | string[] | いいえ | [] | 最大3本の動画。合計動画長は15秒以下である必要があります。 | reference-to-video | [] |
input.audio_urlsreference-to-video のみでパブリックにアクセス可能な参照オーディオファイル。最大3つのオーディオファイルを送信でき、合計再生時間は15秒以下である必要があります。 | string[] | いいえ | [] | 最大3つのオーディオファイル。合計オーディオ長は15秒以下である必要があります。 | reference-to-video | [] |
input.duration出力ビデオの長さ(秒)。 | int | いいえ | 5 | 4-15秒 | すべて | 5 |
input.aspect_ratio出力アスペクト比。 'adaptive' は、サービスが最適な比率を推測することを可能にします。 | string | いいえ | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | 適応型 | すべて | 16:9 |
input.resolution出力解像度ティア。 | string | いいえ | 720p | 480p | 720p | 1080p | すべて | 720p |
input.generate_audioサポートされている場合にモデルがオーディオを生成するかどうか。 | boolean | いいえ | true | true | false | すべて | true |
input.watermark透かしを追加するかどうか。 | boolean | いいえ | false | true | false | すべて | false |
input.web_searchサポートされている場合にウェブ検索拡張を許可するかどうか。 | boolean | いいえ | false | true | false | すべて | false |
input.return_last_frame利用可能な場合に最後のフレームのURLを返すかどうか。 | boolean | いいえ | false | true | false | すべて | false |
input.seed決定論的シード。ランダムシードの場合は -1 を使用します。 | int | いいえ | -1 | -1 または 0-4294967295 | すべて | -1 |
クレジットは、解像度、期間、モデル、および参照対動画に動画参照が含まれるかどうかによって異なります。作成応答によって返されるクレジット値は、そのタスクのために実際に予約された量です。 (reference-to-video)
クレジット料金を見る応答
これは POST /v1/videos/generations からの成功応答です。タスクが承認され、クレジットが予約されたことを意味します。返された taskId を使用して GET /v1/tasks/:id をポーリングするか、完了または失敗のコールバックと照合します。
POST /v1/videos/generations 成功応答
{
"taskId": "3f2aK9mR...",
"credits": 60
}タスクステータスを取得する
現在のタスク状態を取得するには、GET /v1/tasks/:id を使用します。10 秒に 1 回以上のポーリングは行わないでください。本番システムでは、Web フックを優先してください。
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"完了したタスク応答
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "charged",
"credits": 60,
"failed_reason": null,
"data": {
"results": ["https://cdn.seedance2.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}失敗したタスク応答
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| 値 | 意味 |
|---|---|
status=queued | 承認され、提出または処理待ちの状態です。 |
status=generating | プロバイダーが生成を処理中です。 |
status=completed | 動画が完了し、data.results に結果 URL が含まれています。 |
status=failed | 生成に失敗したか、タイムアウトしました。 |
billing_status=reserved | タスク進行中はクレジットが予約されます。 |
billing_status=charged | タスクが成功し、予約が決済されました。 |
billing_status=refunded | タスクが失敗またはタイムアウトし、クレジットが自動的に返金されました。 |
billing_status=refund_failed | 返金取引に失敗し、手動処理が必要です。 |
video_expires_at の後、data.results は空になります。有効期限が切れる前にファイルをダウンロードして保存してください。
ウェブフック
callback_url が存在する場合、Seedance はタスクが完了または失敗したときにエンドポイントを呼び出し、最終結果を説明する JSON データを送信します。エンドポイントが 2xx 以外の応答を返すか、15 秒以内に応答しない場合、配信は最大 5 回再試行されます。再試行では同じタスク ID が再利用されるため、ID で重複排除してください。コールバックデータを安全に記録したら、すぐに 200 応答を返してください。
タスク完了コールバック
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"results": ["https://cdn.seedance2.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}タスク失敗コールバック
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 60
}
}export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}コールバックデータの形状を検証し、IDで重複を排除し、独自のタスクレコードを更新し、迅速に応答してください。
callback_url は HTTPS でなければならず、プライベート、ループバック、またはリンクローカルネットワーク範囲を指してはなりません。
エラー
POST /v1/videos/generations と GET /v1/tasks/:id は、API リクエスト自体が失敗した場合(無効なパラメータ、無効な API キー、クレジット不足、レート制限、タスクが見つからないなど)にこのエラー形式を返します。状況に応じて、required、available、retry_after などの追加フィールドが含まれるエラーもあります。
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 60,
"available": 12
}
}| コード | HTTP | 意味 | 再試行しますか? |
|---|---|---|---|
invalid_request | 400 | パラメータが不足しているか無効です。 | いいえ、リクエストを修正してください。 |
invalid_api_key | 401 | APIキーが欠落しているか、無効であるか、取り消されています。 | いいえ、有効なキーを使用してください。 |
insufficient_credits | 402 | クレジットが不足しています。タスクは承認または課金されません。 | 再充電後。 |
forbidden | 403 | APIキーに必要なスコープがありません。 | いいえ。 |
not_found | 404 | タスクが存在しないか、キー所有者に属していません。 | いいえ。 |
rate_limited | 429 | リクエストレートを超過しました。 | はい、Retry-Afterに従ってください。 |
internal_error | 500 | サーバーエラー。 | はい、後で再試行してください。 |
レート制限
レート制限は、API キーごとにスライディング ウィンドウで適用されます。生成はデフォルトで 1 分あたり 60 リクエストです。ステータス クエリはより寛容です。HTTP 429 応答には Retry-After が含まれます。
生成
60/min
ステータスクエリ
より寛大
429ヘッダー
Retry-After
請求とクレジット
API は、送信時に予約し、成功時に課金し、失敗時に返金します。ダッシュボードの使用状況ページには、API クレジット履歴、タスク ログ、時間ベースの使用統計が表示されます。
予約済み
タスクが承認されたときにクレジットが確認され、予約されます。
請求済み
完了したタスクは、既存の予約を決済します。
返金済み
失敗またはタイムアウトしたタスクは、予約されたクレジットを自動的に返金します。
ダッシュボードで使用状況を検査
APIログ、タスクタイムライン、クレジット履歴、時間ベースの使用状況メトリクスを表示します。