Seedance 2.0 API:完全連携ガイド(2026年版)

2月 11, 2026

Seedance 2.0 APIは、ByteDanceのAI動画生成モデルへのプログラマティックなアクセスを提供します。このガイドでは、認証から非同期ポーリング、Webhook駆動のアーキテクチャまで、開発者がSeedanceをアプリケーションや本番ワークフローに統合するために必要なすべてを解説します。

API概要

Seedance 2.0 REST APIは、テキストから動画の生成、画像から動画の生成、ステータスポーリング、結果取得のエンドポイントを提供します。すべての生成は非同期で行われます:リクエストを送信し、タスクIDを受け取り、ポーリングまたはWebhookで結果を取得します。

機能エンドポイントメソッド
Text-to-Video/v2/generate/textPOST
Image-to-Video/v2/generate/imagePOST
ステータス確認/v2/tasks/{task_id}GET
結果ダウンロード/v2/tasks/{task_id}/resultGET
Webhook設定/v2/webhooksPOST
アカウント情報/v2/accountGET

ベースURL: https://api.seedance.ai

レスポンス形式: すべてのエンドポイントはstatusdataerrorフィールドを含む一貫した構造のJSONを返します。

クイックスタート(5分)

ゼロから最初の動画生成まで3ステップで到達します。

ステップ1:APIキーを取得。 Dreamina開発者ポータルでアカウントを作成し、設定 > APIキーに移動してキーを生成します。

ステップ2:生成リクエストを送信。

curl -X POST https://api.seedance.ai/v2/generate/text \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0",
    "prompt": "A golden retriever running through a field of sunflowers at sunset, slow motion, cinematic lighting",
    "aspect_ratio": "16:9",
    "duration": 4
  }'

ステップ3:結果をポーリング。

curl https://api.seedance.ai/v2/tasks/TASK_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

status"completed"を返したら、レスポンスに24時間有効な署名付きダウンロードリンクを含むvideo_urlフィールドが含まれます。

認証

すべてのAPIリクエストにはAuthorizationヘッダーにBearerトークンが必要です。APIキーはアカウントと課金プランに紐付けられています。

JavaScript

const SEEDANCE_API_KEY = process.env.SEEDANCE_API_KEY

const headers = {
  'Authorization': `Bearer ${SEEDANCE_API_KEY}`,
  'Content-Type': 'application/json',
}

Python

import os
import requests

SEEDANCE_API_KEY = os.environ["SEEDANCE_API_KEY"]

headers = {
    "Authorization": f"Bearer {SEEDANCE_API_KEY}",
    "Content-Type": "application/json",
}

cURL

curl -H "Authorization: Bearer $SEEDANCE_API_KEY" \
     -H "Content-Type: application/json" \
     https://api.seedance.ai/v2/account

セキュリティのベストプラクティス:

  • APIキーはソースコードではなく環境変数に保存
  • 開発者ダッシュボードで定期的にキーをローテーション
  • 開発環境と本番環境で別々のキーを使用
  • アカウントダッシュボードで使用量を監視して不正使用を検出

Text-to-Videoエンドポイント

テキスト説明から動画を生成します。ほとんどのユースケースで主要なエンドポイントです。

リクエストパラメータ:

