Theme
Seedance video generation
Seedance 2.0 submits async video tasks through the official generation endpoint. It supports text-to-video, first-frame / first-and-last-frame, reference image/video/audio, video continuation, video editing, and multimodal composition.
http
POST /v1/video/generationsAsset library items can be referenced in as . On successful submission, a task_id is returned; poll with Task query.
Available models
Headers
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Request authentication. Use a Bearer Token, for example: | |
| string | Yes | Request content type. Must be set to |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Model name | |
| array<object> | Yes | Multimodal input array; order affects role assignment | |
| object | No | Video generation parameters; all optional |
content items
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Content type: , , , , | |
| string | Conditional | Required when ; prompt text | |
| string | Conditional | Required when ; public image URL or | |
| string | Conditional | Required when ; public video URL or asset reference | |
| string | Conditional | Required when ; public audio URL or asset reference | |
| string | Conditional | Required when ; draft task ID (must be the only content item) | |
| string | No | Media role: (first frame), (last frame), (reference image), (reference/source video), (reference audio; requires ) |
metadata
| Name | Type | Required | Description |
|---|---|---|---|
| integer | No | Duration in seconds. Valid range – or (model decides). Default | |
| string | No | , , , . Default | |
| string | No | , , , , . Default | |
| integer | No | Total frame count; mutually exclusive with . Takes precedence over duration when set | |
| integer | No | Random seed. Same seed + same input yields similar results | |
| boolean | No | Lock camera (suppress camera motion). Default | |
| boolean | No | Bottom-right watermark. Default | |
| boolean | No | Generate/synthesize audio. Must be when using . Default | |
| boolean | No | Return last-frame image URL for continuation. Default | |
| boolean | No | Draft mode (faster, slightly lower quality). Default | |
| string | No | Service tier. Default | |
| integer | No | Max execution time in seconds. Range –. Default | |
| string | No | Completion callback URL |
Generation mode reference
| Mode | content essentials |
|---|---|
| Text-to-video | + optional reference image/video/audio |
| First-frame image-to-video | + |
| First-and-last-frame video | + + |
| Reference-image video | + |
| Video continuation | + |
| Video editing | + + |
| Multimodal composition | + mixed reference types |
| Asset library reference | Use for each URL |
Request example
json
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "First-person fruit tea ad: 0-2s pick an apple; 2-4s cut to pouring into a shaker and shaking"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/apple.jpg" },
"role": "reference_image"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "16:9"
}
}json
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Animate naturally from the first frame"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/first.jpg" },
"role": "first_frame"
}
],
"metadata": {
"duration": 10,
"resolution": "720p",
"ratio": "adaptive"
}
}json
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "First-person fruit tea ad"
},
{
"type": "image_url",
"image_url": { "url": "asset://asset-xxx" },
"role": "reference_image"
},
{
"type": "video_url",
"video_url": { "url": "asset://asset-xxx" },
"role": "reference_video"
}
],
"metadata": {
"duration": 8,
"resolution": "720p",
"ratio": "16:9"
}
}Response example
json
{
"task_id": "cgt-20260412163502-x8k2m"
}Response fields
| Name | Type | Description |
|---|---|---|
| string | Task ID for task query |
Notes
WARNING
content mixing rules (violations may return 400):
- cannot appear together with / ;
- cannot be the only content input; pair it with at least an image or video;
- must be the only element in the content array.
Asset library
Reference asset library resources in the main via . Workflow:
- Create an asset group and obtain
GroupId; - Import a public HTTPS asset into that group (async transcoding / moderation) and obtain
task_id; - Poll until the asset is ready, then reference the returned
AssetIdin video requests.
Create asset group (POST /v1/seedance/asset/CreateAssetGroup)
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Asset group name, max 64 characters | |
| string | No | Asset group description, max 300 characters |
bash
curl -X POST https://octopusx.ai/v1/seedance/asset/CreateAssetGroup \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"Name": "test",
"Description": "this is description"
}'Import asset (POST /v1/seedance/asset/CreateAsset)
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Asset group ID from data.Id returned by Create asset group | |
| string | Yes | Public HTTPS URL of the asset to import | |
| string | Yes | Asset type: , , | |
| string | Yes | Asset name |
On success, an AssetId is returned. Prefer in video requests instead of repeating the public URL.
Get asset (POST /v1/seedance/asset/GetAsset)
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Task ID returned when importing the asset |
Poll processing progress and details. Once the asset is ready, use it in generation requests.