Langsung ke konten utama
POST
Main changes vs 2.0: max duration 15s → 30s; references 9 images + 3 videos + 3 audios → 30 images + 10 videos + 10 audios; audio-only reference supported; mov output added.
Note: resolution supports 480p / 720p / 1080p (2.0’s 4k is not available on 2.5).

Authentication

string
wajib
Bearer token auth. Get a key from the API Key page.

Request parameters

string
wajib
Fixed value: seedance-2.5
boolean
default:"false"
Menentukan apakah moderasi konten dijalankan sebelum tugas video dikirim.
  • true: periksa prompt dan gambar input dengan omni-moderation-latest
  • false atau dihilangkan: tidak mengirim permintaan moderasi, tanpa biaya atau latensi moderasi tambahan (default)
Konten yang diperiksa:
  • Teks: prompt, negative_prompt
  • Gambar: image_urls, image_with_roles[].url, first_frame_image, last_frame_image
  • Aset privat gambar asset://: temukan lalu periksa URL publik aslinya
  • Gambar Base64: periksa setelah dikonversi menjadi URL publik
video_urls, audio_urls, serta aset privat video/audio tidak diperiksa, karena model moderasi tidak mendukung video atau audio.ID model yang didukung: seedance-2.0, seedance-2.0-fast, seedance-2.0-mini, seedance-2.0-face, seedance-2.0-fast-face, seedance-2-0 (nama lama), dan seedance-2.5.Panggilan moderasi itu sendiri tidak ditagihkan kepada pengguna yang mengirim permintaan video.
  • Konten yang terdeteksi mengembalikan HTTP 400 (nsfw_content_detected) secara sinkron. Tugas dan task_id tidak dibuat, serta kuota pembuatan video tidak dipotong
  • Jika moderasi tidak tersedia, mengalami timeout, atau mengembalikan respons yang tidak valid, sistem menggunakan fail-open dan pembuatan video dilanjutkan. Opsi ini bukan jaminan mutlak keamanan konten
  • Input yang tidak dapat diubah menjadi URL gambar publik akan dilewati; model yang tidak didukung mengabaikan nsfw_check: true tanpa pemberitahuan
Contoh:
Respons saat terdeteksi:
boolean
Tetapkan true untuk membuat draf 480p. Hanya seedance-2.5 yang mendukungnya. Jika dihilangkan, permintaan diproses sebagai pembuatan biasa.
  • resolution hanya boleh 480p; jika dihilangkan, menggunakan 480p
  • Tidak dapat digabungkan dengan draft_task_id
  • Draf berlaku 3 hari sejak dibuat dan setelah berhasil dapat menghasilkan video final 1080p
Lihat alur di Mode draf.
string
Membuat video final 1080p dari draf yang selesai. Isi ID tugas APIMart dari respons pengiriman draf (data[0].task_id), bukan URL video.
  • Hanya seedance-2.5; gunakan model yang sama dengan draf
  • Draf harus milik pengguna API Key saat ini, selesai dengan sukses, dan belum lebih dari 3 hari sejak dibuat
  • resolution hanya boleh 1080p; jika dihilangkan, menggunakan 1080p
  • Tidak dapat digabungkan dengan draft: true; jangan kirim ulang bidang warisan seperti prompt, media referensi, atau durasi
Bidang yang dapat diubah dan batasan: Mode draf.
string
Wajib untuk pembuatan biasa dan draf. Dilarang saat menggunakan draft_task_id: prompt draf diwarisi otomatis.Prompt. Reference media with @图片1 / @视频1 / @音频1 (1-based index matching array order). English aliases in prompts may also be used depending on model behavior; keep indices aligned with arrays.Example: "Use @视频1 for first-person framing throughout, @音频1 as BGM, first frame is @图片1"
string
default:"720p"
Resolution — only:
  • 480p
  • 720p (default)
  • 1080p
Unsupported values like 2k / 4k return a sync 400.Pengecualian mode draf: draft: true hanya mendukung 480p dan default-nya sama; draft_task_id hanya mendukung 1080p dan default-nya sama.
string
default:"adaptive"
Aspect ratio (field name aspect_ratio is also accepted).Values: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive (default)
Edit, extend, and first/last-frame jobs have hard size constraints — see Task types and constraints.
integer
default:"5"
Duration in seconds:
  • 4 ~ 30
  • -1: model picks duration (pre-charge at the 30s cap; settle to actual length after completion)
If omitted: generate and bill 5 seconds.
boolean
default:"true"
Whether to generate audio (alias field name: audio).
  • true: with audio (default)
  • false: silent video
boolean
default:"false"
Add an “AI generated” watermark. Default false.
integer
Random seed. Different seeds usually yield different results for the same request; the same seed is similar but not guaranteed identical.
string
default:"mp4"
Output container:
  • mp4 (default)
  • mov: higher color precision — recommended for edit / extend workflows
