Seedance 2.0 Video Generation
POST /api/v3/contents/generations/tasks — Seedance 2.0 / 2.0 mini native video protocol, with complete examples per scenario (text, first frame, first+last frame, omni reference, edit, extend, 4K, web search)
The Seedance 2.0 family supports text-to-video, image-to-video (first frame / first+last frame), omni reference, video editing and video extension. This family uses the Ark native protocol: request and response follow the vendor's create / query video task shapes and parameters are passed through unchanged. The page starts with a scenario overview, then gives a runnable request and the responses of every state per scenario. Prompts and asset URLs in the examples are copied verbatim from the vendor's documentation.
The path matches the vendor's: replace https://ark.cn-beijing.volces.com/api/v3 in the vendor's examples with https://api.modelsite.ai/api/v3 and use a platform API key; the vendor's SDK (with base_url pointing to the platform) works as is. /v1/contents/generations/tasks is an equivalent alias and a task can be queried on either path. Field ranges and defaults follow the vendor docs.
Scenario overview
| Scenario | In vendor docs | Our status | Example |
|---|---|---|---|
| Text to video | Yes | Supported | jump |
| Image to video: first frame | Yes | Supported | jump |
| Image to video: Base64 image | Yes | Supported (untested) | jump |
| Image to video: first and last frame | Yes | Supported | jump |
| Omni reference (image / video / audio and combinations) | Yes | Supported (audio cannot be the only input; with a reference video it is priced on the with-video tier) | jump |
| Edit a video | Yes | Supported | jump |
| Extend a video | Yes | Supported | jump |
| 4K output | Yes (2.0 only) | Supported (dreamina-seedance-2-0 only; not mini) | jump |
| Web search | Yes | Partial (tools is passed through, text-only input; any tool fee charged by upstream is not billed separately) | jump |
| Return the last frame | Yes | Supported | jump |
Streaming stream: true | — | Not supported: task creation has no streaming mode; true returns 400 InvalidParameter | — |
Draft mode draft | Vendor: not for 2.0 | Not supported: not offered by the 2.0 family | — |
Offline inference service_tier: flex | Vendor: not for 2.0 | Not supported: not offered by the 2.0 family | — |
Portrait-friendly creation: asset:// library, preset virtual portraits, authorized real-person assets | Yes | Not available: the library is internal to the upstream account and unavailable here | — |
| Cancel / delete a task, list tasks | Yes | Not supported: only create and query are provided | — |
| Seedance 2.0 Fast | Yes | Not available: not on sale | — |
callback_url status callback | Yes | Not supported: sending it returns 400 InvalidParameter; poll the task | — |
| Seedance 2.5 / 1.0 families | Yes | Not available: this page covers 2.0 and 2.0 mini only | — |
Evidence: every section is labelled either "Tested" or "Per vendor docs (not tested)". "Tested" means a real call with the live test account succeeded.
Common notes
Models
| Model | Description |
|---|---|
dreamina-seedance-2-0 | Seedance 2.0: 480p / 720p / 1080p / 4k |
dreamina-seedance-2-0-mini | Seedance 2.0 mini: 480p / 720p (no 1080p or 4k) |
Sellable resolutions follow the pricing on the models page; an unpriced tier returns 400 InvalidParameter.
Common request and polling code
The Python examples below all use create and wait from here.
import time, requests
API_KEY = "sk-ms-xxxxxxxx"
URL = "https://api.modelsite.ai/api/v3/contents/generations/tasks"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def create(body):
r = requests.post(URL, headers=HEADERS, json=body, timeout=60)
r.raise_for_status()
return r.json()["id"]
def wait(task_id, interval=10):
while True:
task = requests.get(f"{URL}/{task_id}", headers=HEADERS, timeout=30).json()
if task["status"] == "succeeded":
return task
if task["status"] in ("failed", "expired", "cancelled"):
raise RuntimeError(task.get("error"))
time.sleep(interval)Request body
All fields sit at the top level and are forwarded unchanged except the ones marked as platform-handled; the platform neither rewrites nor fills defaults.
| Field | Type | Description |
|---|---|---|
model | string (required) | dreamina-seedance-2-0 / dreamina-seedance-2-0-mini |
content | array (required) | non-empty array; item types are text / image_url / video_url / audio_url only |
resolution | string | default 720p. Platform-handled: case-insensitive, lowercased before forwarding; only priced tiers are accepted |
ratio | string | 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / 21:9 / adaptive, default adaptive |
duration | integer | seconds, [4, 15], or -1 (model picks; cost follows the actual length, use with care) |
generate_audio | boolean | generate synchronized audio, default true |
watermark | boolean | add an "AI generated" watermark, default false |
return_last_frame | boolean | return the last frame image, default false |
seed | integer | [-1, 2147483647]; whether it takes effect on 2.0 follows the vendor |
execution_expires_after | integer | task timeout in seconds, [3600, 259200], default 172800 |
tools | array | only [{"type": "web_search"}], see "Web search" |
priority / safety_identifier | integer / string | passed through; whether priority takes effect upstream is unverified |
The vendor marks these as not supported on the 2.0 family, do not send them: frames, camera_fixed, draft, output_format, omni_reference_task_type, service_tier: "flex". The platform does not block them; upstream rejects them.
content type | Fields | Description |
|---|---|---|
text | text | prompt, optional (may be absent with media-only input); refer to assets as "image n" / "video n" / "audio n" (order among assets of the same kind in the array, starting at 1) |
image_url | image_url.url + role | public URL or data:image/<lowercase-format>;base64,...; role: first_frame (may be omitted) / last_frame / reference_image |
video_url | video_url.url + role | role is always reference_video (required); public URL |
audio_url | audio_url.url + role | role is always reference_audio (required); public URL or data:audio/<lowercase-format>;base64,... |
The three input scenarios are mutually exclusive: first frame (1 image), first and last frame (2 images, role required) and multimodal reference (19 3 reference_image, 0reference_video, 0~3 reference_audio, at least 1 image or 1 video; audio alone is not allowed).
| Asset | Limits (vendor) |
|---|---|
| Image | jpeg / png / webp / bmp / tiff / gif (2.0 also heic / heif); aspect ratio [0.4, 2.5]; side [300, 6000] px; < 30 MB each; request body ≤ 64 MB |
| Video | mp4 / mov (H.264 / H.265); [2, 15] s per clip, up to 3 clips, ≤ 15 s total; ≤ 200 MB per clip; [24, 60] fps |
| Audio | wav / mp3; [2, 15] s per clip, up to 3 clips, ≤ 15 s total; ≤ 15 MB per clip |
The vendor states that the Seedance 2.0 family does not accept reference images / videos containing real human faces; such uploads are rejected by upstream.
Tasks with a reference video are priced on the "input includes video" tier (a lower unit price than the no-video tier); the platform only accepts video_url when the model has that tier configured, otherwise it returns 400 InvalidParameter (video input is not supported yet on this model). Both models have the tier configured today.
Text to video
When to use:You only have a text description and no assets.
Evidence:Tested (live test account): text-to-video at 480P / 720P on both dreamina-seedance-2-0 and dreamina-seedance-2-0-mini has successful settled orders online (2026-10-10 to 2026-10-18); on 2026-10-19 dreamina-seedance-2-0 was also tested at 480p 4 s (completion_tokens 40,594) and 1080p 5 s (completion_tokens 245,025), both succeeded, and the two success responses below are taken from those runs with the ID, timestamps and video URL replaced by placeholders. The 1080p test used a prompt without a well-known character: a prompt with one is refused by the upstream for copyright restriction and not billed (see "Failed · copyright"). The prompt in this example is copied from the text-to-video example of the vendor's create-task page.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "写实风格,晴朗的蓝天之下,一大片白色的雏菊花田,镜头逐渐拉近,最终定格在一朵雏菊花的特写上,花瓣上有几颗晶莹的露珠"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- The examples use
480pand the shortest4seconds for the lowest cost; changeresolution/duration([4, 15]) as needed. dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.generate_audiodefaults totrue; set it tofalsefor a silent video; generated audio is mono.- Optional fields such as
return_last_frame,watermarkandseedare listed in the request body above. - The 1080p success response comes from a different prompt without a well-known character; the request has the same shape, with
resolution"1080p"andduration5. - In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
First frame to video
When to use:You have an image that should be the first frame. The image may also be sent as a Base64 data URI.
Evidence:Per vendor docs (not tested). Prompt and first-frame image are copied from the "audio video – first frame" example of the vendor's create-task page; the Base64 example's prompt comes from its "image to video – base64" example, with placeholder Base64 data.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "女孩抱着狐狸,女孩睁开眼,温柔地看向镜头,狐狸友善地抱着,镜头缓缓拉出,女孩的头发被风吹动,可以听到风声"
},
{
"type": "image_url",
"image_url": {
"url": "https://arkdocs.tos-cn-beijing.volces.com/images/video-generation/i2v_foxrgirl.png"
},
"role": "first_frame"
}
],
"resolution": "480p",
"ratio": "adaptive",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
rolefirst_frameor omitted both mean first frame; only one image.ratio: adaptivemakes the output follow the input image; a fixed ratio that differs from the image can cause stretching or jumps — the vendor advises cropping the image or usingadaptive.- Base64 data counts toward the 64 MB body limit, avoid it for large files; the format name is lowercase, e.g.
data:image/png;base64,.... - The examples use
480pand the shortest4seconds for the lowest cost; changeresolution/duration([4, 15]) as needed. dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
First and last frame to video
When to use:You have a start and an end image and want a smooth transition between them.
Evidence:Per vendor docs (not tested). Prompt and frames are copied from the "audio video – first and last frame" example of the vendor's create-task page.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "图中女孩对着镜头说“茄子”,360度环绕运镜"
},
{
"type": "image_url",
"image_url": {
"url": "https://arkdocs.tos-cn-beijing.volces.com/images/video-generation/seepro_first_frame.jpeg"
},
"role": "first_frame"
},
{
"type": "image_url",
"image_url": {
"url": "https://arkdocs.tos-cn-beijing.volces.com/images/video-generation/seepro_last_frame.jpeg"
},
"role": "last_frame"
}
],
"resolution": "480p",
"ratio": "adaptive",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- The two images need
rolefirst_frameandlast_frame(they may be the same image); with different aspect ratios the first frame wins and the last frame is cropped. - The official first-and-last-frame assets are 1:1 images, hence
ratio: adaptive. - The examples use
480pand the shortest4seconds for the lowest cost; changeresolution/duration([4, 15]) as needed. dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
Omni reference
When to use:Generate a new video from several reference images, videos and audios: it inherits the look from images, camera work and motion from videos, and voice and rhythm from audio.
Evidence:The with-reference-video billing path is tested (a 480P 4 s task priced on the with-video tier has a successful settled order online, 2026-10-11); this specific scenario and its assets: per vendor docs (not tested). Prompt and all assets are copied from the omni-reference example of the vendor's Seedance 2.0 tutorial.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "全程使用视频1的第一视角构图,全程使用音频1作为背景音乐。第一人称视角果茶宣传广告,seedance牌「苹苹安安」苹果果茶限定款;首帧为图片1,你的手摘下一颗带晨露的阿克苏红苹果,轻脆的苹果碰撞声;2-4 秒:快速切镜,你的手将苹果块投入雪克杯,加入冰块与茶底,用力摇晃,冰块碰撞声与摇晃声卡点轻快鼓点,背景音:「鲜切现摇」;4-6 秒:第一人称成品特写,分层果茶倒入透明杯,你的手轻挤奶盖在顶部铺展,在杯身贴上粉红包标,镜头拉近看奶盖与果茶的分层纹理;6-8 秒:第一人称手持举杯,你将图片2中的果茶举到镜头前(模拟递到观众面前的视角),杯身标签清晰可见,背景音「来一口鲜爽」,尾帧定格为图片2。背景声音统一为女生音色。"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg"
},
"role": "reference_image"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg"
},
"role": "reference_image"
},
{
"type": "video_url",
"video_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4"
},
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3"
},
"role": "reference_audio"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- Any combination: images 0
9, videos 03, audios 0~3; "text + audio" and audio-only are not supported, include at least 1 image or 1 video. - Every media block needs a
role; refer to assets as "image n" / "video n" / "audio n" in the prompt. - With a reference video the task is priced on the with-video tier; billed tokens include the input video duration, and the vendor's minimum token usage applies.
- The vendor's example uses 11 s; the shortest 4 s is used here to cut cost, so the beats in the prompt get truncated.
dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
Edit a video
When to use:Modify an existing video: replace a subject, add or remove objects, repaint a region, with camera work unchanged.
Evidence:The with-reference-video billing path is tested (a 480P 4 s task priced on the with-video tier has a successful settled order online, 2026-10-11); this specific scenario and its assets: per vendor docs (not tested). Prompt and assets are copied from the video-editing example of the vendor's Seedance 2.0 tutorial.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "将视频1礼盒中的香水替换成图片1中的面霜,运镜不变"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_edit_pic1.jpg"
},
"role": "reference_image"
},
{
"type": "video_url",
"video_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_edit_video1.mp4"
},
"role": "reference_video"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- The request shape is the same as omni reference: the video to edit is a
reference_video, replacement content areference_image, and the prompt describes the edit; there is no separate edit switch (omni_reference_task_typeis 2.5 only). - With a reference video it is priced on the with-video tier and the minimum token usage applies.
dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
Extend a video
When to use:Extend a video forward or backward, or chain up to 3 clips into one continuous video.
Evidence:The with-reference-video billing path is tested (a 480P 4 s task priced on the with-video tier has a successful settled order online, 2026-10-11); this specific scenario and its assets: per vendor docs (not tested). Prompt and the three videos are copied from the video-extension example of the vendor's Seedance 2.0 tutorial.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "视频1中的拱形窗户打开,进入美术馆室内,接视频2,之后镜头进入画内,接视频3"
},
{
"type": "video_url",
"video_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video1.mp4"
},
"role": "reference_video"
},
{
"type": "video_url",
"video_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video2.mp4"
},
"role": "reference_video"
},
{
"type": "video_url",
"video_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_extend_video3.mp4"
},
"role": "reference_video"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- Extending one clip usually yields only its tail; ask for the original in the prompt if needed (e.g. "... then continue with video 1"). With 2~3 clips the transitions are filled in and the result contains the originals plus new content.
- Input videos total ≤ 15 s; all input video duration counts toward tokens, making this one of the costliest 480p scenarios on this page.
- The vendor's example uses 8 s; the shortest 4 s is used here — whether upstream accepts a 4 s chained output is unverified.
dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
4K output
When to use:Professional use that needs 4K output (10-bit, H.265 / HEVC).
Evidence:Tested (live test account, 2026-10-19): dreamina-seedance-2-0, 4k, 16:9, 4 s text-to-video succeeded with completion_tokens 785,700; the success response below is taken from that run with the ID, timestamps and video URL replaced by placeholders. The request in this example (one reference image, ratio: adaptive) is the 4 s version of the vendor's example and was not tested on its own. Prompt and reference image are copied from the 4K example of the vendor's Seedance 2.0 tutorial (the vendor uses 15 s; the shortest 4 s is used here).
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "生成一段15秒的越野摩托竞技广告感短片。参考图片作为中段飞跃高潮的参考。镜头逻辑依次为:1)中景跟拍,车手从远处沿土坡高速逼近跳台;2)超近低机位后轮飞砂特写,轮胎抓地甩出大量泥土和砂石;3)中近景展示骑手控车、手部发力、悬挂压缩与机械震动;4)侧向英雄中景拍车手冲坡腾空飞跃,画面状态接近图一,泥土在逆光中大面积飞散;5)腾空近景帅气细节,突出头盔护目镜、手部控把、轮胎悬空或车身侧面局部;6)中景跟拍落地,悬挂压缩回弹,随后继续沿土坡赛道高速冲刺收尾。全片同一名骑手、同一辆车、同一条赛道,镜头景别和角度区分清楚,不重复,动作连贯,画面有真实越野跟拍抖动感、速度感、扬土感和夕阳逆光竞技氛围。"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_4k.png"
},
"role": "reference_image"
}
],
"resolution": "4k",
"ratio": "adaptive",
"duration": 4,
"generate_audio": true,
"watermark": false
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
dreamina-seedance-2-0only;dreamina-seedance-2-0-miniwith4kreturns400 InvalidParameter.- 4K output is H.265 / HEVC; some players or browsers cannot play it directly; the vendor's 4K concurrency limit is stricter (1 for enterprise users).
- This is the costliest scenario on this page: 4K uses about 19× the tokens of 480p at its own unit price; validate with a short duration first.
- Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
Web search
When to use:The prompt involves timely or look-up-worthy things (products, weather, the look of rare animals, ...).
Evidence:Per vendor docs (not tested). Prompt copied from the web-search example of the vendor's Seedance 2.0 tutorial (the vendor uses 11 s; the shortest 4 s is used here).
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "微距镜头对准叶片上翠绿的玻璃蛙。焦点逐渐从它光滑的皮肤,转移到它完全透明的腹部,一颗鲜红的心脏正在有力地、规律地收缩扩张。"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"generate_audio": true,
"watermark": false,
"tools": [
{
"type": "web_search"
}
]
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- Text-only input; the model decides whether to search, and the actual count is
usage.tool_usage.web_searchin the query result (0 means no search). - Partial support:
toolsis passed through; any extra search fee charged upstream is not billed separately by the platform, and it is not verified that the field always takes effect upstream. - Adds some latency.
dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
Return the last frame
When to use:You want to use the last frame of one clip as the first frame of the next to chain a longer video.
Evidence:Per vendor docs (not tested). return_last_frame comes from the parameter description of the vendor's create-task page, which has no standalone example; this example uses the official text-to-video prompt.
Create request
curl https://api.modelsite.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer sk-ms-xxxxxxxx" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"model": "dreamina-seedance-2-0",
"content": [
{
"type": "text",
"text": "写实风格,晴朗的蓝天之下,一大片白色的雏菊花田,镜头逐渐拉近,最终定格在一朵雏菊花的特写上,花瓣上有几颗晶莹的露珠"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"generate_audio": true,
"watermark": false,
"return_last_frame": true
}
EOFCreate response
{
"id": "video_<opaque-token>",
"status": "queued"
}id is an opaque task token issued by the platform; use it as-is when querying. Creating a task is not billed. The real response carries more fields such as created_at; rely on id only.
Poll request
curl "https://api.modelsite.ai/api/v3/contents/generations/tasks/video_<opaque-token>" \
-H "Authorization: Bearer sk-ms-xxxxxxxx"Responses by state
{
"id": "video_<opaque-token>",
"status": "running"
}Notes and limits
- On success take the last frame image (jpeg, no watermark) from
content.last_frame_url, valid for 24 hours; use it as the next request'sfirst_frame(or download it first) to chain clips. - The examples use
480pand the shortest4seconds for the lowest cost; changeresolution/duration([4, 15]) as needed. dreamina-seedance-2-0-miniworks too: swapmodel; it only offers480p/720p.- In the example responses the
usagefigures for 480p 4 s, 1080p 5 s and 4K 4 s text-to-video are measured values; the others are illustrative, estimated with the vendor's formula (width × height × fps × duration / 1024, plus the input video duration when a video is supplied); go by the actual response.
Poll response fields
| Field | Description |
|---|---|
id | task token (the id returned at creation) |
status | queued / running / succeeded / failed / expired (the vendor also defines cancelled; the platform provides no cancel) |
content.video_url | generated video (mp4) URL, only on success, valid for 24 hours; store it promptly |
content.last_frame_url | last frame URL, only when return_last_frame was true |
usage.completion_tokens / usage.total_tokens | tokens consumed by the video (including the input video conversion), also the settlement basis |
usage.tool_usage.web_search | web search count (only when tools is used) |
resolution / ratio / duration / framespersecond / seed / generate_audio | actual output spec; duration is an integer approximation in seconds |
error | null on success; {"code", "message"} on failure, and usage may be null; common: VIDEO_CONTENT_COPYRIGHT_RESTRICTED (a well-known person / brand / character IP is involved; change assets and prompt and retry). error.code is returned as is; official codes (copyright restriction, input / output sensitive content, ...) keep their official wording, and any other failure text is cleaned: one that carries a URL, an internal ID, a model name or channel wording becomes the fixed the video task failed; please retry later or adjust the input |
status (observed) | while waiting, status may flip between queued and running; keep polling until a final state |
State flow: queued → running → succeeded / failed / expired. Failed and expired tasks are not billed. A task is queryable for a limited window (the vendor's is the last 7 days); beyond it, or with an invalid token, 404 is returned:
{
"error": {
"code": "NotFound",
"message": "task not found or expired (a task is queryable for a limited window)"
}
}This entrance has create and query only: the vendor's DELETE /contents/generations/tasks/{id} (cancel / delete) and the task list GET /contents/generations/tasks are not offered. Wait for a created task to reach a final state.
Unsupported or different parameters
| Parameter / value | Behavior | Note |
|---|---|---|
resolution: 1080p / 4k on dreamina-seedance-2-0-mini | Rejected (400 InvalidParameter) | Not supported by the vendor either |
resolution written as 720P | Accepted | Lowercased before forwarding |
content empty, missing, or an item type outside the four | Rejected | |
frames, camera_fixed, draft, output_format, omni_reference_task_type, service_tier: flex | Passed through | Marked unsupported on 2.0 by the vendor; upstream rejects them |
priority, seed, asset:// assets | Passed through | Whether upstream honors them is unverified |
stream: true | Rejected (400 InvalidParameter) | Task creation has no streaming mode; false or omitted is fine |
callback_url (non-empty) | Rejected (400 InvalidParameter) | The platform does not push callbacks; poll the task with GET. An empty string or null counts as not sent |
DELETE a task, list tasks | Not offered | See above |
Platform extensions
idis an opaque token issued by the platform, not the upstream task ID; in create and query responsesidis replaced andmodelis rewritten to the model name you requested (the upstream model name is not exposed); the response keeps only the fields the official get-task page defines (id,model,status,content,usage,created_at,updated_at,seed,resolution,ratio,duration,frames,framespersecond,generate_audio,service_tier,execution_expires_after,draft,priority,output_format,safety_identifier,tools,error); no other fields (internal task numbers,progress) appear.- Insufficient balance returns 402; a succeeded task is settled on
usage.completion_tokens. - Entrance validation failures use the Ark-native shape
{"error": {"code", "message"}}(HTTP 400). - On task failure
error.codeis returned as is;error.messagekeeps the official wording for official codes (request IDs removed), while any other text that carries a URL, internal ID, model name or channel wording is replaced by a fixed message. callback_urlis not supported: the task ID in a callback body could not be looked up on the platform, so sending it returns400; rely on polling.
Billing
Billed by the tokens actually consumed, i.e. usage.completion_tokens in the query result × the tier's unit price (USD per million tokens; the models page can show CNY):
- Unit prices are tiered by output resolution, and with vs without a reference video are two tiers (with-video is lower).
- The vendor sets a minimum token usage when the input contains a video: below the floor the floor is billed; the upstream value already reflects it and the platform matches.
- Token estimate: width × height × fps × duration (s) / 1024; with a video input, add the input video duration. The measured
usage.completion_tokensis about 1% above this formula (checked 2026-10-19: 1080p 5 s estimates 243,000 and measured 245,025; 4K 4 s estimates 777,600 and measured 785,700); go by the returned value. - Unit prices are per token and differ by resolution tier: the official per-million-token price of the 4K tier (CNY 26) is lower than that of the 1080p tier (CNY 51); this is official pricing, not an error. A 4K task uses far more tokens (measured: 4K 4 s 785,700 tokens, 1080p 5 s 245,025 tokens), so its total cost is still higher than 1080p.
- Creating a task is not billed; failed and expired tasks are not billed. See the models page for unit prices.
Error handling
Check the HTTP status first:
| Stage | HTTP | Body shape |
|---|---|---|
| Entrance validation, task not found | 400 / 404 | Ark-native: {"error": {"code", "message"}} |
| Upstream rejects the create request | 400 / 4xx | {"error": {"message", "type", "code"}} |
| Task fails after creation | 200 (poll) | error inside the task object |
| Auth / balance / rate limit | 401 / 402 / 429 | {"error": {"type", "message"}} |
{
"error": {
"code": "InvalidParameter",
"message": "resolution \"4k\" is not available for dreamina-seedance-2-0-mini (sold: 480p, 720p)"
}
}Missing model, missing / empty content, unsupported type, unpriced resolution and unsupported video input are caught at the entrance; no task is created and nothing is billed.
Prompts and assets come from the vendor's create video task page and Seedance 2.0 tutorial; the failure code comes from the vendor's error codes; IDs and URLs are placeholders.
MiniMax Video Generation
POST /v2/video_generation — MiniMax H3 and H3-Max native video protocol, with complete examples per scenario (text, first / last / first+last frame, reference image / video / audio, prompt expansion)
Use ModelSite in ComfyUI
Two ways to generate video and images with ModelSite models in ComfyUI: ComfyUI's own API nodes pointed at ModelSite, or the ModelSite node pack, with what works, what does not, and how each was checked