本文へスキップ

Seedance 2.0 MiniAPIリファレンス

コードからSeedance 2.0 Miniを呼び出すために必要なすべて:3ステップのクイックスタート、各フィールドとその制限、料金の計算式、Webhookとべき等性。MCPツールも同じ/v1 APIで動作します。MCPでログインした場合はクリエイティブ残高、APIキーの場合は開発者API残高を使います。

エンドポイントPOST /v1/videos/generationsモデルバージョンdreamina-seedance-2-0-mini-260615OpenAPIllms.txtAIエージェント向け
API の利用を申請

開発者APIは申請制です。

クイックスタートは3回の呼び出しで

キーを設定し、価格上限を付けてジョブを送信し、結果を読み取ります。

  1. 01

    キーを設定する

    開発者APIは申請制です。スタジオの「APIキー」から申請してください。キーは1回だけ表示されるため、環境変数に保存してください。

    Shell
    export API_KEY="sk_test_…"
  2. 02

    ジョブを送信する

    Idempotency-Keyとmax_creditsの上限(またはquote_id)を付けてクリップをPOSTします。すぐに202と待機中のジョブが返り、クレジットが保留されます。

    POST /videos/generations
    curl https://api.pershot.app/v1/videos/generations \
      -H "Authorization: Bearer $API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "seedance-2.0-mini",
        "prompt": "Creator holds the bottle to camera and explains one benefit, handheld, natural room light.",
        "duration": 10,
        "resolution": "720p",
        "aspect_ratio": "16:9",
        "generate_audio": true,
        "max_credits": 42
      }'
    表示されるはずの内容
    {
      "id": "job_01J9ZK4T8W",
      "object": "job",
      "kind": "video",
      "status": "queued",
      "money_status": "reserved",
      "queue_position": 2,
      "requested_model": "seedance-2.0-mini",
      "credits_quoted": 42,
      "credits_charged": null
    }
  3. 03

    結果を読み取る

    statusがsucceededになるまでジョブをGETします。outputs[].urlは署名付きで24時間後に期限切れになるため、残したいものはダウンロードしてください。

    GET /jobs/{id}
    curl https://api.pershot.app/v1/jobs/job_01J9ZK4T8W \
      -H "Authorization: Bearer $API_KEY"

パラメーターと制限

APIが検証に使うのと同じスキーマから生成されたOpenAPIドキュメントから読み込んでいます。不明なフィールドは拒否されます。

Seedance 2.0 Miniのリクエストフィールド
フィールド型許可される値備考
model必須stringseedance-2.0-fast · seedance-2.0-mini · autoモデルID。
prompt必須string2–2,000文字生成する内容:被写体、カメラ、光。
durationデフォルト:5integer4–15出力の長さ(整数の秒数、最大15)。
resolutionデフォルト:"720p"string480p · 720p出力の解像度。試作は480p、納品は720pです。解像度ごとに別々に生成されます。
aspect_ratioデフォルト:"16:9"string16:9 · 9:16 · 1:1フレームの形状。
generate_audioデフォルト:trueboolean–ネイティブ音声。オンでもオフでも価格は同じです。
image_url任意stringhttpsのURL動画の開始フレーム。編集モデルでは元画像。公開されているhttpsのURL、またはアップロードURL。
reference_image_urls任意string[]最大9 · httpsのURL被写体やスタイルの参照画像。プロンプト内では@image1、@image2のように参照します。
seed任意integer0–2,147,483,647受け付けますが無視します:Seedance 2.0はシードを受け付けません。
quote_id任意stringqt_…POST /v1/quotesの見積もりで実行します。見積もりの有効期間は10分です。
max_credits任意number> 0このジョブの費用の上限。上限を超える場合、ジョブは拒否され、課金されることはありません。
webhook_url任意stringhttpsのURLジョブのイベントを受信するhttpsのURL。
end_user_id任意string1–128文字承認済みの開発者アカウント向け(申請制):このリクエストに付けるご自身のユーザーID。使用状況に表示されます。
project_id任意stringprj_…
shot_id任意stringsht_…
routing_preference任意stringstability · speed
enhance任意object–

quote_idとmax_creditsのどちらか一方だけを送信してください。このエンドポイントはmodel "auto"を受け付けません。動画の場合は、先にPOST /v1/auto/planを呼び出し、選ばれたモデルをmax_creditsとともに送信してください。

