Seedance API

Seedance 2.5またはSeedance 2.0、非同期タスク、Webhook、クレジット連動型課金を活用して、動画生成機能をプロダクトに組み込みましょう。

ベースURL
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_

本番環境のトラフィックには sk_live_ キーを使用してください。

sk_test_

同じAPI仕様でのサンドボックス統合テストには sk_test_ キーを使用してください。

401

キーが不足している、無効である、または失効している場合、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"
結果受け取りオプション:Webhook

タスク送信時に 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 オブジェクトが含まれます。

POST
/v1/videos/generations
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
    }
  }'

生成モード

generation_type は、受け入れるメディア入力と、モデルがそれらをどのように解釈するかを制御します。

Seedance 2.5 の機能
seedance-2-5

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-videopromptduration, aspect_ratio, resolution, seedテキストプロンプトのみ。image_urls、video_urls、audio_urls は不要です。
image-to-videoprompt + image_urls 配列(1〜2個の画像URL)duration, aspect_ratio, resolution, seedimage_urls は配列である必要があります。最初のフレーム用に1つの画像URL、または最初と最後のフレーム用に2つの画像URLを指定します。動画と音声は無視されます。
reference-to-videoprompt + 画像、動画、音声のいずれか少なくとも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-video

input.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秒)が適用されます

対応している入力の組み合わせ

テキスト + 画像
テキスト + 動画
テキスト + 音声(Seedance 2.5 のみ)
テキスト + 画像 + 動画
テキスト + 画像 + 音声
テキスト + 動画 + 音声
テキスト + 画像 + 動画 + 音声
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-videotext-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いいえ5Seedance 2.5:4〜30秒。Seedance 2.0:4〜15秒。すべて5
input.aspect_ratio

出力アスペクト比。adaptive に設定すると、最適な比率が自動判定されます。Seedance 2.5 の画像から動画(image-to-video)は adaptive のみに対応しています。

stringいいえadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptiveすべて16:9
input.resolution

出力解像度レベル。

stringいいえ720pSeedance 2.5: 480p | 720p | 1080p。Seedance 2.0: 480p | 720p | 1080p | 4k(モデルにより異なる)。すべて720p
input.generate_audio

モデルが音声生成に対応している場合、音声を生成するかどうか。

booleanいいえtruetrue | falseすべてtrue
input.watermark

ウォーターマーク(透かし)を追加するかどうか。

booleanいいえfalsetrue | falseすべてfalse
input.web_search

対応している場合、ウェブ検索による拡張を許可するかどうか。

booleanいいえfalsetrue | falseすべてfalse
input.return_last_frame

利用可能な場合、最終フレームのURLを返すかどうか。

booleanいいえfalsetrue | falseすべてfalse
input.seed

Seedance 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_request400パラメータが不足しているか、無効です。いいえ(リクエストを修正してください)。
invalid_api_key401APIキーが不足している、無効である、または失効しています。いいえ(有効なキーを使用してください)。
insufficient_credits402クレジットが不足しています。タスクは承認されず、課金もされません。チャージ後に再試行してください。
forbidden403APIキーに必要な権限(スコープ)がありません。いいえ。
not_found404タスクが存在しないか、キーの所有者に属していません。いいえ。
rate_limited429リクエストレート制限を超過しました。はい(Retry-Afterに従ってください)。
internal_error500サーバーエラーが発生しました。はい(時間をおいて再試行してください)。

レート制限

レート制限は、APIキーごとにスライディングウィンドウ方式で適用されます。生成リクエストはデフォルトで1分あたり100回です。ステータスのクエリ制限はより緩やかに設定されています。HTTP 429レスポンスには Retry-After ヘッダーが含まれます。

生成リクエスト

100/

ステータスクエリ

より緩やかな制限

429 ヘッダー

Retry-After

料金とクレジット

APIは、送信時にクレジットを確保(仮押さえ)し、成功時に決済、失敗時に返金する仕組みを採用しています。ダッシュボードの使用状況ページから、APIクレジット履歴、タスクログ、期間ごとの利用統計を確認できます。

確保(Reserved)

タスクが承認されると、クレジットがチェックされ仮押さえされます。

決済(Charged)

タスクが正常に完了すると、仮押さえされていたクレジットの決済が確定します。

返金(Refunded)

タスクが失敗またはタイムアウトした場合、確保されたクレジットは自動的に返還されます。

ダッシュボードで使用状況を確認

APIログ、タスクのタイムライン、クレジット履歴、時間ベースの使用量メトリクスを閲覧できます。

APIログ