Seedance API
Seedance 2.5またはSeedance 2.0、非同期タスク、Webhook、クレジット連動型課金を活用して、動画生成機能をプロダクトに組み込みましょう。
https://api.seevio.aiこのページの内容
はじめに
APIを使用すると、プログラムからSeedance 2.5およびSeedance 2.0の動画生成タスクを送信できます。推奨モデルであるSeedance 2.5は、テキストから動画、最初のフレームまたは最初と最後のフレームによる画像から動画、およびマルチモーダルな参照から動画への生成に対応しています。生成プロセスは非同期で行われます。タスクを作成すると即座にタスクIDが返され、その後、タスクエンドポイントをポーリングするか、Webhookを受信することで、完成した動画を取得できます。
非同期タスク
ポーリングは、開発時やシンプルな組み込みに適しています。
Webhook対応
本番環境ではWebhookの使用をお勧めします。頻繁なポーリングを回避し、タスクが終端ステータスに達した際にサービスへ直接通知を受け取ることができます。
クレジット連動型
クレジットはタスク送信時に確保(仮押さえ)されます。タスクが正常に完了すると確保分から引き落とされ、失敗またはタイムアウトした場合は自動的に返金されます。
認証
ダッシュボードでAPIキーを作成し、すべてのリクエストにBearerトークンとして含めて送信してください。完全なキーは作成時に一度だけ表示されます。
Authorization: Bearer sk_live_xxxxxxxx本番環境のトラフィックには sk_live_ キーを使用してください。
同じAPI仕様でのサンドボックス統合テストには sk_test_ キーを使用してください。
キーが不足している、無効である、または失効している場合、HTTP 401とともに invalid_api_key が返されます。
クイックスタート
まずタスクを送信します。タスクが承認されたら、結果の受け取り方法を1つ選択します。タスクエンドポイントをポーリングするか、Webhookを介して最終結果を受信します。
非同期動画タスクを作成し、すぐにタスクIDを受け取ります。
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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": "1080p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'システムから明示的なポーリングを行いたい場合は、タスクステータスエンドポイントを呼び出して進捗を取得します。
curl https://api.seevio.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 を使用して動画タスクを作成します。リクエストボディには、最上位の model、オプションの callback_url、プロンプトと生成設定を含む input オブジェクトが含まれます。
/v1/videos/generationscurl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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": "1080p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'生成モード
generation_type は、受け入れるメディア入力と、モデルがそれらをどのように解釈するかを制御します。
model を seedance-2-5 に設定すると、4秒から30秒の480p、720p、または1080pの動画を生成できます。
- テキストから動画:アダプティブ、16:9、9:16、1:1、4:3、3:4、21:9のアスペクト比に対応
- 画像から動画:最初のフレーム(1枚)または最初と最後のフレーム(2枚)の画像から生成。アスペクト比は adaptive(自動調整)である必要があります
- 参照から動画:画像は最大30枚、動画は最大10ファイル、音声は最大10ファイルまで使用可能(全素材の合計は最大50個まで)
- 参照に使用する各動画または音声は2〜30秒である必要があり、動画の合計時間および音声の合計時間はそれぞれ30秒以下にする必要があります
- 音声のみの参照入力、および return_last_frame に対応。シード値(seed)はサポートされていません
| モード | 必須メディア | 任意メディア | 注記 |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | テキストプロンプトのみ。image_urls、video_urls、audio_urls は不要です。 |
image-to-video | prompt + image_urls 配列(1〜2個の画像URL) | duration, aspect_ratio, resolution, seed | image_urls は配列である必要があります。最初のフレーム用に1つの画像URL、または最初と最後のフレーム用に2つの画像URLを指定します。動画と音声は無視されます。 |
reference-to-video | prompt + 画像、動画、音声のいずれか少なくとも1つの参照素材 | 素材制限数内での画像、動画、音声 | Seedance 2.5は音声のみの参照に対応しています。Seedance 2.0の場合は、音声を提供する際に少なくとも1つの画像または動画を追加してください。 |
text-to-videoプロンプトのみをクリエイティブな入力とする場合は、テキストから動画(text-to-video)を使用します。
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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": "1080p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'image-to-videoinput.image_urls に1〜2個の画像URLを含む配列を指定して、画像から動画(image-to-video)を生成します。1つのURLは最初のフレームを設定し、2つのURLは最初と最後のフレームを設定します。このモードでは、動画と音声の参照は無視されます。
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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)を使用します。Seedance 2.5は音声のみの参照を受け入れますが、Seedance 2.0では音声を提供する際に少なくとも1つの画像または動画が必要です。
素材の制限数
- Seedance 2.5: 参照画像最大30枚
- Seedance 2.5: 参照動画最大10ファイル(各2〜30秒、合計時間30秒以下)
- Seedance 2.5: 参照音声最大10ファイル(各2〜30秒、合計時間30秒以下)
- Seedance 2.5: すべての素材タイプを合わせて最大50個まで
- Seedance 2.0系モデルは既存の制限(画像9枚、動画3ファイル、音声3ファイル、動画/音声グループごとに最大15秒)が適用されます
対応している入力の組み合わせ
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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": "720p"
}
}'リクエストパラメータ
パラメータ名、Enum値、エンドポイントパス、および例はAPI仕様で定義されています。各フィールドの動作について以下で説明します。
ヘッダー
| ヘッダー | 必須 | 説明 | 例 |
|---|---|---|---|
Authorization | はい | リクエストの認証に使用するBearer APIキー。 | Bearer sk_live_xxx |
Content-Type | はい | すべての書き込みリクエストでJSONを使用します。 | application/json |
最上位フィールド
| フィールド | データ型 | 必須 | デフォルト値 | 範囲 / Enum | 適用モード | 例 |
|---|---|---|---|---|---|---|
model生成に使用するモデル。Seedance 2.5は seedance-2-5、Seedance 2.0は seedance-2-0、Seedance 2.0 Fastは seedance-2-0-fast、Seedance 2.0 Miniは seedance-2-0-mini を指定します。 | string | はい | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | すべて | seedance-2-5 |
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。画像から動画の場合は、最初のフレーム用に1枚、または最初と最後のフレーム用に2枚送信します。参照から動画の場合は、Seedance 2.5は最大30枚、Seedance 2.0は最大9枚まで指定できます。 | string[] | 条件付き | [] | 画像から動画:1〜2枚。参照から動画:Seedance 2.5は最大30枚、Seedance 2.0は最大9枚。 | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urls参照から動画(reference-to-video)でのみ使用される、パブリックにアクセス可能な参照動画。Seedance 2.5は最大10ファイル(各2〜30秒、合計再生時間30秒以下)を指定できます。Seedance 2.0は最大3ファイル(合計再生時間15秒以下)を指定できます。 | string[] | いいえ | [] | Seedance 2.5:最大10ファイル(各2〜30秒、合計再生時間30秒以下)。Seedance 2.0:最大3ファイル(合計再生時間15秒以下)。 | reference-to-video | [] |
input.audio_urls参照から動画(reference-to-video)でのみ使用される、パブリックにアクセス可能な参照音声ファイル。Seedance 2.5は最大10ファイル(各2〜30秒、合計再生時間30秒以下)を指定でき、音声のみの参照も可能です。Seedance 2.0は最大3ファイル(合計再生時間15秒以下)を指定できます。 | string[] | いいえ | [] | Seedance 2.5:最大10ファイル(各2〜30秒、合計再生時間30秒以下)。Seedance 2.0:最大3ファイル(合計再生時間15秒以下)。 | reference-to-video | [] |
input.duration出力動画の長さ(秒単位)。 | int | いいえ | 5 | Seedance 2.5:4〜30秒。Seedance 2.0:4〜15秒。 | すべて | 5 |
input.aspect_ratio出力アスペクト比。adaptive に設定すると、最適な比率が自動判定されます。Seedance 2.5 の画像から動画(image-to-video)は adaptive のみに対応しています。 | string | いいえ | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | すべて | 16:9 |
input.resolution出力解像度レベル。 | string | いいえ | 720p | Seedance 2.5: 480p | 720p | 1080p。Seedance 2.0: 480p | 720p | 1080p | 4k(モデルにより異なる)。 | すべて | 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.seedSeedance 2.0系モデル用の決定論的シード値。Seedance 2.5はこのフィールドに対応していないため、指定しないでください。 | int | いいえ | -1 | -1 または 0〜4294967295 | すべて | -1 |
消費クレジットは、解像度、再生時間、モデル、および「参照から動画」に動画参照が含まれているかどうかによって異なります。作成(create)時のレスポンスで返される credits の値が、そのタスクのために実際に確保されたクレジット数になります。
クレジット料金表を見るレスポンス
POST /v1/videos/generations からの正常系レスポンスです。これはタスクが承認され、クレジットが確保されたことを意味します。返された taskId を使用して GET /v1/tasks/:id をポーリングするか、完了・失敗のコールバックと照合してください。
POST /v1/videos/generations 正常系レスポンス
{
"taskId": "3f2aK9mR...",
"credits": 100
}タスクステータスの取得
現在のタスク状態を取得するには GET /v1/tasks/:id を使用します。ポーリングは10秒に1回以上の頻度で行わないでください。本番システムでは、Webhookの使用を推奨します。
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"完了したタスクのレスポンス
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": ["https://cdn.seevio.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-5",
"billing_status": "refunded",
"credits": 100,
"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 は空になります。有効期限が切れる前にファイルをダウンロードして保存してください。
Webhook
callback_url が設定されている場合、Seedanceはタスクが完了または失敗した際にエンドポイントを呼び出し、最終結果を記述したJSONデータを送信します。エンドポイントが2xx以外のレスポンスを返した、または15秒以内に応答しなかった場合、配信は最大5回まで再試行されます。再試行時には同じタスクIDが再利用されるため、IDによる重複排除を行ってください。コールバックデータを安全に記録でき次第、速やかに200レスポンスを返してください。
タスク完了コールバック
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"results": ["https://cdn.seevio.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-5",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}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である必要があり、プライベート、ループバック、またはリンクローカルネットワークのアドレスを指すことはできません。
エラー
パラメータが無効、APIキーが無効、クレジット不足、レート制限、タスクが見つからないなど、APIリクエスト自体が失敗した場合、POST /v1/videos/generations および GET /v1/tasks/:id はこの形式のエラーを返します。状況に応じて、required、available、retry_after などの追加フィールドが含まれる場合があります。
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 100,
"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分あたり100回です。ステータスのクエリ制限はより緩やかに設定されています。HTTP 429レスポンスには Retry-After ヘッダーが含まれます。
生成リクエスト
100/分
ステータスクエリ
より緩やかな制限
429 ヘッダー
Retry-After
料金とクレジット
APIは、送信時にクレジットを確保(仮押さえ)し、成功時に決済、失敗時に返金する仕組みを採用しています。ダッシュボードの使用状況ページから、APIクレジット履歴、タスクログ、期間ごとの利用統計を確認できます。
確保(Reserved)
タスクが承認されると、クレジットがチェックされ仮押さえされます。
決済(Charged)
タスクが正常に完了すると、仮押さえされていたクレジットの決済が確定します。
返金(Refunded)
タスクが失敗またはタイムアウトした場合、確保されたクレジットは自動的に返還されます。
ダッシュボードで使用状況を確認
APIログ、タスクのタイムライン、クレジット履歴、時間ベースの使用量メトリクスを閲覧できます。