レートと同時実行数
キーごとに毎分60リクエスト、同時実行はデフォルトでアカウントごとに3ジョブです。キーを増やしても同時実行数は増えません。

制限

APIが照合するのと同じ表から読み込んでいます。各行に、その制限を誰が確認するのか、超えた場合にどうなるのかを記載しています。

  • 当社が確認当社が確認し、見積もりや保留の前に400を返します。
  • 提供元が確認仕入れ先が確認します。拒否されたジョブは失敗となり、課金されません。
  • 推奨誰も確認しません。範囲内に収めると、より良い結果が得られます。
seedance-2.0-miniの制限
制限値単位確認する側制限を超えた場合
リクエスト
プロンプトの長さprompt2〜2,000文字当社が確認見積もりや保留の前に、promptに対して400 invalid_requestを返します。
英語のプロンプトprompt最大1,000語推奨受け付けます。プロンプトが長いと、モデルが指示に従いにくくなる場合があります。
中国語のプロンプトprompt最大500文字(中国語)推奨受け付けます。プロンプトが長いと、モデルが指示に従いにくくなる場合があります。
長さduration4〜15デフォルト:5秒当社が確認durationに対して400 invalid_requestを返します。1秒単位のみです。
解像度resolution480p, 720pデフォルト:720p–当社が確認resolutionに対して400 invalid_requestを返します。
アスペクト比aspect_ratio16:9, 9:16, 1:1デフォルト:16:9–当社が確認aspect_ratioに対して400 invalid_requestを返します。
シードseed無視–提供元が確認受け付けますが送信はしません:Seedance 2.0はシードを受け付けないため、シードを指定しても同じ結果は再現されません。
入力動画の長さinput_video_seconds2〜15秒当社が確認POST /v1/quotesで400 invalid_requestを返します。APIの生成は入力動画を受け付けません。
送信する画像
参照画像reference_image_urls最大9枚当社が確認reference_image_urlsに対して400 invalid_requestを返します。
開始フレームまたは参照画像reference_image_urlsimage_urlまたはreference_image_urls(両方は不可)–当社が確認reference_image_urlsに対して400 invalid_requestを返します。Seedance 2.0は、ジョブごとに2つのモードのいずれかで実行されます。
画像の辺image_urlreference_image_urls300〜6,000px(1辺あたり)アップロード時に当社が確認アップロード:見積もりや保留の前に、image_urlまたはreference_image_urls.Nに対して400 invalid_requestを返します。その他のリンク:仕入れ先がジョブを拒否し、課金されません。
画像の形状image_urlreference_image_urls0.4〜2.5幅 ÷ 高さアップロード時に当社が確認アップロード:見積もりや保留の前に、image_urlまたはreference_image_urls.Nに対して400 invalid_requestを返します。その他のリンク:仕入れ先がジョブを拒否し、課金されません。
アップロードサイズfile最大10MB当社が確認POST /v1/uploadsはfileに対して400 invalid_requestを返します。
アップロード形式fileJPEG, PNG, WebP–当社が確認ファイル名ではなく、ファイルの中身から判定します。それ以外の形式:fileに対して400 invalid_requestを返します。
リンク画像のサイズimage_urlreference_image_urls最大30MB提供元が確認他のホストからリンクした画像が対象です。仕入れ先がジョブを拒否し、課金されません。
リンク画像の形式image_urlreference_image_urlsJPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF–提供元が確認他のホストからリンクした画像が対象です。仕入れ先がジョブを拒否し、課金されません。
出力
出力ピクセル数480p16:9864×4969:16496×8641:1640×640720p16:91280×7209:16720×12801:1960×960px提供元が確認解像度とアスペクト比ごとにモデルが決定します。
フレームレート24fps提供元が確認すべての動画で同じです。
出力形式MP4–提供元が確認すべての動画はMP4で、generate_audioがオンの場合は音声付きです。
リンク
アップロードリンク7日当社が確認期限を過ぎるとリンクは403を返します。ファイルを再度アップロードしてください。
出力リンク24時間当社が確認期限を過ぎるとリンクは403を返します。ジョブを再度GETすると新しいリンクを取得できます。ファイル自体は12か月間保持されます(日付はジョブのoutputs_expire_at)。アセットに保存したもの、プロジェクトで使用中のものはそれ以降も保持されます。

