Skip to main content
POST
  • Supports seedance-2, seedance-2-fast, and seedance-2-mini
  • Supports text-to-video, first-frame / first-last-frame image-to-video, and multimodal reference-to-video; seedance-2-mini also supports frame roles and the audio generation switch
  • Supports combined image, video, and audio references; seedance-2-mini allows up to 9 images, 3 videos, and 3 audios
  • Async task workflow: the submit API returns generation.task, and the completed result is fetched from the task status API

Authorizations

string
required
All requests require Bearer Token authentication.Get your API Key from the API Key Management Page.

Body

string
default:"seedance-2"
required
Video generation model name.Available models:
  • seedance-2 - Standard version for higher quality output and the broader Seedance 2 workflow
  • seedance-2-fast - Faster version for previews and lower-latency iteration
  • seedance-2-mini - Lightweight version for lower-cost drafts and multimodal reference workflows, currently fixed to 1 result per request
string
Video content description.Supports Chinese and English input. We recommend clearly describing the scene, camera motion, subject action, style, and audio mood.Recommendations:
  • Keep Chinese prompts within 500 characters
  • Keep English prompts within 1,000 words
  • When referring to reference materials, use “image 1 / video 1 / audio 1” to identify them
string
Your business-side ID, such as an order number or internal job ID. Once submitted, it is stored with the task and can be used later for status lookup: GET /v1/videos/generations/{client_business_id}.metadata.client_business_id is also accepted, but the top-level field is recommended.
integer
default:0
Video duration in seconds.Rules:
  • seedance-2: 4-15
  • seedance-2-fast: 4-15
  • seedance-2-mini: 4-15
  • 0: auto duration (seedance-2 / seedance-2-fast only)
  • -1: auto duration (seedance-2 / seedance-2-fast only)
string
Video aspect ratio.Options:
  • 21:9
  • 16:9
  • 4:3
  • 1:1
  • 3:4
  • 9:16
  • adaptive
adaptive lets the upstream choose an appropriate ratio from the input media.
string[]
Compatibility image URL array.We recommend using image_with_roles instead so you can explicitly mark first_frame, last_frame, or reference_image.
  • Do not use image_urls together with image_with_roles.
  • For new integrations, use image_with_roles to explicitly mark how each image should be used.
array
Image list with explicit roles.Supported patterns:
  • seedance-2 / seedance-2-fast / seedance-2-mini
    • first_frame for first-frame image-to-video
    • first_frame + last_frame for first-last-frame video generation
    • reference_image for multimodal reference generation
  • Maximum 1 first_frame
  • Maximum 1 last_frame
  • Maximum 9 reference_image
  • Frame mode and reference mode cannot be mixed
  • seedance-2-mini also supports first_frame, last_frame, and reference_image
array
Video list with roles.Only reference_video is currently supported in multimodal reference mode.Limits:
  • seedance-2-mini: up to 3 reference videos
array
Audio list with roles.Only reference_audio is currently supported in multimodal reference mode.Limits:
  • seedance-2-mini: up to 3 reference audios
audio_with_roles cannot be used alone. At least one visual input is required.
string
default:"720p"
Video resolution.Options:
  • seedance-2: 480p, 720p, 1080p, 4k
  • seedance-2-fast: 480p, 720p
  • seedance-2-mini: 480p, 720p
boolean
default:true
Whether to generate synced audio.seedance-2-mini also supports this field.
boolean
default:false
Whether to return the generated video’s last-frame image.When set to true, the completed task response includes the image URL at result.data[0].last_frame_url.
array
Tools the model may call. The Seedance 2 series currently supports web search:
The model decides whether a search is needed from the prompt. The actual number of searches is returned at usage.tool_usage.web_search; 0 means no search was performed.
tools is supported only for text-to-video requests and cannot be combined with image, video, or audio inputs.
integer
Random seed for generation control.
string
ToAPIs standardized completion callback. Configure the Token URL and signing secret first; request-level URLs must be same-origin. See Task Webhooks.
string
Your tracking field. It does not depend on Webhook configuration.

Use Uploaded Assets

If you already uploaded private assets and obtained a usable asset_id, you do not need to send the original media URL again. Use:
  • asset://<ASSET_ID>
Asset inputs can be used as:
  • Images: first_frame, last_frame, reference_image
  • Videos: reference_video
  • Audios: reference_audio
Before use, make sure the asset has reached active status. Related guides:

Input Combinations

Typical supported combinations:
  • Text only: text-to-video
  • Text + first frame: first-frame image-to-video
  • Text + first frame + last frame: first-last-frame generation
  • Text + reference images: multimodal reference generation
  • Text + reference video: video-reference generation
  • Text + reference images + reference audio: multimodal reference generation
  • Text + reference images + reference video + reference audio: multimodal reference generation
seedance-2-mini also supports first-frame and first-last-frame workflows. Use image_with_roles with explicit first_frame / last_frame roles.

Capabilities

seedance-2-mini is currently fixed to 1 output per request and does not expose count / n. Express frame control through image_with_roles using first_frame / last_frame.

Response

string
Task ID for status queries.
string
Your business-side ID. Returned only when client_business_id was provided in the request.
string
Object type, always generation.task.
string
Model name used for this request.
string
Task status: queued, in_progress, completed, or failed.
integer
Task progress percentage (0-100).
integer
Task creation timestamp.
The submit API returns the base task object. After completion, use Get Video Task Status to fetch completed_at, expires_at, and result.type = "video" with result.data[].url and result.data[].format. With return_last_frame, the last-frame URL is at result.data[0].last_frame_url; with web_search, the search count is at usage.tool_usage.web_search.