パラメータ必須デフォルト説明
modelstringはい-モデルバージョン(seedance-2.0
promptstringはい-動画の説明(30〜500文字)
negative_promptstringいいえ-除外する要素
aspect_ratiostringいいえ16:916:99:16、または1:1
durationintegerいいえ44または8
seedintegerいいえランダム再現性のためのシード
webhook_urlstringいいえ-完了通知用URL

JavaScript例

async function generateTextToVideo(prompt) {
  const response = await fetch('https://api.seedance.ai/v2/generate/text', {
    method: 'POST',
    headers,
    body: JSON.stringify({
      model: 'seedance-2.0',
      prompt,
      aspect_ratio: '16:9',
      duration: 4,
    }),
  })

  const data = await response.json()

  if (!data.data?.task_id) {
    throw new Error(`Generation failed: ${data.error?.message ?? 'Unknown error'}`)
  }

  return data.data.task_id
}

Python例

def generate_text_to_video(prompt: str) -> str:
    response = requests.post(
        "https://api.seedance.ai/v2/generate/text",
        headers=headers,
        json={
            "model": "seedance-2.0",
            "prompt": prompt,
            "aspect_ratio": "16:9",
            "duration": 4,
        },
    )
    response.raise_for_status()
    data = response.json()

    task_id = data.get("data", {}).get("task_id")
    if not task_id:
        raise ValueError(f"Generation failed: {data.get('error', {}).get('message', 'Unknown')}")

    return task_id

効果的なプロンプトの書き方については、50以上のすぐに使えるテンプレートを掲載したSeedanceプロンプトガイドをご覧ください。

Image-to-Videoエンドポイント

モーションプロンプトで静止画像をアニメーション化します。画像がビジュアルの出発点を提供し、モーションプロンプトがシーンの動き方を記述します。

リクエストパラメータ:

パラメータ必須説明
modelstringはいseedance-2.0
imagefile/URLはいソース画像(JPEG/PNG、最大10MB)
motion_promptstringはい望むモーションの説明
durationintegerいいえ4または8
seedintegerいいえ再現性のためのシード
webhook_urlstringいいえ完了通知用URL

JavaScript例(ファイルアップロード)

async function generateImageToVideo(imagePath, motionPrompt) {
  const imageBuffer = await fs.promises.readFile(imagePath)
  const blob = new Blob([imageBuffer], { type: 'image/png' })

  const formData = new FormData()
  formData.append('model', 'seedance-2.0')
  formData.append('image', blob, 'input.png')
  formData.append('motion_prompt', motionPrompt)
  formData.append('duration', '4')

  const response = await fetch('https://api.seedance.ai/v2/generate/image', {
    method: 'POST',
    headers: { 'Authorization': `Bearer ${SEEDANCE_API_KEY}` },
    body: formData,
  })

  const data = await response.json()
  return data.data.task_id
}

Python例

def generate_image_to_video(image_path: str, motion_prompt: str) -> str:
    with open(image_path, "rb") as f:
        files = {"image": ("input.png", f, "image/png")}
        data = {
            "model": "seedance-2.0",
            "motion_prompt": motion_prompt,
            "duration": "4",
        }

        response = requests.post(
            "https://api.seedance.ai/v2/generate/image",
            headers={"Authorization": f"Bearer {SEEDANCE_API_KEY}"},
            files=files,
            data=data,
        )

    response.raise_for_status()
    return response.json()["data"]["task_id"]

非同期生成とステータスポーリング

Seedance APIのすべての生成は非同期です。リクエスト送信後にtask_idを受け取り、完了をポーリングする必要があります。一般的な生成時間は、動画長とサーバー負荷に応じて30〜120秒です。

タスクステータス値:

ステータス説明
pendingリクエスト受信、処理キュー待ち
processing生成進行中
completed動画ダウンロード準備完了
failed生成失敗(errorフィールドを確認)

JavaScriptポーリング実装

async function pollForResult(taskId, maxAttempts = 60, intervalMs = 3000) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const response = await fetch(
      `https://api.seedance.ai/v2/tasks/${taskId}`,
      { headers }
    )
    const data = await response.json()
    const status = data.data?.status

    if (status === 'completed') {
      return data.data.video_url
    }

    if (status === 'failed') {
      throw new Error(`Generation failed: ${data.data?.error ?? 'Unknown error'}`)
    }

    await new Promise((resolve) => setTimeout(resolve, intervalMs))
  }

  throw new Error('Generation timed out after maximum polling attempts')
}

ポーリングのベストプラクティス:

  • 最初の30秒は3秒間隔で開始
  • 30秒後は5秒間隔に延長
  • 最大タイムアウトは3〜5分に設定
  • レート制限レスポンスにはエクスポネンシャルバックオフを実装

Webhook統合

Webhookはポーリングの必要性を排除し、生成完了時にサーバーに通知をプッシュします。本番システムには推奨のアプローチです。

Express.js Webhookハンドラー

app.post('/webhooks/seedance', express.json(), (req, res) => {
  const { event, task_id, video_url, status } = req.body

  if (event === 'generation.completed') {
    processCompletedVideo(task_id, video_url)
  }

  if (event === 'generation.failed') {
    handleGenerationFailure(task_id)
  }

  res.status(200).json({ received: true })
})

エラーハンドリング

Seedance APIは標準的なHTTPステータスコードと構造化されたエラーレスポンスを使用します。

一般的なエラーコード:

HTTPステータスエラーコード説明対応
400INVALID_PARAMS不正なリクエストパラメータリクエストボディを修正
401UNAUTHORIZED無効または期限切れのAPIキーキーを確認/ローテーション
429RATE_LIMITED同時リクエスト数超過待ってからリトライ
500INTERNAL_ERRORサーバー側の障害バックオフ付きリトライ

レート制限とクォータ

レート制限はプランによって異なり、1日の合計ではなく同時リクエスト数に適用されます。

プラン同時リクエストリクエスト/分1日の上限
無料2105生成
Pro1060100生成
Business50以上カスタム無制限

FAQ

Seedance APIキーの取得方法は?

Seedance開発者ポータル(Dreaminaプラットフォーム)でアカウントを作成し、ダッシュボードに移動してAPIキーを生成します。無料プランでもAPIアクセスが利用可能です。

Seedance APIはどのプログラミング言語に対応していますか?

Seedance APIはHTTPリクエストを送信できるあらゆる言語で動作するREST APIです。公式のサンプルはJavaScript、Python、cURLで提供されています。

Seedance APIの生成にはどのくらい時間がかかりますか?

生成には通常、解像度と動画長の設定に応じて30〜120秒かかります。APIは非同期ポーリングを使用して生成ステータスを確認します。

Seedance APIはWebhookに対応していますか?

はい。Webhook URLを設定して、動画生成完了時に通知を受け取ることができ、ステータスポーリングの必要がなくなります。

関連記事

AIVidPipeline

編集チーム

AIVidPipeline は、AI 動画・画像・音楽クリエイター向けのチュートリアル、モデル比較、ワークフローガイドを公開しています。製品アップデートを追跡し、機能や価格情報を検証したうえで、実践的なガイダンスに落とし込みます。

pages.blog.messages.cta_title

pages.blog.messages.cta_description