Seedance 2.0 / 2.5 Video Generation
Use the OpenAI-compatible video task API to call Seedance 2.0 through Service Inference. 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>. Asset references select the with_ref price tier and are the recommended input for real-person / avatar video (any *-hc model).
EZModel currently uses the SD direct-upload channel; 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": "asset-20260723164039-k5d5l",
"base_resp": { "status_code": 0, "status_msg": "success" }
}
}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/asset-20260723164039-k5d5l \
-H "Authorization: Bearer $YOUR_API_KEY"{
"success": true,
"data": {
"Id": "asset-20260723164039-k5d5l",
"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://asset-20260723164039-k5d5l"],
"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.
On success, the video URL is usually a platform CDN direct link (no auth required; shareable and embeddable). If CDN transfer temporarily fails, the gateway falls back to the local proxy /v1/videos/{task_id}/content (auth required). Neither case exposes the upstream origin URL.
Download Video Content
After the task is completed, use the returned video URL directly (recommended; CDN links need no auth) or download through the content proxy:
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 | Any valid HTTP(S) or asset:// image, video, or audio reference |
no_ref | Text-only request with no reference media |
| Fast / Mini models | Only 480p and 720p are supported; do not request 1080p / 4k |
| Base models | Support 480p / 720p / 1080p / 4k |
HTTP(S) image, video, and audio URLs and asset:// references all select with_ref. 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 upstream 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 (the with_ref tier is the common case since they are mainly used with asset:// resources).
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. - Base models support
4k. - Real-person / avatar reference images, or
asset://references, must use any*-hcmodel; non-hc models block real-person images and cannot readasset://resources. - HTTP(S) and
asset://image, video, or audio references selectwith_ref; text-only tasks 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.
