ModelSiteAPI
Seedance 2.0

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

ScenarioIn vendor docsOur statusExample
Text to videoYesSupportedjump
Image to video: first frameYesSupportedjump
Image to video: Base64 imageYesSupported (untested)jump
Image to video: first and last frameYesSupportedjump
Omni reference (image / video / audio and combinations)YesSupported (audio cannot be the only input; with a reference video it is priced on the with-video tier)jump
Edit a videoYesSupportedjump
Extend a videoYesSupportedjump
4K outputYes (2.0 only)Supported (dreamina-seedance-2-0 only; not mini)jump
Web searchYesPartial (tools is passed through, text-only input; any tool fee charged by upstream is not billed separately)jump
Return the last frameYesSupportedjump
Streaming stream: true—Not supported: task creation has no streaming mode; true returns 400 InvalidParameter—
Draft mode draftVendor: not for 2.0Not supported: not offered by the 2.0 family—
Offline inference service_tier: flexVendor: not for 2.0Not supported: not offered by the 2.0 family—
Portrait-friendly creation: asset:// library, preset virtual portraits, authorized real-person assetsYesNot available: the library is internal to the upstream account and unavailable here—
Cancel / delete a task, list tasksYesNot supported: only create and query are provided—
Seedance 2.0 FastYesNot available: not on sale—
callback_url status callbackYesNot supported: sending it returns 400 InvalidParameter; poll the task—
Seedance 2.5 / 1.0 familiesYesNot 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

ModelDescription
dreamina-seedance-2-0Seedance 2.0: 480p / 720p / 1080p / 4k
dreamina-seedance-2-0-miniSeedance 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.

FieldTypeDescription
modelstring (required)dreamina-seedance-2-0 / dreamina-seedance-2-0-mini
contentarray (required)non-empty array; item types are text / image_url / video_url / audio_url only
resolutionstringdefault 720p. Platform-handled: case-insensitive, lowercased before forwarding; only priced tiers are accepted
ratiostring16:9 / 4:3 / 1:1 / 3:4 / 9:16 / 21:9 / adaptive, default adaptive
durationintegerseconds, [4, 15], or -1 (model picks; cost follows the actual length, use with care)
generate_audiobooleangenerate synchronized audio, default true
watermarkbooleanadd an "AI generated" watermark, default false
return_last_framebooleanreturn the last frame image, default false
seedinteger[-1, 2147483647]; whether it takes effect on 2.0 follows the vendor
execution_expires_afterintegertask timeout in seconds, [3600, 259200], default 172800
toolsarrayonly [{"type": "web_search"}], see "Web search"
priority / safety_identifierinteger / stringpassed 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 typeFieldsDescription
texttextprompt, 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_urlimage_url.url + rolepublic URL or data:image/<lowercase-format>;base64,...; role: first_frame (may be omitted) / last_frame / reference_image
video_urlvideo_url.url + rolerole is always reference_video (required); public URL
audio_urlaudio_url.url + rolerole 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 reference_image, 03 reference_video, 0~3 reference_audio, at least 1 image or 1 video; audio alone is not allowed).

AssetLimits (vendor)
Imagejpeg / 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
Videomp4 / mov (H.264 / H.265); [2, 15] s per clip, up to 3 clips, ≤ 15 s total; ≤ 200 MB per clip; [24, 60] fps
Audiowav / 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
}
EOF

Create 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 480p and the shortest 4 seconds for the lowest cost; change resolution / duration ([4, 15]) as needed.
  • dreamina-seedance-2-0-mini works too: swap model; it only offers 480p / 720p.
  • generate_audio defaults to true; set it to false for a silent video; generated audio is mono.
  • Optional fields such as return_last_frame, watermark and seed are 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" and duration 5.
  • In the example responses the usage figures 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
}
EOF

Create 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

  • role first_frame or omitted both mean first frame; only one image.
  • ratio: adaptive makes 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 using adaptive.
  • 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 480p and the shortest 4 seconds for the lowest cost; change resolution / duration ([4, 15]) as needed.
  • dreamina-seedance-2-0-mini works too: swap model; it only offers 480p / 720p.
  • Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
  • In the example responses the usage figures 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
}
EOF

Create 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 role first_frame and last_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 480p and the shortest 4 seconds for the lowest cost; change resolution / duration ([4, 15]) as needed.
  • dreamina-seedance-2-0-mini works too: swap model; it only offers 480p / 720p.
  • Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
  • In the example responses the usage figures 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
}
EOF

Create 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 09, 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-mini works too: swap model; it only offers 480p / 720p.
  • Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
  • In the example responses the usage figures 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
}
EOF

Create 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 a reference_image, and the prompt describes the edit; there is no separate edit switch (omni_reference_task_type is 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-mini works too: swap model; it only offers 480p / 720p.
  • Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
  • In the example responses the usage figures 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
}
EOF

Create 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-mini works too: swap model; it only offers 480p / 720p.
  • Asset URLs are the vendor's original example links, for demonstration only; use your own assets in production.
  • In the example responses the usage figures 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
}
EOF

Create 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-0 only; dreamina-seedance-2-0-mini with 4k returns 400 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 usage figures 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.

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"
    }
  ]
}
EOF

Create 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_search in the query result (0 means no search).
  • Partial support: tools is 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-mini works too: swap model; it only offers 480p / 720p.
  • In the example responses the usage figures 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
}
EOF

Create 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's first_frame (or download it first) to chain clips.
  • The examples use 480p and the shortest 4 seconds for the lowest cost; change resolution / duration ([4, 15]) as needed.
  • dreamina-seedance-2-0-mini works too: swap model; it only offers 480p / 720p.
  • In the example responses the usage figures 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

FieldDescription
idtask token (the id returned at creation)
statusqueued / running / succeeded / failed / expired (the vendor also defines cancelled; the platform provides no cancel)
content.video_urlgenerated video (mp4) URL, only on success, valid for 24 hours; store it promptly
content.last_frame_urllast frame URL, only when return_last_frame was true
usage.completion_tokens / usage.total_tokenstokens consumed by the video (including the input video conversion), also the settlement basis
usage.tool_usage.web_searchweb search count (only when tools is used)
resolution / ratio / duration / framespersecond / seed / generate_audioactual output spec; duration is an integer approximation in seconds
errornull 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 / valueBehaviorNote
resolution: 1080p / 4k on dreamina-seedance-2-0-miniRejected (400 InvalidParameter)Not supported by the vendor either
resolution written as 720PAcceptedLowercased before forwarding
content empty, missing, or an item type outside the fourRejected
frames, camera_fixed, draft, output_format, omni_reference_task_type, service_tier: flexPassed throughMarked unsupported on 2.0 by the vendor; upstream rejects them
priority, seed, asset:// assetsPassed throughWhether upstream honors them is unverified
stream: trueRejected (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 tasksNot offeredSee above

Platform extensions

  • id is an opaque token issued by the platform, not the upstream task ID; in create and query responses id is replaced and model is 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.code is returned as is; error.message keeps 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_url is not supported: the task ID in a callback body could not be looked up on the platform, so sending it returns 400; 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_tokens is 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:

StageHTTPBody shape
Entrance validation, task not found400 / 404Ark-native: {"error": {"code", "message"}}
Upstream rejects the create request400 / 4xx{"error": {"message", "type", "code"}}
Task fails after creation200 (poll)error inside the task object
Auth / balance / rate limit401 / 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.

On this page