当社は他のホストから画像を取得しないため、そうしたリンクのサイズは仕入れ先が確認します。仕入れ先が拒否したジョブには課金されません。 同じ制限はJSONでも取得できます:GET /v1/modelsは、すべてのモデルについてlimitsオブジェクトを返します。

料金をオープンに計算

すべてのジョブは実行前にクレジットで見積もられます(US$1 = 100クレジット)。秒単位の料金は予算の目安で、正確な金額はPOST /v1/quotesが返します。

クレジット = ceil(BytePlusの定価 × 0.55 × 100)。ここで、定価 = (入力の秒数 + 出力の秒数) × 幅 × 高さ × 24 ÷ 1024 × 定価単価
Seedance 2.0 Miniの価格
仕様1秒あたり(API)5 s10 s15 s
480p動画入力なし$0.020入力動画あり:$0.012/s$10で約500 s10 cr≈ $0.1020 cr≈ $0.2030 cr≈ $0.30
720p動画入力なし$0.042入力動画あり:$0.025/s$10で約238 s21 cr≈ $0.2142 cr≈ $0.4263 cr≈ $0.63

拒否または失敗したジョブには課金されません。

Webhookとべき等性

再試行で二重に課金されることはなく、ポーリングも不要です。

べき等性
生成のPOSTにはすべてIdempotency-Key(表示可能なASCII文字で1〜255文字)が必要です。24時間以内に同じキーを送るとHTTP 200で同じジョブが返されるため、タイムアウト後に再試行しても、2つ目のジョブが作成されたり課金されたりすることはありません。
拒否されたプロンプト
事前チェックで拒否されたプロンプト(422 content_rejected)では何も作成されないため、同じキーを新しいプロンプトで再利用できます。
イベント
job.queuedjob.processingjob.succeededjob.failedjob.cancelled
署名
X-Signatureには、UNIX時刻のtと、tとドットと生のボディをwhsec_シークレットで鍵付けしたHMAC-SHA256であるv1が含まれます。5分より古いタイムスタンプは拒否し、X-Event-Idで重複を排除してください。
配信
10秒以内に2xxが返れば配信済みとみなします。失敗した配信は、1 min、5 min、30 min、2 h、6 hの後に再試行されます。リダイレクトには従いません。
Webhookのボディ
{
  "id": "evt_01J9ZKB1QX",
  "type": "job.succeeded",
  "created_at": "2026-09-29T14:02:31Z",
  "data": {
    "job": {
      "id": "job_01J9ZK4T8W",
      "object": "job",
      "kind": "video",
      "status": "succeeded",
      "money_status": "settled",
      "requested_model": "seedance-2.0-mini",
      "credits_charged": 42,
      "outputs": [
        {
          "kind": "video",
          "url": "https://…/job_01J9ZK4T8W.mp4?sig=…"
        }
      ]
    }
  }
}
X-Signatureを検証
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the request body exactly as received, before any JSON parsing.
export function verifyWebhook(header, rawBody, secret, toleranceSec = 300) {
  let t = null;
  const signatures = [];
  for (const item of (header ?? "").split(",")) {
    const [key, value] = item.split("=", 2);
    if (key === "t") t = Number(value);
    if (key === "v1") signatures.push(Buffer.from(value, "hex"));
  }
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
  const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
  return signatures.some((s) => s.length === expected.length && timingSafeEqual(s, expected));
}

// verifyWebhook(req.headers["x-signature"], rawBody, process.env.WEBHOOK_SECRET)
// Answer 2xx quickly, and skip an X-Event-Id you have already handled.

エラーと対処法

すべてのエラーは同じ形式です:code、message、param、request_idを含むerrorオブジェクト。よく発生するものは次のとおりです:

コードHTTP対処法
invalid_request400paramに示されたフィールドを修正してください。
unauthorized401キーとBearerヘッダーを確認してください。
insufficient_credits402チャージしてから、同じIdempotency-Keyで再試行してください。
forbidden_model403スタジオでキーの許可リストにモデルまたはツールを追加するか、別のキーを使用してください。高画質化などのツールには、個別の登録が必要です。
quote_expired409新しい見積もりを取得してください。見積もりの有効期間は10分です。
price_changed409価格が上限を超えました。再度見積もるか、max_creditsを引き上げてください。
content_rejected422課金はされていません。プロンプトまたは画像を変更してください。
rate_limited429Retry-Afterの時間だけ待ってから、再試行してください。
upstream_unavailable503モデルを利用できません。後で再試行してください。開始されなかったジョブには課金されません。