Seedance 2.0 / 2.5 Video Generation
Use the OpenAI-compatible video task API to call Seedance 2.0. The API is asynchronous: submit a task, receive a task_id, then poll the task until the video is ready.
Endpoints
OpenAI-compatible entry
| Operation | Method | Path |
|---|---|---|
| Upload asset | POST | /v1/sd/assets |
| Query asset | GET | /v1/sd/assets/{asset_id} |
| Create video task | POST | /v1/video/generations |
| Query task status | GET | /v1/video/generations/{task_id} |
| Download video content | GET | /v1/videos/{task_id}/content |
The download path is
/v1/videos/{task_id}/content(note it isvideos, notvideo/generations).
Volcano / Ark-compatible entry (recommended for Ark clients)
If you already integrate against the Volcano Ark API, use the paths below. Request and response bodies match Ark; only base_url and key are platform-specific. The three prefixes are equivalent:
| Operation | Method | Equivalent paths (pick any) |
|---|---|---|
| Create video task | POST | /api/v3/contents/generations/tasks/v3/contents/generations/tasks/ark/api/v3/contents/generations/tasks |
| Query task status | GET | /api/v3/contents/generations/tasks/{task_id}/v3/contents/generations/tasks/{task_id}/ark/api/v3/contents/generations/tasks/{task_id} |
| Upload asset | POST | /api/v3/sd/assets/v3/sd/assets/ark/api/v3/sd/assets(also /v1/sd/assets) |
| Query asset | GET | /api/v3/sd/assets/{asset_id}/v3/sd/assets/{asset_id}/ark/api/v3/sd/assets/{asset_id}(also /v1/sd/assets/{asset_id}) |
Path spelling
Some partner docs write /v3/contents/generations/tasks (dropping /api). This platform mounts both /v3 and /api/v3; they are equivalent. See Seedance Volcano / Ark Native Entry for full field docs.
Authentication:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/jsonAvailable Models
| Model | Description | Resolutions |
|---|---|---|
dreamina-seedance-2-0-260128 | Standard Seedance 2.0 | 480p, 720p, 1080p, 4k |
dreamina-seedance-2-0-hc | Real-person / avatar (Base); supports asset:// | 480p, 720p, 1080p, 4k |
dreamina-seedance-2-0-fast-260128 | Fast version | 480p, 720p |
dreamina-seedance-2-0-fast-hc | Fast real-person / avatar; supports asset:// | 480p, 720p |
dreamina-seedance-2-0-mini-260615 | Mini version | 480p, 720p |
dreamina-seedance-2-0-mini-hc | Mini real-person / avatar; supports asset:// | 480p, 720p |
dreamina-seedance-2-5-hc | Seedance 2.5 real-person / avatar; supports asset:// | 480p, 720p |
doubao-seedance-2-0-260128 | Compatible alias | 480p, 720p, 1080p, 4k |
doubao-seedance-2-0-fast-260128 | Fast compatible alias | 480p, 720p |
If your deployment uses model mapping, you may call the public model name shown by the site; it will be forwarded to the mapped upstream Seedance model.
Use any *-hc model for real-person / identity-locked video
If your reference image contains a real person, or you want to reference an asset:// resource uploaded via the asset API section below, use any *-hc model, including dreamina-seedance-2-5-hc. Non-hc models trigger a privacy safety block (InputImageSensitiveContentDetected) on real-person images and cannot read asset:// resources (they return asset ... is not found).
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Model name |
prompt | string | Yes | Video generation prompt |
image | string | No | Single public image URL or asset:// reference |
images | string[] | No | Multiple public image URLs or asset:// references |
size | string | No | Resolution: 480p, 720p, 1080p, or 4k (Fast/Mini: 480p/720p only); billing defaults to 720p |
duration | integer | No | Video duration in seconds |
seconds | string | No | Duration as a string; overrides duration when present |
metadata.resolution | string | No | Upstream resolution; takes priority over size |
metadata.ratio | string | No | Aspect ratio. Supports adaptive, 16:9, 9:16, 1:1, and other model-supported values. For image-to-video, adaptive follows the reference image's aspect ratio |
metadata.generate_audio | boolean | No | Whether to generate audio |
metadata.watermark | boolean | No | Whether to add a watermark |
metadata.return_last_frame | boolean | No | Return the last frame for continuation |
metadata.execution_expires_after | integer | No | Task execution timeout in seconds |
metadata.callback_url | string | No | Server-reachable completion callback URL |
metadata.content | array | No | Upstream content items for audio, video, or other references |
The top-level prompt is converted to a text content item. image and images are converted to image_url reference content items.
metadata.content[] types and roles
type | URL field | Common role | Purpose |
|---|---|---|---|
image_url | image_url.url | reference_image | Subject, identity, composition, or style reference |
image_url | image_url.url | first_frame | Fix the first frame |
image_url | image_url.url | last_frame | Fix the last frame |
video_url | video_url.url | reference_video | Motion, camera, or video-style reference |
audio_url | audio_url.url | reference_audio | Audio reference; with a person image, supports speech, singing, or lip sync |
Media URLs may be public HTTP(S) links. HC models can also use asset://<asset_id>. Order is meaningful, so describe each reference's purpose in the prompt.
Text-to-Video Example
curl https://api.ezmodel.cloud/v1/video/generations \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0-260128",
"prompt": "A cinematic shot of a glass perfume bottle on a marble table, soft morning light, slow camera push in",
"size": "720p",
"duration": 4,
"metadata": {
"ratio": "16:9",
"generate_audio": false,
"watermark": false
}
}'Response:
{
"task_id": "mvt-512d4ffd9ce54256",
"status": "pending"
}Image-to-Video Example
curl https://api.ezmodel.cloud/v1/video/generations \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0-fast-260128",
"prompt": "Make the product rotate slowly, keep the label sharp and readable",
"image": "https://example.com/product.png",
"size": "720p",
"seconds": "4",
"metadata": {
"ratio": "1:1"
}
}'Multiple Reference Assets
Use metadata.content when you need to pass audio or additional reference assets. The type, image_url, audio_url, and video_url content items are forwarded to the upstream request.
{
"model": "dreamina-seedance-2-0-hc",
"prompt": "Generate a relaxed lifestyle video matching the reference audio mood",
"images": [
"https://example.com/ref-1.jpg",
"https://example.com/ref-2.jpg"
],
"duration": 4,
"metadata": {
"resolution": "480p",
"ratio": "9:16",
"generate_audio": true,
"content": [
{
"type": "audio_url",
"audio_url": {
"url": "https://example.com/ref.mp3"
},
"role": "reference_audio"
}
]
}
}For a real-person or avatar singing/lip-sync workflow, upload the person image first, use its asset:// URL, select an HC model, and add a reference_audio item.
First Frame, Last Frame, and Continuation
{
"model": "dreamina-seedance-2-0-hc",
"prompt": "Move smoothly from the indoor opening shot to the night skyline",
"duration": 4,
"metadata": {
"resolution": "720p",
"ratio": "16:9",
"return_last_frame": true,
"execution_expires_after": 3600,
"callback_url": "https://example.com/callbacks/seedance",
"content": [
{"type": "image_url", "image_url": {"url": "https://example.com/first.jpg"}, "role": "first_frame"},
{"type": "image_url", "image_url": {"url": "https://example.com/last.jpg"}, "role": "last_frame"}
]
}
}return_last_frame is forwarded to the generation service. When the upstream returns a final frame, the completed task response includes a top-level last_frame_url; use that HTTPS URL as first_frame in a continuation request.
Reference Video and Video Modification
There is no separate video-edit endpoint. To modify motion, camera work, scene, or style, create a new task and pass the source video as reference_video:
{
"model": "dreamina-seedance-2-0-hc",
"prompt": "Keep the person and main motion; change the scene to a rainy night street with steadier camera work",
"duration": 5,
"metadata": {
"resolution": "720p",
"ratio": "16:9",
"content": [
{"type": "video_url", "video_url": {"url": "https://example.com/source.mp4"}, "role": "reference_video"}
]
}
}You may also upload the source with AssetType: "Video" and use its asset:// URL. Use an HC model for real-person or identity-locked video.
Assets (asset://) and Real-Person / Identity-Locked Video
Besides passing image URLs directly, Seedance can upload an image / video / audio as an upstream asset first, then reference it in a generation request via asset://<asset_id>. The tier follows the asset's actual media type: video assets select with_ref, while image and audio assets select no_ref. Assets are the recommended input for real-person / avatar video (any *-hc model).
EZModel currently uses the SD direct-upload flow; no Asset Group is required:
| Asset path | Status | Models |
|---|---|---|
/v1/sd/assets and equivalent V3 paths | Available | dreamina-seedance-*-hc |
/v1/asset-groups + /v1/assets | Retired, not exposed | Historical Dreamina group flow |
/v1/doubao-sd-1/assets | Not exposed | Doubao-specific asset flow |
For HC identity assets, call the upload endpoint below directly. GroupId may be null; clients do not need to create or return a Group.
1. Upload an asset
Endpoints (pick any):
POST /v1/sd/assetsPOST /api/v3/sd/assetsPOST /v3/sd/assetsPOST /ark/api/v3/sd/assets
curl https://api.ezmodel.cloud/v3/sd/assets \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"URL": "https://example.com/avatar_front.jpg",
"Name": "avatar_front",
"AssetType": "Image"
}'| Field | Type | Required | Description |
|---|---|---|---|
URL | string | Yes | Source URL; must be a public HTTPS link the upstream can download directly (no cookies, no anti-hotlinking) |
Name | string | No | Asset name |
AssetType | string | Yes | Asset type: Image / Video / Audio |
Response (data.Id is the asset ID):
{
"success": true,
"data": {
"Id": "mva-0123456789abcdef",
"base_resp": { "status_code": 0, "status_msg": "success" }
}
}New uploads normally return an mva-* ID. Historical asset-* IDs remain compatible.
2. Query an asset
Endpoints (pick any): GET /v1/sd/assets/{asset_id}, GET /api/v3/sd/assets/{asset_id}, GET /v3/sd/assets/{asset_id}, GET /ark/api/v3/sd/assets/{asset_id}.
Assets are isolated by account: you can only query assets uploaded by the same API Key owner. Accessing another account's asset returns 404 asset not found (no existence leak).
curl https://api.ezmodel.cloud/v3/sd/assets/mva-0123456789abcdef \
-H "Authorization: Bearer $YOUR_API_KEY"{
"success": true,
"data": {
"Id": "mva-0123456789abcdef",
"Status": "Active",
"AssetType": "Image",
"Name": "avatar_front",
"URL": "<upstream asset url>",
"GroupId": null,
"base_resp": { "status_code": 0, "status_msg": "success" }
}
}3. Generate video with an asset (hc model)
Put asset://<asset_id> into image / images and submit with any *-hc model:
curl https://api.ezmodel.cloud/v1/video/generations \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0-hc",
"prompt": "The man in a black suit looks confidently at the camera and nods with a slight smile, soft business lighting, keep the identity consistent",
"images": ["asset://mva-0123456789abcdef"],
"duration": 5,
"size": "480p",
"metadata": { "ratio": "9:16", "generate_audio": false, "watermark": false }
}'It returns a task_id like any other task; poll via Query Task Status and fetch via Download Video Content.
Common errors
asset ... is not found: non-hcmodels cannot readasset://resources; use any*-hcmodel (-hc/-fast-hc/-mini-hc).InputImageSensitiveContentDetected.PrivacyInformation: non-HC models block real-person images; use an HC model for real-person / avatar assets.resource download failed: the assetURLcannot be downloaded by the upstream; use a public, reachable HTTPS link (for example an object-storage presigned URL).
Query Task Status
curl https://api.ezmodel.cloud/v1/video/generations/mvt-512d4ffd9ce54256 \
-H "Authorization: Bearer $YOUR_API_KEY"Task states map to queued, processing, completed/success, and failed. On completion, read the video URL and usage.total_tokens:
{
"task_id": "mvt-512d4ffd9ce54256",
"status": "SUCCESS",
"url": "https://.../seedance.mp4",
"usage": {"completion_tokens": 40594, "total_tokens": 40594}
}EZModel supports querying one task by task_id; it does not expose GET /v1/video/tasks task listing. Persist returned task IDs in your application.
Callbacks
metadata.callback_url is forwarded to the generation service. Use a public HTTPS endpoint, return 2xx quickly, and handle duplicate delivery idempotently. After receiving a callback, query GET /v1/video/generations/{task_id} once more and treat the task status, video URL, and usage.total_tokens as final.
After a task succeeds, use the video URL in the status response or the authenticated content endpoint below.
Download Video Content
After the task is completed, use the returned video URL directly or download through this API-key-authenticated content endpoint:
curl -L https://api.ezmodel.cloud/v1/videos/mvt-512d4ffd9ce54256/content \
-H "Authorization: Bearer $YOUR_API_KEY" \
--output seedance.mp4The response is usually video/mp4 and supports range downloads. The download path is /v1/videos/{task_id}/content (note it is videos, not video/generations).
Price Tier Selection
Seedance selects the price tier from the request payload:
| Item | Rule |
|---|---|
| Resolution | metadata.resolution takes priority, then size; if neither is set, billing defaults to 720p |
with_ref | Valid video input: an HTTP(S) video URL or an asset:// reference to a video asset |
no_ref | No video input; text-only, image-reference, and audio-reference requests use this tier |
| Fast / Mini models | Only 480p and 720p are supported; do not request 1080p / 4k |
| Seedance 2.0 Base models | Support 480p / 720p / 1080p / 4k |
In pricing, “with reference” specifically means with reference video, not any reference media. Images and audio still affect generation but do not switch the request to with_ref; only a video URL or video asset does. Public URLs must be directly downloadable without cookies or anti-hotlinking headers. If the service returns resource download failed, use another URL or a reachable object-storage URL.
Billing
Seedance 2.0 is settled by the task's usage.total_tokens, priced in USD per 1M tokens. The system precharges when the task is submitted, then refunds or supplements the difference after the task is completed.
| Model | Tier | Price |
|---|---|---|
Base (-260128 / -hc) | 480p_no_ref, 720p_no_ref | $7.00 / 1M tok |
| Base | 480p_with_ref, 720p_with_ref | $4.30 / 1M tok |
| Base | 1080p_no_ref | $7.70 / 1M tok |
| Base | 1080p_with_ref | $4.70 / 1M tok |
| Base | 4k_no_ref | $4.00 / 1M tok |
| Base | 4k_with_ref | $2.40 / 1M tok |
Fast (-fast-260128 / -fast-hc) | 480p_no_ref, 720p_no_ref | $5.60 / 1M tok |
| Fast | 480p_with_ref, 720p_with_ref | $3.30 / 1M tok |
Mini (-mini-260615 / -mini-hc) | 480p_no_ref, 720p_no_ref | $3.50 / 1M tok |
| Mini | 480p_with_ref, 720p_with_ref | $2.10 / 1M tok |
| Seedance 2.5 HC | 480p_no_ref, 720p_no_ref | $10.70 / 1M tok |
| Seedance 2.5 HC | 480p_with_ref, 720p_with_ref | $6.40 / 1M tok |
*-hc models use the same price tiers as their standard siblings. Using asset:// does not switch tiers by itself; the referenced asset's actual media type is used.
Formula:
final USD = usage.total_tokens / 1,000,000 * tier price
internal quota = final USD * 500000 * group ratioBilling logs contain two kinds of rows: the task precharge row and the completion adjustment row. Reconciliation should merge the precharge and the adjustment for the same task; the merged net amount is the final cost.
Example: a Base 480p text-to-video task returns total_tokens = 40594 at $7.00 / 1M tok:
40594 / 1,000,000 * 7.00 = $0.284158Notes
- Fast / Mini models are configured for
480pand720ponly; do not request1080p/4k. - Seedance 2.0 Base models support
4k; other model families follow their currently available capabilities. - Real-person / avatar reference images, or
asset://references, must use any*-hcmodel; non-hc models block real-person images and cannot readasset://resources. - Only HTTP(S) video or an
asset://reference to a video asset selectswith_ref; text-only, image-reference, and audio-reference requests selectno_ref. - Asset upload itself is not billed; billing starts only when the asset is used in a generation task.
- Assets are isolated by account; different API Keys (different users) cannot see each other's assets.
metadata.resolutiontakes priority over the top-levelsize.- Video generation is asynchronous; do not wait for the final video in the create request.
- Final billing follows the completed task usage. Failed tasks refund the precharged quota.
- For Volcano Ark-style integration, see Seedance Volcano / Ark Native Entry.
