Video
seedance-2.5 API
Use the exact seedance-2.5 model ID through Modelflare asynchronous video routing.
Use the exact model ID seedance-2.5. The model field must match this page exactly.
Parameters: duration=5resolution=1080pratio=16:9
Prompt: A small research submersible descends through the deep ocean, its headlights sweeping over a drifting field of bioluminescent jellyfish and a sunken stone archway. Camera follows from behind, particles float in the beams, blue-black water, calm and mysterious, photoreal, no text.
{ "model": "seedance-2.5", "prompt": "A small research submersible descends through the deep ocean, its headlights sweeping over a drifting field of bioluminescent jellyfish and a sunken stone archway. Camera follows from behind, particles float in the beams, blue-black water, calm and mysterious, photoreal, no text.", "seconds": "5", "duration": 5, "resolution": "1080p", "ratio": "16:9", "aspect_ratio": "16:9"}Authentication and endpoint
Section titled “Authentication and endpoint”Use a Modelflare API key with https://modelflare.dev/v1. The gateway entry point is POST /v1/videos.
Authorization: Bearer YOUR_MODELFLARE_API_KEYCreate a task
Section titled “Create a task”curl https://modelflare.dev/v1/videos \ -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.5", "content": [{"type": "text", "text": "A white cat runs through a neon-lit street in the rain, cinematic tracking shot"}], "resolution": "720p", "duration": 5, "generate_audio": false }'Poll and download
Section titled “Poll and download”Save the task ID. Poll GET /v1/videos/{task_id} and download with GET /v1/videos/{task_id}/content. Result URLs may expire, so transfer the file promptly.
curl https://modelflare.dev/v1/videos/TASK_ID \ -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY"Request notes
Section titled “Request notes”Seedance uses content[] for text, frames, and reference media; the separate Seedance asset management contract is documented independently.
Request parameters
Section titled “Request parameters”Seedance uses one asynchronous multimodal envelope. Put text and media in content[]; media roles select first/last-frame or reference workflows.
| Field | Required | Notes |
|---|---|---|
model |
Yes | seedance-2.5 |
content[] |
Yes | text, image_url, video_url, and audio_url; use role to identify media purpose |
resolution |
No | 480p / 720p / 1080p |
ratio |
No | 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / adaptive |
duration |
No | -1 for automatic timing, or 4–30 seconds |
generate_audio |
No | Generate synchronized dialogue, effects, and background audio |
tools |
No | Use web_search only where the official model page supports it |
watermark |
No | Whether to add a watermark |
omni_reference_task_type |
No | auto / reference / edit / extend; editing and extension impose stricter ratio/duration rules |
output_format |
No | mp4 / mov |
return_last_frame |
No | Return the final frame as an image |
Input and output limits
Section titled “Input and output limits”This model supports 480p, 720p, and 1080p. Use -1 for automatic timing or choose 4–30 seconds. A request can combine up to 30 images, 10 videos, and 10 audio clips. Ordinary reference generation accepts an explicit ratio or adaptive; editing, extension, and first/last-frame workflows require ratio: "adaptive", and editing requires duration: -1. Virtual-person images must be uploaded to the asset library first; Modelflare does not provide real-person verification.
Documented workflow examples
Section titled “Documented workflow examples”Seedance 2.5 classifies reference, editing, extension, and frame-guided workflows from the media roles and task type. The examples keep the official contract while using Modelflare’s endpoint and model ID.
Multimodal reference
Section titled “Multimodal reference”curl https://modelflare.dev/v1/videos \ -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.5", "omni_reference_task_type": "reference", "content": [ {"type":"text","text":"@image1 performs the movement from @video1, paced to @audio1"}, {"type":"image_url","image_url":{"url":"https://example.com/character.jpg"},"role":"reference_image"}, {"type":"video_url","video_url":{"url":"https://example.com/motion.mp4"},"role":"reference_video"}, {"type":"audio_url","audio_url":{"url":"https://example.com/music.mp3"},"role":"reference_audio"} ], "ratio": "16:9", "duration": 15, "output_format": "mp4" }'Video editing
Section titled “Video editing”curl https://modelflare.dev/v1/videos \ -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.5", "omni_reference_task_type": "edit", "content": [ {"type":"text","text":"Remove the background pedestrians but preserve the main subject"}, {"type":"video_url","video_url":{"url":"https://example.com/source.mov"},"role":"reference_video"} ], "ratio": "adaptive", "duration": -1, "output_format": "mov" }'Video extension
Section titled “Video extension”curl https://modelflare.dev/v1/videos \ -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.5", "omni_reference_task_type": "extend", "content": [{"type":"video_url","video_url":{"url":"https://example.com/source.mp4"},"role":"reference_video"}], "ratio": "adaptive", "duration": 11, "output_format": "mov" }'First and last frames
Section titled “First and last frames”curl https://modelflare.dev/v1/videos \ -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.5", "content": [ {"type":"text","text":"The subject smiles while the camera makes a smooth orbit"}, {"type":"image_url","image_url":{"url":"https://example.com/first.jpg"},"role":"first_frame"}, {"type":"image_url","image_url":{"url":"https://example.com/last.jpg"},"role":"last_frame"} ], "ratio": "adaptive", "duration": -1, "return_last_frame": true }'Errors and failed tasks
Section titled “Errors and failed tasks”Invalid model parameters return a 4xx with a request ID. An asynchronous task can also enter failed after creation succeeds; use error_code and error_message from the poll response as the final task reason. Do not retry the same request with a different JSON shape.
Supported scope
Section titled “Supported scope”This page covers Modelflare model generation and editing calls. Search or map enrichment, voice management, and element-library management are resource APIs outside this public model-call surface and are not required request fields.
Pricing and billing
Section titled “Pricing and billing”This model uses token-based billing. See the model pricing page for the current customer price, reference list price, and complete specification.
Variants
Section titled “Variants”| Model ID | Difference |
|---|---|
seedance-2.5 |
The model documented on this page. |
Media contract · v1
Official source: ByteDance / Volcengine
Contract parameters
| Intent field | Control | Options |
|---|---|---|
ratio | select | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 / adaptive |
resolution | select | 480p / 720p / 1080p |
duration | select | -1 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18 / 19 / 20 / 21 / 22 / 23 / 24 / 25 / 26 / 27 / 28 / 29 / 30 |
audio | switch | — |
workflow | select | auto / reference / edit / extend |
output_format | select | mp4 / mov |
return_last_frame | switch | — |
Supported capability
allowed_values·ratio· 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptiveallowed_values·resolution· 480p, 720p, 1080pallowed_values·duration· -1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30max_assets·reference_asset_ids· 50prompt_optional_with_reference·prompt
Structured request example
text
Intent
{
"audio": false,
"duration": -1,
"output_format": "mp4",
"prompt": "A red paper kite over a quiet harbour at dusk.",
"ratio": "16:9",
"resolution": "480p",
"return_last_frame": false,
"workflow": "auto"
}Provider request
{
"content": [
{
"text": "A red paper kite over a quiet harbour at dusk.",
"type": "text"
}
],
"duration": -1,
"generate_audio": false,
"model": "seedance-2.5",
"output_format": "mp4",
"ratio": "16:9",
"resolution": "480p",
"return_last_frame": false,
"seconds": "-1"
}reference
Intent
{
"audio": false,
"duration": -1,
"output_format": "mp4",
"prompt": "A red paper kite over a quiet harbour at dusk.",
"ratio": "16:9",
"resolution": "480p",
"return_last_frame": false,
"workflow": "reference"
}Provider request
{
"content": [
{
"text": "A red paper kite over a quiet harbour at dusk.",
"type": "text"
},
{
"image_url": {
"url": "https://example.com/reference.png"
},
"role": "reference_image",
"type": "image_url"
}
],
"duration": -1,
"generate_audio": false,
"model": "seedance-2.5",
"omni_reference_task_type": "reference",
"output_format": "mp4",
"ratio": "16:9",
"resolution": "480p",
"return_last_frame": false,
"seconds": "-1"
}edit
Intent
{
"audio": false,
"duration": -1,
"output_format": "mp4",
"prompt": "A red paper kite over a quiet harbour at dusk.",
"ratio": "adaptive",
"resolution": "480p",
"return_last_frame": false,
"workflow": "edit"
}Provider request
{
"content": [
{
"text": "A red paper kite over a quiet harbour at dusk.",
"type": "text"
},
{
"role": "reference_video",
"type": "video_url",
"video_url": {
"url": "https://example.com/reference.mp4"
}
}
],
"duration": -1,
"generate_audio": false,
"model": "seedance-2.5",
"omni_reference_task_type": "edit",
"output_format": "mp4",
"ratio": "adaptive",
"resolution": "480p",
"return_last_frame": false,
"seconds": "-1"
}extend
Intent
{
"audio": false,
"duration": -1,
"output_format": "mp4",
"prompt": "A red paper kite over a quiet harbour at dusk.",
"ratio": "adaptive",
"resolution": "480p",
"return_last_frame": false,
"workflow": "extend"
}Provider request
{
"content": [
{
"text": "A red paper kite over a quiet harbour at dusk.",
"type": "text"
},
{
"role": "reference_video",
"type": "video_url",
"video_url": {
"url": "https://example.com/reference.mp4"
}
}
],
"duration": -1,
"generate_audio": false,
"model": "seedance-2.5",
"omni_reference_task_type": "extend",
"output_format": "mp4",
"ratio": "adaptive",
"resolution": "480p",
"return_last_frame": false,
"seconds": "-1"
}