Seedance 3.0 開発者向け API / v1

Seedance 2.5 を、
あなたのプロダクトに。

1 つの API でテキスト、画像、参照素材を動画に変換。Seedance 3.0 のクレジットと既存のワークフローをそのまま使い、リクエストの送信から結果の取得まで、一貫した仕様で組み込めます。

アカウントのクレジットを共用非同期の動画生成タスクリクエストの冪等性を保証
POST /api/v1/videos
{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat drifting into the morning light",
  "duration": 5,
  "resolution": "720p",
  "aspectRatio": "16:9"
}
あなたのキー、クレジット、アプリケーション。
01 / 開発を始める

数回のリクエストで、最初の動画を。

サーバーの環境変数 SEADANCE_API_KEY にキーを保存してください。この動画専用の一意な値を SEADANCE_REQUEST_KEY に設定し(例:uuidgen で生成)、再試行時もその値を保持してください。アカウントに十分なクレジットがあることを確認します。この例では、5 秒・720p の動画に 350 クレジットを仮引き落としします。返された id を保存して、タスクの状態を照会してください。

ターミナル
export SEADANCE_API_KEY="sd_live_your_key"
# Keep this value for retries; choose a new value for a new video.
export SEADANCE_REQUEST_KEY="${SEADANCE_REQUEST_KEY:-$(uuidgen)}"

curl --fail-with-body "https://seedance3ai.dev/api/v1/videos" \
  -H "Authorization: Bearer $SEADANCE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SEADANCE_REQUEST_KEY" \
  --data '{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5
}'

このドキュメントから自動的に生成が実行されることはありません。作成リクエストを送信すると、クレジットが使用されます。

サーバー側で認証する。

すべての API 呼び出しで Authorization: Bearer sd_live_… を使用します。キーをブラウザー、モバイルアプリ、公開リポジトリ、クライアント側のコードに含めないでください。キーの全文は一度だけ表示され、API ダッシュボードからいつでも取り消せます。

ベース URLhttps://seedance3ai.dev/api/v1

既定のキー権限は、アップロードと生成用の videos:write、モデル情報とタスク状態の取得用の videos:read、クレジット照会用の account:read です。アカウントのアクセス設定と上限は、すべてのキーに適用されます。

動画生成タスクを作成する。

POST/api/v1/videos

Content-Type: application/json を使用し、生成する動画ごとに一意の Idempotency-Key を指定してください。サーバーが上流サービスのタスクを受け付けるまで時間がかかる場合があります。接続がタイムアウトしたら、同じ本文と同じキーで再試行してください。HTTP 202 は受付完了を示し、生成完了ではありません。Idempotency-Key は、空白を含まない 1〜128 文字の印字可能な ASCII 文字を受け付けます。

パラメーター値と要件
modelstringseedance-2.5

必須。現在、この API は Seedance 2.5 に対応しています。

modestringtext-to-video | image-to-video | reference-to-video

必須。入力方式を選択してください。素材のフィールドは選択したモードに合わせる必要があります。

promptstring3〜30,000 文字

必須。シーン、動き、音声を記述してください。

durationinteger4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30

必須。単位は秒です。編集時は元の動画の長さを使用し、課金時に秒単位で切り上げます。

resolutionstring480p | 720p | 1080p

必須。解像度によってクレジット単価が決まります。

aspectRatiostring1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9

必須。画像から動画を生成する場合は、最初のフレームの比率を使用します。

firstFrameUrl / lastFrameUrlstringアップロード済み素材の publicObjectUrl

画像から動画を生成する場合、最初のフレームが必須です。最後のフレームは任意です。

referenceImageUrlsstring[]画像は最大 30 枚

reference-to-video 用です。各ファイルを先にご自身のアカウントにアップロードしてください。

referenceVideoUrls / referenceAudioUrlsstring[]動画は最大 10 本 / 音声は最大 10 ファイル

動画と音声はそれぞれ合計 30 秒以内です。生成前にサーバーで素材を検証します。

