ByteDance
Seedance 2.0
seedance-2.0
ByteDance's multimodal video generation model, supporting text-to-video, image-to-video, and reference-based video generation, and capable of producing multi-shot, cinematic short films with native synchronized audio
Try seedance-2.0
Input
Showcases
View all showcasesOutput
videoPricing
seedance-2.0 per second
seedance-2.0 @ext per second
| Specifications | Unit Price |
|---|---|
| 720P | $0.134 |
| 1080P | $0.342 |
| 4K | $0.694 |
Positioning Overview
Seedance 2.0 is a multimodal video generation model launched by ByteDance. It supports combined input of text, images, reference videos, and reference audio, and generates videos of 4–15 seconds with native audio at up to 4K in a single run. The model emphasizes multi-shot storytelling and character consistency, and first/last frames and reference materials can be used to constrain the visual direction. It is suitable for developers who need to quickly produce advertising clips, short social videos, and narrative previsualizations, and can be called through the unified HiAPI.ai interface with billing based on output seconds.
Core Highlights
- Multimodal material-driven generation — Text, up to 9 reference images, 3 reference videos, and 3 reference audio clips can be mixed to constrain visual style, motion, and sound with real materials.
- First and last frame control of shot start and end — Specify the first-frame and last-frame images so the generated video starts from a specified frame and ends on a specified frame, making it easy to connect shots and achieve precise transitions.
- Native audio generated in sync — Audio synchronized with the visuals is generated by default, and reference audio can be layered in to guide timbre and rhythm, reducing post-production audio-visual alignment work.
- Up to 4K and adaptive aspect ratio — Resolution ranges from 480p to 4k, aspect ratios support 1:1 to 21:9 and adaptive mode that follows the source image ratio, so one call can serve multi-platform delivery.
Capability Description
Three generation modes: Supports text-to-video, image-to-video, and reference-to-video. The same interface switches based on material combinations, making it easy to cover needs from concept to final cut within one workflow.
Multi-reference material constraints: Reference images, reference videos, and reference audio can be passed in simultaneously. Reference images plus first/last frames must not exceed 9 in total, and reference videos and audio must each not exceed 3 segments with total duration each not exceeding 15 seconds.
Duration and resolution control: Duration can be specified between 4–15 seconds, and resolution can be 480p, 720p, 1080p, or 4k. Billing is based on output seconds, making it easy to control costs according to delivery specifications.
Last-frame return: When return_last_frame is enabled, the last frame of the generated video is returned and can be used directly as the first-frame input for the next segment, chaining multiple generation segments together.
Web search enhancement: The web_search switch can enable web retrieval during generation to supplement the prompt with up-to-date information, which is suitable for creative content that depends on current events or news.
Use Cases
- Advertising and brand teams: text scripts plus reference images — Quickly generate multi-shot brand clips and output 1080p or 4k videos with audio for social delivery and official website assets.
- Narrative short-video creators: first/last frames plus character reference images — Lock shot start and end with first/last frames and maintain character consistency with reference images to produce coherent storyboard clips for short dramas or story-based content.
- Creative previsualization: reference video plus reference audio — Use existing clips and voiceover to guide style and rhythm and generate dynamic preview videos for directors and clients to confirm direction before formal production.
- Developer integration: batch video output billed by second — Submit generation tasks in batches through the unified HiAPI.ai interface, control budgets based on output seconds, and integrate into content production pipelines.
Limitations and Selection Advice
The maximum duration of a single generation is 15 seconds, so long videos need to be generated in segments and then spliced. The number of reference materials is limited: reference images plus first/last frames must not exceed 9 in total, reference videos and audio must each not exceed 3 segments with total duration each not exceeding 15 seconds, and complex projects need to be split. Last-frame return requires enabling the switch, and the last frame depends on the first frame being provided at the same time. If the requirement is ultra-long continuous shots or a traditional post-production workflow with frame-by-frame precise control, dedicated editing and compositing solutions should be evaluated; when longer final videos are needed, it is better to generate in segments and then edit.
What's new
View changelog →- New model seedance-2.0-fast video generation model now available
- New model New model available: seedance-2.0-mini
- Route change The seedance-2.0 ext route now exposes only its supported 72…
Frequently asked questions
View all FAQs →-
What type of video model is Seedance 2.0?
It is prompt-led and can also use endpoint frames or image, video, and audio references according to the active contract.
-
Which output settings does Seedance 2.0 support?
4-15 seconds, 480p, 720p, 1080p, 4k, and 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive.
-
Can it generate sound or use audio references?
Optional image, video, and audio references; generated audio
-
How is Seedance 2.0 billed?
Billing follows output duration and the live tier. Resolution, mode, or audio differences are reflected by the page price and task record.
Create a generation task
https://api.hiapi.ai/v1/tasks Headers
AuthorizationstringRequiredAccount API key. Required on every request. Example: Bearer YOUR_HIAPI_API_KEY. Get your API key
Content-TypestringOptionalThe request body is always parsed as JSON; when sent, only application/json (optionally with charset) is accepted — any other value returns 415. Example: application/json.
Idempotency-KeystringOptionalIdempotency key, up to 255 bytes. Retries with the same key from the same account create the task only once; replays return the original taskId.
On network timeouts or client retries, the same key creates the task only once — no double charges (scope: the API key's account). Use a business-unique identifier as the key (e.g. "order-42"); replays return the original taskId, and keys expire 24 hours after the first request. See the Unified Async API overview for the full scenario matrix.
Body
modelstringRequiredCurrent fixed value: seedance-2.0
routestringOptionalCurrent fixed value: default
inputobjectRequired
Business parameters for seedance-2.0 and route default — see the parameter table below.
promptstringRequiredminLength 3maxLength 20000Text prompt for video generation, describing the visuals and style of the content to be generated.
durationintegerOptionalDefault: 5min 4max 15Duration of the generated video, in seconds, default 5 seconds.
resolutionstringOptionalDefault: "720p"Resolution of the generated video, default 720p; 4k outputs ultra-high-definition details.
480p720p1080p4kweb_searchbooleanOptionalWhether to enable web search during generation to supplement information.
aspect_ratiostringRequiredDefault: "16:9"Aspect ratio of the generated video, default 16:9; when set to adaptive, image-to-video follows the source image's ratio, while text-to-video falls back to the default ratio.
1:14:33:416:99:1621:9adaptivegenerate_audiobooleanOptionalDefault: trueWhether to generate audio simultaneously when the model supports it, enabled by default (true).
last_frame_urlstringOptionalURL or asset:// resource ID of the last frame image, used to specify the ending frame of the video.
first_frame_urlstringOptionalURL or asset:// resource ID of the first frame image; this parameter is required when last_frame_url is provided.
return_last_framebooleanOptionalDefault: falseWhether to return the last frame of the generated video, default false.
reference_audio_urlsarrayOptionalmaxItems 3Array of reference audio addresses, where each element is an audio URL or asset:// resource ID; at most 3 clips, with a total duration not exceeding 15 seconds.
Array [ string ]
reference_image_urlsarrayOptionalmaxItems 9Array of reference image addresses, where each element is an image URL or asset:// resource ID; together with the first and last frame images, no more than 9 images in total.
Array [ string ]
reference_video_urlsarrayOptionalmaxItems 3Array of reference video addresses, where each element is a video URL or asset:// resource ID; at most 3 videos, each 2 to 15 seconds long, with a total duration not exceeding 15 seconds.
Array [ string ]
callbackobjectOptional
Terminal-state notification config. When omitted, no callback is delivered — poll the task yourself. See the callback note below.
Provide callback.url when creating a task and HiAPI POSTs to your service once the task reaches a terminal state — no polling needed. The callback payload mirrors the task detail structure; signature verification, delivery retries and idempotency are documented on the Unified Async API overview page.
urlstringRequiredRequired when callback is present. A POST is sent to this URL once the task reaches a terminal state; must be a valid http(s) URL.
whenstringOptionalDefault: "final"Only final is supported today — notified on both success and fail.
finalstoragestringOptionalDefault: "temp"Artifact storage tier: temp (default, retained about 7 days) or persistent (long-term, billed by size). Insufficient balance or exceeding the storage cap silently downgrades to temp; the effective tier is shown in the task detail response.
temppersistentmodelstringRequiredCurrent fixed value: seedance-2.0
routestringOptionalCurrent fixed value: ext
inputobjectRequired
Business parameters for seedance-2.0 and route ext — see the parameter table below.
promptstringRequiredminLength 3maxLength 20000Text prompt used for video generation.
durationintegerOptionalDefault: 5min 4max 15Video duration in seconds.
resolutionstringOptionalDefault: "720p"Video resolution on the ext route: 720p, 1080p, or 4k.
720p1080p4kweb_searchbooleanOptionalWhether to enable web search for generation.
aspect_ratiostringRequiredDefault: "16:9"Video aspect ratio. adaptive follows the source image ratio (image-to-video); for text-to-video it falls back to the default.
1:14:33:416:99:1621:9adaptivegenerate_audiobooleanOptionalDefault: trueWhether to generate synchronized audio when supported.
last_frame_urlstringOptionalLast-frame image URL or asset:// asset id.
first_frame_urlstringOptionalFirst-frame image URL or asset:// asset id.
return_last_framebooleanOptionalDefault: falseWhether to return the last frame of the generated video.
reference_audio_urlsarrayOptionalmaxItems 3Reference audio URLs or asset:// asset ids. Up to 3 audio clips, total duration no more than 15 seconds.
Array [ string ]
reference_image_urlsarrayOptionalmaxItems 9Reference image URLs or asset:// asset ids. Combined count with first/last frame images should not exceed 9.
Array [ string ]
callbackobjectOptional
Terminal-state notification config. When omitted, no callback is delivered — poll the task yourself. See the callback note below.
Provide callback.url when creating a task and HiAPI POSTs to your service once the task reaches a terminal state — no polling needed. The callback payload mirrors the task detail structure; signature verification, delivery retries and idempotency are documented on the Unified Async API overview page.
urlstringRequiredRequired when callback is present. A POST is sent to this URL once the task reaches a terminal state; must be a valid http(s) URL.
whenstringOptionalDefault: "final"Only final is supported today — notified on both success and fail.
finalstoragestringOptionalDefault: "temp"Artifact storage tier: temp (default, retained about 7 days) or persistent (long-term, billed by size). Insufficient balance or exceeding the storage cap silently downgrades to temp; the effective tier is shown in the task detail response.
temppersistentRequest examples
# Submit an async task; returns a taskId immediately (no waiting for generation)
curl -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"input": {
"prompt": "…",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"return_last_frame": false
}
}' const res = await fetch("https://api.hiapi.ai/v1/tasks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HIAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seedance-2.0",
input: {
"prompt": "…",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"return_last_frame": false
}
}),
});
const task = await res.json();
// { code: 200, message: "success", data: { taskId } } import os, requests
res = requests.post(
"https://api.hiapi.ai/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "seedance-2.0",
"input": {
"prompt": "…",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
"return_last_frame": False
}
},
)
print(res.json()) # { code, message, data: { taskId } } 200 OK
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR"
}
} 400 Bad Request
{
"code": 400,
"message": "invalid request",
"data": null,
"error_code": "INVALID_REQUEST"
} # Submit an async task; returns a taskId immediately (no waiting for generation)
curl -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0@ext",
"input": {
"prompt": "…",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"return_last_frame": false
}
}' const res = await fetch("https://api.hiapi.ai/v1/tasks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HIAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seedance-2.0@ext",
input: {
"prompt": "…",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"return_last_frame": false
}
}),
});
const task = await res.json();
// { code: 200, message: "success", data: { taskId } } import os, requests
res = requests.post(
"https://api.hiapi.ai/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "seedance-2.0@ext",
"input": {
"prompt": "…",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
"return_last_frame": False
}
},
)
print(res.json()) # { code, message, data: { taskId } } 200 OK
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR"
}
} 400 Bad Request
{
"code": 400,
"message": "invalid request",
"data": null,
"error_code": "INVALID_REQUEST"
} Get task detail
https://api.hiapi.ai/v1/tasks/:id Response fields
taskIdstringRequiredTask ID, always prefixed with tk-hiapi-.
modelstringRequiredResolved full model name. Tasks submitted with the route parameter return base@route (e.g. gpt-image-2/text-to-image@ext); otherwise identical to the name passed at creation.
routestringOptionalPresent only when the task was submitted with an explicit route parameter; echoes the submitted value.
statusstringRequiredTask status.
queued Queued, not started yet.
handling Being processed.
archiving Processing finished, artifacts being prepared.
success Terminal: completed, artifacts available (output returned).
fail Terminal: failed (error returned).
After submission, check status: success and fail are terminal, everything else is non-terminal. Poll every 1–3 seconds until terminal. On success, download artifacts from output[].url and transfer them before expireAt; pass storage: "persistent" at creation time when long-term retention is needed.
creatednumberRequiredTask creation time (Unix seconds).
completednumberRequiredUnix seconds when the task reached a terminal state; fixed to 0 while not terminal.
outputarrayOptional
Present only when status == success. Artifact list — always an array; a single task may return multiple types at once (e.g. video + first_frame).
Array [ object ]
Array items
urlstringRequiredArtifact URL, directly downloadable.
typestringRequiredCurrent possible values: video, image, audio, first_frame, last_frame, thumbnail; more may be added later.
expireAtnumberRequiredUnix seconds until which the artifact remains accessible; download or transfer before it expires.
errorobjectOptional
Present only when status == fail.
codestringRequiredBusiness error code.
messagestringRequiredError description.
Response examples
Success
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR",
"model": "happyhorse-1-0",
"status": "success",
"created": 1777282033,
"completed": 1777282099,
"output": [
{
"url": "https://cdn.hiapi.ai/tasks/.../video.mp4",
"type": "video",
"expireAt": 1777886899
}
]
}
} Processing (non-terminal)
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "archiving",
"created": 1777282033,
"completed": 0
}
} Failed
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "fail",
"created": 1777282033,
"completed": 1777282099,
"error": {
"code": "TASK_FAILED",
"message": "task failed"
}
}
} Articles
View all articles →Related Models
View all models →Same Type
-
Kling 3.0 Kuaishou $0.100 /second -
Creatify Boreal Creatify $0.015 /second -
Veo 3.1 Lite Google $0.060 /second -
Ray 3.2 Luma $0.214 /video -
LTX 2.5 Fast Lightricks $0.086 /second -
MiniMax H3 MiniMax $0.072 /second -
Vidu Q4 Preview Vidu $0.051 /second -
Kling 2.5 Kuaishou $0.060 /second -
Grok Imagine 1.5 Lite xAI $0.029 /second -
Kling 4.0 Kuaishou $0.330 /second -
Kling 3.0 Turbo Kuaishou $0.130 /second -
Wan 3.0 Video Alibaba $0.040 /second





