Seedance 2.0 API

非同期タスク作成、ステータス ポーリング、Web フック、クレジット認識課金により、ビデオ生成を製品に組み込みます。

ベースURL
https://api.seedance2.ai
このページで

はじめに

API を使用すると、Seedance 2.0 の動画生成タスクをプログラムで送信できます。生成は非同期です。タスクを作成し、すぐにタスク ID を受け取り、タスク エンドポイントをポーリングするか、Web フックを受信して完成した動画を取得します。

非同期タスク

ポーリングは、開発およびシンプルな統合に適しています。

Webhook対応

Web フックは、積極的なポーリングを回避し、タスクが最終状態に達したときにサービスに通知するため、本番環境での使用が推奨されます。

クレジット認識

クレジットは送信時に予約されます。成功したタスクは予約から課金されます。失敗またはタイムアウトしたタスクは自動的に返金されます。

認証

ダッシュボードでAPIキーを作成し、すべてのリクエストにBearerトークンとして送信します。完全なキーは作成時に一度だけ表示されます。

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

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

sk_test_

サンドボックス統合テストには sk_test_ キーを使用し、同じ API 契約を使用します。

401

欠落、無効、または取り消されたキーは、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"
結果オプション: 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 でビデオタスクを作成します。リクエスト本文には、トップレベルのモデル、オプションの callback_url、およびプロンプトと生成設定を含む入力オブジェクトが含まれています。

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

生成モード

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-video

input.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-videotext-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_urls

reference-to-video のみでパブリックにアクセス可能な参照ビデオ。最大3つのビデオファイルを送信でき、合計再生時間は15秒以下である必要があります。

string[]いいえ[]最大3本の動画。合計動画長は15秒以下である必要があります。reference-to-video[]
input.audio_urls

reference-to-video のみでパブリックにアクセス可能な参照オーディオファイル。最大3つのオーディオファイルを送信でき、合計再生時間は15秒以下である必要があります。

string[]いいえ[]最大3つのオーディオファイル。合計オーディオ長は15秒以下である必要があります。reference-to-video[]
input.duration

出力ビデオの長さ(秒)。

intいいえ54-15秒すべて5
input.aspect_ratio

出力アスペクト比。 'adaptive' は、サービスが最適な比率を推測することを可能にします。

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

出力解像度ティア。

stringいいえ720p480p | 720p | 1080pすべて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

決定論的シード。ランダムシードの場合は -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_request400パラメータが不足しているか無効です。いいえ、リクエストを修正してください。
invalid_api_key401APIキーが欠落しているか、無効であるか、取り消されています。いいえ、有効なキーを使用してください。
insufficient_credits402クレジットが不足しています。タスクは承認または課金されません。再充電後。
forbidden403APIキーに必要なスコープがありません。いいえ。
not_found404タスクが存在しないか、キー所有者に属していません。いいえ。
rate_limited429リクエストレートを超過しました。はい、Retry-Afterに従ってください。
internal_error500サーバーエラー。はい、後で再試行してください。

レート制限

レート制限は、API キーごとにスライディング ウィンドウで適用されます。生成はデフォルトで 1 分あたり 60 リクエストです。ステータス クエリはより寛容です。HTTP 429 応答には Retry-After が含まれます。

生成

60/min

ステータスクエリ

より寛大

429ヘッダー

Retry-After

請求とクレジット

API は、送信時に予約し、成功時に課金し、失敗時に返金します。ダッシュボードの使用状況ページには、API クレジット履歴、タスク ログ、時間ベースの使用統計が表示されます。

予約済み

タスクが承認されたときにクレジットが確認され、予約されます。

請求済み

完了したタスクは、既存の予約を決済します。

返金済み

失敗またはタイムアウトしたタスクは、予約されたクレジットを自動的に返金します。

ダッシュボードで使用状況を検査

APIログ、タスクタイムライン、クレジット履歴、時間ベースの使用状況メトリクスを表示します。

APIログ