Skip to main content
POST
Create a Seedance 2.0 video generation task
Use the Playground on the right: set Authorization to Bearer sk-your-api-key (the Token needs the SeeDance2 group, shared by 2.5 and the 2.0 family), fill in model / content, and send. A successful submission returns a task id; polling and download flows are covered in the code samples below.
About the Playground “no response received” error: this is an async task endpoint, and clicking Send in the browser may show that message — the browser’s cross-origin safety check blocked the response, but the task was actually submitted successfully (verify via the query endpoint below or the console logs). The Playground can also only create a task; it cannot poll or download the video. To run the full create → poll → download flow, copy and run the code samples below (cURL / Python / Node.js).
This is the task-creation endpoint for Seedance 2.0. Text-to-video, first+last/first frame, and multi-modal reference-to-video all share it — the content array selects the mode. For model selection, pricing, the resolution/pixel table, and FAQ, see the Seedance 2.0 Overview.
  • The path prefix is /seedance/api/v3do not drop the /api segment, and do not use /v1/videos
  • The Token must have the SeeDance2 group enabled, otherwise you get “no available channel for this model”: 2.5 and the 2.0 family both use SeeDance2, so one Token reaches all four models (mini / fast also have the discounted SD2Mini / SD2Fast)
  • generate_audio defaults to true (output has sound) — pass false explicitly for silent video
  • Python requests needs the "Accept-Encoding": "identity" header — without it you may hit a gzip decoding error, a truncated non-JSON body (e.g. the leading {" is lost and you only get id":"cgt-xxx"}), or intermittent 400s
  • The success status is succeeded (not completed); the video URL lives at content.video_url and expires in 24 hours

Code Examples

Parameter Reference

Neither Seedance 2.5 nor the 2.0 family supports frames or camera_fixed — those are Seedance 1.x parameters and will be ignored or rejected.Task-type constraints unique to 2.5 (violations return InvalidParameter.TaskTypeConstraint at submission, not billed):

Generation modes (content combinations)