string
default:"auto"
Sub-task type hint: auto / reference / edit / extend.Passing reference / edit / extend validates that type’s constraints at submit time. Invalid requests return 400, create no task, and charge nothing. See Task types and constraints.
array<string>
Reference image URLs, all treated as reference_image.Supports:
  • Public URL: https://example.com/pic.jpg
  • Private asset: asset://cm9xxxxxxxx
For first/last frames use image_with_roles.
  • Max 30 images
  • Prefer image_with_roles for first/last-frame roles
array<object>
Images with explicit roles.Example:
If video_urls / audio_urls are present, first_frame / last_frame are auto-converted to reference_image (multimodal reference job).
array<string>
Reference videos (reference_video).Input: video URL or asset ID (asset://...).See Reference video specs.
array<string>
Reference audio URLs (reference_audio). Public URLs or asset://....Max 10; total duration ≤ 30s (each clip 2~30s).
2.5 supports audio-only reference (no image/video required).
boolean
default:"false"
When true, the successful result also includes the last-frame image for chaining.
array<object>
Tool list for enhancements such as web search.Example:

Media limits

Reference video specs

  • Input: video URL or asset ID (asset://...)
  • Container: mp4, mov — codecs in the table below
  • Resolution: 480p, 720p, 1080p
  • Duration: each clip [2, 30] s; up to 10 reference videos; total duration of all videos ≤ 30s
  • Per-video dimensions:
    • Aspect ratio (width/height): [0.4, 2.5]
    • Side length (px): [300, 6000]
    • Total pixels: [640×640=409600, 3326×2494=8295044], i.e. width × height must fall in [409600, 8295044]
  • Size: each video ≤ 200 MB
  • Frame rate (FPS): [24, 60]

Supported codecs

Task types and constraints

The service infers task type from references and prompt intent. The last three types hard-constrain size / duration; violations fail asynchronously after the job starts (e.g. InvalidParameter.TaskTypeConstraint):

Turn async errors into sync errors with omni_reference_task_type

Passing reference / edit / extend declares the sub-task type so its constraints are validated at submit time. Invalid requests return 400 immediately: no task is created and nothing is charged — you do not have to poll until failed. Notes:
  • If edit omits duration, the platform sets it to -1. Omitting duration otherwise defaults to 5 seconds, which conflicts with the upstream edit requirement of -1. The trade-off is a 30-second prepaid hold (same as duration: -1); unused amount is refunded after completion. For a smaller hold, skip edit and use default auto.
  • If edit sends duration explicitly, it must be -1. Any other value returns 400 (output length follows the source video).
  • ⚠️ You can still fail asynchronously with InvalidParameter.TaskTypeMismatch. Upstream re-classifies the job from the prompt; a mismatch with your declared type is rejected. Keep prompt wording aligned (edit: “edit / delete / replace…”; extend: “extend forward/backward / continue…”).
  • All Seedance 2.5 channels share the same validation and upstream payload; switching channels does not change this behavior.

Asset library

You can pass public URLs as references, or upload into the library first and use asset://. Prefer the library when:
  1. Real human faces must use the library — raw URLs are blocked by content moderation; only approved library assets can be used
  2. Assets are reused often — upload once, skip repeated moderation on later jobs, faster submits
  3. URLs are signed temporary links — the platform stores a durable copy on ingest so later use does not depend on the original URL staying alive
  4. Library assets are synced to all available channels so multi-channel routing can use them wherever the job lands
The library is shared with the 2.0 family; approved asset:// IDs work in both 2.0 and 2.5 generation requests. Full submit fields: also see Private avatar assets.

Upload assets

The response includes a local task id. Poll with Get task status (GET /v1/tasks/{id}). After approval, list assets to obtain the asset:// ID.

Media limits (validated at submit)

Violations return 400 immediately (which asset index and which rule), without starting moderation or consuming moderation quota: Error example:
For 30s video assets, submit with "model": "seedance-2.5" (2.0 cannot use assets longer than 15s).
If the platform cannot probe the media (e.g. network blip), it may pass through and leave the decision to moderation.

Use in generation requests

Reference approved assets with asset:// in image_urls / image_with_roles / video_urls / audio_urls:
Multi-channel: after ingest, assets sync to all available channels so any routed channel can use them. If a channel’s copy is missing, the platform may re-upload from the original URL as a fallback (if that URL is already expired, that channel is skipped and another takes over).

Management APIs (quick reference)

Asset APIs are free of charge (auth + rate limits only); they do not create billing records.

FAQ

Q: How long does moderation take?
Images usually seconds; video and real-person assets may take minutes. Poll the task id until a terminal status.
Q: Moderation failed with no clear reason?
Some failures omit a detailed reason (often a transient fetch failure). The platform already retries once; if it still fails, change the URL (ensure it is publicly downloadable) and resubmit.
Q: Same asset for both 2.0 and 2.5 — upload twice?
No. Upload once; asset:// works for both generations. Cross-channel / cross-model sync is handled by the platform.
Q: Can I pass a real-person face as a raw URL?
Real-person assets must go through the library first.

Billing

Aturan ini berlaku untuk pembuatan biasa dan draf. Untuk video final, lihat Penagihan mode draf.
  • Billed by seconds × resolution tier.
  • With reference video input: billable seconds = total input video duration (≤30s) + output duration, at the input-reference rate tier.
  • duration = -1 (auto): pre-charge at the 30s cap; settle to actual output after completion.
  • Omit duration: generate and bill 5 seconds.
  • Failed jobs or content moderation blocks: full refund (charge only on successful output).

Mode draf

Buat draf 480p untuk memeriksa tampilan, lalu gunakan ID tugasnya untuk membuat video final 1080p. Video final memakai ulang prompt, media referensi, durasi, rasio, seed, pengaturan audio, dan tipe tugas agar sesuai dengan draf.

Langkah 1: Membuat draf 480p

Tambahkan "draft": true ke permintaan biasa. Batas media dan tipe tugas tetap sama. Jika resolution dihilangkan, digunakan 480p; 720p atau 1080p menghasilkan 400.
Baca ID draf dari data[0].task_id. Poll status tugas dan kirim video final hanya setelah data.status=completed.
Lakukan kueri setiap 5–15 detik. pending: antrean; processing: sedang dibuat; completed: sukses; failed: gagal. URL video ada di array data.result.videos[].url; baca url[0].

Langkah 2: Membuat video final 1080p

Isi draft_task_id dengan ID dari langkah 1. Jika resolution dihilangkan, digunakan 1080p; resolusi lain menghasilkan 400.
Video final mengembalikan ID tugas baru. Kueri hasil melalui GET /v1/tasks/{task_id}. Bidang berikut diwarisi dari draf. Jangan kirim ulang: nilai yang sama pun menghasilkan 400: prompt, image_urls, image_with_roles, video_urls, audio_urls, duration, size, aspect_ratio, seed, generate_audio, audio, omni_reference_task_type, generation_type, camerafixed, web_search, tools. Opsi output berikut dapat diubah:
draft: true dan draft_task_id saling eksklusif. Draf maupun video final tidak mendukung service_tier.Draf berlaku 3 hari sejak dibuat. Tugas tidak ditemukan, milik pengguna lain, belum sukses, bukan draf, atau kedaluwarsa menghasilkan 400 saat pengiriman video final, tanpa membuat tugas atau menagih biaya.
Video final harus memakai rute yang sama dengan draf; sistem menghubungkannya secara otomatis. Jika rute sementara tidak tersedia, pengiriman menghasilkan 400. Coba lagi nanti dengan draft_task_id yang sama. Draf yang belum kedaluwarsa dapat menghasilkan beberapa video final. Masing-masing merupakan tugas independen dengan tagihan terpisah.

Penagihan mode draf

Draf ditagih sebagai video 480p biasa. Durasi video referensi input dihitung seperti biasa, total maksimal 30 detik. Video final ditagih pada 1080p. Pilih tingkat 1080P-input jika langkah 1 menyertakan video referensi asli, atau tingkat standar 1080P jika tidak. Penyelesaian tagihan menggunakan harga per token pada tingkat yang dipilih. Detik input yang ditagih untuk video final berasal dari total durasi video referensi asli pada langkah 1, maksimal 30 detik. Video Draft yang dihasilkan tidak dihitung sebagai input video. POST video final tetap merujuk ke draft_task_id; jangan kirim ulang media referensi atau kolom lain yang diwarisi. Tidak mengirim ulang media bukan berarti durasi referensi asli dikecualikan dari penagihan. Misalnya, jika langkah 1 meminta output 11 detik dengan video referensi asli berdurasi total 22 detik, estimasikan token video final menggunakan 11 + 22 = 33 detik dan harga per token untuk tingkat 1080P-input. Setelah sukses, tagihan disesuaikan dengan token aktual: kelebihan dikembalikan dan kekurangan ditagih. Kegagalan mendapat pengembalian penuh. Tarif dan diskon mengikuti harga model.
Lebar dan tinggi adalah dimensi piksel output tugas terkait. Setelah sukses, data.usage.completion_tokens mengembalikan token untuk rekonsiliasi tagihan.

Request examples

Text-to-video (30s)

Multimodal reference (image + video + audio)

Video edit

First–last frame

Private asset

Common errors

Response (submit)

integer
Status code; 200 on success
array
Submit response with status / task_id

Completed task (GET /v1/tasks/{task_id})

After submit, poll with Get task status. When status is completed, the payload looks like this.

Completed response example

Completed fields

Notes

  • Failed tasks (status=failed): cost is always 0 (pre-charge fully refunded); reason in data.error.message
  • usage may be missing for a few seconds after completion (settlement lag); query again shortly

Differences from 2.0