referenceTaskTypestringreference | edit | extend

任意。既定値は reference です。edit と extend では reference-to-video を使用し、元の動画を 1 本だけ指定する必要があります。

generateAudiobooleantrue

任意。Seedance 2.5 には音声生成が含まれます。false は受け付けません。

batchCountinteger1

任意。1 回のリクエストで動画を 1 本生成します。

これらのフィールドを使い、Seedance 2.5 でテキスト、最初と最後のフレーム、複数形式の参照素材、動画の編集と延長を扱えます。現在利用可能な機能と料金は、GET /models の返却値を参照してください。

画像から動画を生成するリクエスト例
request.json
{
  "model": "seedance-2.5",
  "mode": "image-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "firstFrameUrl": "YOUR_UPLOADED_PUBLIC_OBJECT_URL"
}
参照素材から動画を生成するリクエスト例
request.json
{
  "model": "seedance-2.5",
  "mode": "reference-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "referenceImageUrls": [
    "YOUR_UPLOADED_IMAGE_URL"
  ],
  "referenceVideoUrls": [
    "YOUR_UPLOADED_VIDEO_URL"
  ]
}
参照素材を使う

一度アップロードし、URL で参照する。

POST /uploads に fileName、contentType、size(バイト数)、kind(image、video、audio のいずれか)を送信します。expiresAt までに requiredHeaders を指定して、元のファイルのバイト列を PUT で uploadUrl にアップロードしてください。成功後、生成リクエストで publicObjectUrl を使用します。素材は同じアカウントに属している必要があり、任意の外部 URL や base64 入力は受け付けません。

upload.mjs
// Node.js 20+ · upload once, then use publicObjectUrl
import { readFile } from "node:fs/promises";

const bytes = await readFile("./first-frame.jpg");
const signed = await fetch("https://seedance3ai.dev/api/v1/uploads", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SEADANCE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    fileName: "first-frame.jpg", contentType: "image/jpeg",
    size: bytes.length, kind: "image",
  }),
});
const upload = await signed.json();
if (!signed.ok) throw new Error(JSON.stringify(upload));
const stored = await fetch(upload.uploadUrl, {
  method: "PUT", headers: upload.requiredHeaders, body: bytes,
});
if (!stored.ok) throw new Error("Upload failed");
console.log(upload.publicObjectUrl);
// Use this URL as firstFrameUrl in an image-to-video request.

申告したファイルサイズとコンテンツタイプは、実際にアップロードするファイルと一致する必要があります。アップロード URL には有効期限があるため、必要に応じて再取得してください。生成前に素材の長さ、サイズ、形式を検証します。

完了までタスクを確認する。

GET /videos/:id で現在のタスク状態を取得します。5〜10 秒ごとにポーリングし、succeeded または failed で停止してください。Retry-After がある場合は指定の時間だけ待機します。照会できるのは、ご自身のアカウントで API を通じて作成したタスクのみです。現在の連携方式はポーリングです。

GET /api/v1/videos/:id
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"
queuedprocessingsucceeded / failed
成功したタスクの例
{
  "id": "a1b2c3d4-1234-4567-8901-abcdef123456",
  "status": "succeeded",
  "credits_reserved": 350,
  "created_at": "2026-10-27T00:00:00.000Z",
  "output": {
    "url": "https://your-result-host.example/video.mp4"
  },
  "error": null,
  "refund_status": "not_applicable"
}

動画が利用可能になるまで output は null です。失敗したタスクには error が含まれ、refund_status でクレジットの返還状況を確認できます。成功した動画は早めにダウンロードしてください。動画を削除してもリクエストはリセットされません。同じ Idempotency-Key で再送すると 410 video_deleted が返り、再生成はできません。

同じアカウント、共通の残高

開発前にクレジット費用を確認する。