The three image modes are mutually exclusive. Images accept public URLs, Base64 (data:image/png;base64,...), and asset IDs (asset://...). Inputs containing real human faces are rejected. For end-to-end asset-reference code (ingest → asset:// → generate → download), see the Asset Reference Guide. Inlining large media slows down task creation. The time spent uploading Base64 payloads or fetching large image URLs all lands in the submission phase, which can stretch a create-task call from about a second to tens of seconds — or into a client read timeout. When a request carries images or video, ingest the media first and reference it as an asset:// asset ID: see Asset-First Workflow. Reference limits differ by generation: 2.5 takes 30 images + 10 videos + 10 audio clips, and audio may be the only reference; the 2.0 family takes 9 images + 3 videos + 3 audio clips, and audio must be sent together with at least one image or video. Editing and extension are triggered by prompt intentomni_reference_task_type only moves the validation earlier. Refer to assets positionally in the prompt (@video1, @image1) in the order you passed them; editing needs a verb like add / remove / change / replace, extension needs extend / continue. If the task type the model infers from the prompt contradicts what you declared, the task fails asynchronously with InvalidParameter.TaskTypeMismatch.

Response Format

Creation returns only the task ID (not the video):
Once you have the id, poll GET /seedance/api/v3/contents/generations/tasks/{id} for the task status. Measured end-to-end latency (queueing included). 2.0 family at 720p: about 90–140 s for a 5-second clip, 170 s for 15 seconds. 2.5: about 150 s at 720p/5s, 330 s at 720p/30s, 150 s at 1080p/5s. Higher resolution and longer duration are slower, and peak-hour queueing stretches this further. The code samples below use a fixed 20-second interval — good enough, with a predictable request count. A successful task looks like this (real sample from our tests):
  • The video URL is at content.video_url, not top-level; it is a signed link that expires in 24 hours — download immediately
  • State machine: queued → running → succeeded / failed / expired; success is succeeded
  • Download the link with a plain GET — do not send the Authorization header to the signed URL
usage.completion_tokens is the billed token count and follows tokens ≈ duration × width × height × 24 / 1024 (within 0.1% in our tests). With duration: -1 or ratio: adaptive, the actual length and ratio are reported in the response’s duration / ratio fields.

Authorizations

Authorization
string
header
required

API key from the APIYI console (SeeDance25 group for 2.5, SeeDance2 group for the 2.0 family)

Body

application/json
model
enum<string>
required

Model ID (plain ID, no ep- prefix). 2.5 supports 1080p, 4-30 s, and up to 30 images + 10 videos + 10 audio clips as references; 2.0 standard supports 1080p; fast and mini cap at 720p, with mini at about half the standard price. No model supports 4k

Available options:
doubao-seedance-2-5-260628,
doubao-seedance-2-0-260128,
doubao-seedance-2-0-fast-260128,
doubao-seedance-2-0-mini-260615
Example:

"doubao-seedance-2-5-260628"

content
object[]
required

Input array. Text-to-video: a single text item. Image-to-video: add image_url items (role: first_frame / last_frame). Multi-modal reference-to-video: image_url items (role: reference_image) plus optional video_url / audio_url. Reference limits: 2.5 allows 30 images + 10 videos + 10 audio clips and audio may stand alone; the 2.0 family allows 9 images + 3 videos + 3 audio clips and needs at least 1 image or 1 video. The three image modes are mutually exclusive

resolution
enum<string>
default:720p

Resolution tier (defines pixel area — every ratio in a tier costs the same). 1080p is available on 2.5 and 2.0 standard only; fast and mini cap at 720p. No model supports 4k

Available options:
480p,
720p,
1080p
ratio
enum<string>
default:adaptive

Aspect ratio. adaptive auto-fits the input (recommended for image-to-video to avoid cropping); the actual ratio is returned in the task's ratio field

Available options:
16:9,
4:3,
1:1,
3:4,
9:16,
21:9,
adaptive
duration
integer
default:5

Video length in whole seconds: 4-30 on 2.5, 4-15 on the 2.0 family; or -1 to let the model choose (billed by actual output). Cost scales linearly with duration. Note the default is -1 on 2.5 and 5 on the 2.0 family

Example:

5

generate_audio
boolean
default:true

Generate synchronized audio (voice, SFX, background music; mono). Note it DEFAULTS TO TRUE — pass false explicitly for silent video

watermark
boolean
default:false

Add an AI-generated watermark in the bottom-right corner

seed
integer
default:-1

Random seed, [-1, 2^32-1]. The same seed produces similar (not identical) results; -1 means random

return_last_frame
boolean
default:false

Return the last frame as a watermark-free png (same dimensions as the video) — chain it as the first frame of the next task to produce continuous multi-clip videos

execution_expires_after
integer
default:172800

Task expiry threshold in seconds; tasks exceeding it are marked expired. Range [3600, 259200]

output_format
enum<string>
default:mp4

Output container, supported on doubao-seedance-2-5-260628 only. mov is a QuickTime container (H.264 + yuv444p + PCM) with better colour fidelity for post-production, but some players cannot open it

Available options:
mp4,
mov
omni_reference_task_type
enum<string>
default:auto

Task type for omni-reference generation, supported on doubao-seedance-2-5-260628 only. Declaring edit or extend validates constraints up front: video editing requires ratio=adaptive and duration=-1, video extension requires ratio=adaptive; violations return InvalidParameter.TaskTypeConstraint at submission

Available options:
auto,
edit,
extend

Response

Task created. Returns the task ID for polling

Creation response. Poll GET /seedance/api/v3/contents/generations/tasks/{id}; on success the video URL is at content.video_url (expires in ~24 h) and billed tokens at usage.completion_tokens

id
string

Video generation task ID (kept for 7 days)

Example:

"cgt-20260606160057-6bbjd"