Asset Upload & Management
Upload image, video, and audio assets via /api/assets/upload and reference them with asset:// in Seedance 2.x tasks.
Seedance 2.x reference images, videos, and audio can be uploaded to the asset library first and then referenced in video generation requests with asset://<asset_id>. The asset endpoints all authenticate with your user API key, which is ideal when you need to reuse assets and avoid passing a public URL every time.
Assets and generation tasks must live on the same upstream account, otherwise the asset:// reference cannot be resolved. Where an asset is stored is decided by the ?model= query parameter — the asset goes to whichever upstream serves that model. Always pass ?model=, and use the same model name for the subsequent generation task.
Seedance 2.5 accepts far more reference material than 2.0 (30 images, 10 videos, 10 audio clips, plus audio-only input), which makes the asset library considerably more useful there.
Endpoints
| Operation | Endpoint |
|---|---|
| Upload asset | POST /api/assets/upload |
| Query asset detail | GET /api/assets/{id} |
Upload specifications
Asset upload only supports URLs, not Base64.
| Type | Formats | Limits |
|---|---|---|
| Image | jpeg, png, webp, bmp, tiff, gif, heic, heif | Aspect ratio 0.4 to 2.5; width or height 300 to 6000 px; under 30MB |
| Video | mp4, mov | 480p or 720p; 2 to 15 seconds; aspect ratio 0.4 to 2.5; width or height 300 to 6000 px; up to 50MB; 24 to 60 FPS |
| Audio | wav, mp3 | 2 to 15 seconds; up to 15MB |
Upload an asset
Seedance 2.5
curl -X POST "$MODELSOK_BASE_URL/api/assets/upload?model=seedance-2.5" \
-H "Authorization: Bearer $MODELSOK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/image.png",
"asset_type": "Image",
"name": "sample image"
}'Overseas 2.0 series
curl -X POST "$MODELSOK_BASE_URL/api/assets/upload?model=seedance-2.0" \
-H "Authorization: Bearer $MODELSOK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/image.png",
"asset_type": "Image",
"name": "sample image"
}'Domestic models
curl -X POST "$MODELSOK_BASE_URL/api/assets/upload?model=doubao-seedance-2-0-260128" \
-H "Authorization: Bearer $MODELSOK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/image.png",
"asset_type": "Image",
"name": "sample image"
}'On success, save data.Id:
{
"code": 0,
"message": "ok",
"data": {
"Id": "asset-20260325152211-vcchd"
}
}Query asset detail
curl "$MODELSOK_BASE_URL/api/assets/asset-20260325152211-vcchd?model=dreamina-seedance-2-0-fast-260128" \
-H "Authorization: Bearer $MODELSOK_API_KEY"Example response:
{
"code": 0,
"message": "ok",
"data": {
"AssetType": "Image",
"CreateTime": "2026-03-25T15:22:11Z",
"GroupId": "group-20260324135506-xxxxx",
"Id": "asset-20260325152211-vcchd",
"Name": "sample image",
"ProjectName": "default",
"Status": "Active",
"URL": "https://example.com/image.png",
"UpdateTime": "2026-03-25T15:22:11Z"
}
}Once the Status in the detail response is Active, the asset can be used in video generation requests.
Reference assets in video generation
Official Seedance 2.0 content[] format:
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Make the character dance"
},
{
"type": "image_url",
"image_url": {
"url": "asset://asset-20260325152211-vcchd"
},
"role": "reference_image"
}
],
"resolution": "480p",
"ratio": "16:9",
"duration": 5,
"watermark": false
}Generic video /v1/video/generations format:
{
"model": "doubao-seedance-2-0-260128",
"prompt": "Make the character dance",
"image": "asset://asset-20260325152211-vcchd",
"duration": 5,
"size": "480p",
"metadata": {
"ratio": "16:9",
"watermark": false
}
}Video and audio assets use the same asset://<asset_id> syntax, placed in metadata.video_url and metadata.audio_url respectively.