API での生成には、ウェブサイトと同じアカウントのクレジットと Seedance 2.5 の単価が適用されます。リクエスト受付時にクレジットを仮引き落としし、生成に失敗した場合は買い切りクレジット残高に返還します。タスク作成前の検証で失敗した場合、課金対象の動画は作成されません。

480p

30クレジット / 出力 1 秒

+ 20 クレジット / 参照動画 1 秒

720p

70クレジット / 出力 1 秒

+ 50 クレジット / 参照動画 1 秒

1080p

160クレジット / 出力 1 秒

+ 90 クレジット / 参照動画 1 秒

費用 = 出力時間 × 出力単価 + 参照動画の時間 × 参照単価。参照動画の時間はサーバーで計測し、合計を秒単位で切り捨てて課金します。音声生成は料金に含まれます。例えば、5 秒・720p の動画は 350 クレジット、さらに 5 秒の参照動画を使用する場合は 600 クレジットです。

モデル、料金、残高を確認
curl --fail-with-body "https://seedance3ai.dev/api/v1/models" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

curl --fail-with-body "https://seedance3ai.dev/api/v1/credits" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

API ダッシュボードで、利用可能なクレジット、リクエスト履歴、アカウントの上限を確認できます。同じアカウントでウェブサイトの料金ページからクレジットを追加してください。API 専用の残高やチャージ用エンドポイントはありません。利用可能なクレジットが十分にあれば、有効なサブスクリプションは不要です。サブスクリプションの期限切れや買い切りクレジットの規則は、ウェブサイト利用時と同じです。

クレジットを追加しても、API の頻度、同時実行数、1 日の上限は増えず、無効なアカウントも再有効化されません。1 日の上限には、失敗して返還された分も含むすべての仮引き落としクレジットが計上され、UTC 00:00 にリセットされます。上限の引き上げが必要な場合は、サポートにお問い合わせください。

プランを確認してクレジットを追加

安全に再試行し、重複課金を防ぐ。

生成する動画ごとに 1 つの Idempotency-Key を使用し、結果が確定するまで正確なリクエスト本文とともに保持してください。新しいキーは新しい生成を意味します。エラーレスポンスには error.code、error.message、request_id が含まれます。サポートへのお問い合わせにはリクエスト ID を添えてください。

HTTP意味対処方法
400無効なリクエストエラーメッセージ、フィールド、素材の制限を確認してから再試行してください。
401無効な API キーBearer ヘッダーを確認してください。取り消したキーは再利用できません。
402クレジット不足同じ Seedance 3.0 アカウントにクレジットを追加してください。
403アクセスが拒否されましたAPI アクセスが無効になっているか、キーに必要な権限がありません。
404動画が見つかりませんご自身のアカウントで、この API を通じて作成したタスク ID を使用してください。
409リクエストの競合request_in_progress の場合は待機し、同じリクエスト本文とキーで再試行してください。idempotency_conflict は、同じキーが異なる本文で再利用されたことを示します。request_expired または request_previously_failed は、動画が送信されていないことを示します。報告された問題を解決してから、新しいキーを使用してください。
410動画は削除済みですvideo_deleted は、元のリクエストは処理済みですが、その動画が削除されたことを示します。同じキーで再生成はできません。再試行を停止し、新たに課金される動画生成を意図する場合にのみ、新しいキーを使用してください。
429アカウントの上限Retry-After に従って待機してください。リクエスト頻度、同時実行タスク数、1 日のクレジット上限はすべてのキーで共有されます。1 日の利用枠は UTC 00:00 にリセットされます。
500 / 503一時的なサービスエラーIdempotency-Key を保持して、同じリクエストを再試行してください。結果が不明なまま新しいキーを作成しないでください。

送信時に request_in_progress が返ったら、待機して同じリクエストを再試行してください。タイムアウトを回避するために新しいキーに切り替えないでください。失敗したタスクのクレジットがまだ返還されていない場合は、タスク ID を保存してサポートにお問い合わせください。

アプリに組み込みませんか?

キーを作成して、最初の連携を始めましょう。

API ダッシュボードを開く