Seedance Assets
Upload reference images, videos, and audio, then reference approved assets in Seedance video tasks with asset://.
The asset library stores and reviews reference media for video generation. Upload reference media (especially images and videos that contain people) to the asset library first, wait for review to pass, then reference it in a Seedance video task as asset://<asset ID>.
Endpoints
Mainland China and Global each have their own asset library, and they are not interchangeable: assets in the Mainland China library can only be used with Mainland China Seedance models, and assets in the Global library only with Global Seedance models. Referencing an asset from the other library is treated as "asset not found".
| Region | Endpoint | ResponseMetadata.Region |
|---|---|---|
| Mainland China | http://127.0.0.1:11113/ark/cn/ | cn-beijing |
| Global | http://127.0.0.1:11113/ark/global/ | ap-southeast-1 |
Every action is POST {endpoint}?Action={Action}&Version=2024-01-01 with a JSON body.
POST /ark/cn/?Action=CreateAsset&Version=2024-01-01
Authorization: Bearer $API_KEY
Content-Type: application/jsonAuthentication
Use either method with the same sk- platform key:
| Method | Form | When to use |
|---|---|---|
| Bearer | Authorization: Bearer $API_KEY | Plain HTTP calls; the simplest option |
| V4 signature | HMAC-SHA256 V4 signature with both the Access Key and the Secret Key set to your platform API key | You already have a V4 signer or SDK |
When signing:
- The service is
ark; the signing region iscn-beijingfor Mainland China andap-southeast-1for Global. - Signed headers are
content-type;host;x-content-sha256;x-date.X-Datemust be within 5 minutes of server time, andX-Content-Sha256must match the request body. - The signed path is the actual request path (
/ark/cn/or/ark/global/). SDKs that can change only the host and not the path should use Bearer instead.
Response envelope
Success returns ResponseMetadata and Result:
{
"ResponseMetadata": {
"RequestId": "20261102161227a1b2c3d4e5f6a7b8c9",
"Action": "CreateAsset",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing"
},
"Result": {
"Id": "asset-20261102161227-cj74s"
}
}Failures omit Result and put the error in ResponseMetadata.Error. HTTP status codes keep their standard meaning:
{
"ResponseMetadata": {
"RequestId": "20261102161227a1b2c3d4e5f6a7b8c9",
"Action": "GetAsset",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing",
"Error": {
"Code": "NotFound.Asset",
"Message": "The specified Asset asset-20261102161227-cj74s is not found"
}
}
}ID format
{prefix}-{yyyyMMddHHmmss}-{5 lowercase letters or digits}, with the time in UTC.
| Object | Mainland China | Global |
|---|---|---|
| Asset | asset-20261102161227-cj74s | Asset-20261102161227-cj74s |
| Asset group | group-20261102160629-smddt | group-20261102160629-smddt |
Supported actions
| Action | Description |
|---|---|
CreateAssetGroup | Create an asset group |
GetAssetGroup | Get asset group details |
ListAssetGroups | List asset groups |
UpdateAssetGroup | Update an asset group's name and description |
DeleteAssetGroup | Delete an asset group together with its assets |
CreateAsset | Create an asset in a group (reviewed asynchronously) |
GetAsset | Get asset details and review status |
ListAssets | List assets |
UpdateAsset | Update an asset's name |
DeleteAsset | Delete an asset |
Every action accepts ProjectName (default default). It is the asset namespace: create, query, and delete calls must use the same value, and assets and groups under different ProjectName values are invisible to each other.
CreateAssetGroup
| Field | Type | Required | Description |
|---|---|---|---|
Name | string | Yes | Group name, up to 64 characters. |
Description | string | No | Description, up to 300 characters. |
GroupType | string | No | Only AIGC (virtual portraits) is supported; defaults to AIGC. |
ProjectName | string | No | Namespace; defaults to default. |
Returns Result.Id (the group ID).
CreateAsset
| Field | Type | Required | Description |
|---|---|---|---|
GroupId | string | Yes | Owning group ID; must belong to the same ProjectName. |
URL | string | Yes | Public http(s) URL of the media, up to 2,048 characters. Base64 is not supported. |
AssetType | string | Yes | Image, Video, or Audio. |
Name | string | No | Asset name, up to 64 characters. Used only for ListAssets fuzzy search, not for inference. |
Moderation.Strategy | string | No | Global library only: Default or Skip. The Mainland China library does not accept this field and always reports Default. |
ProjectName | string | No | Namespace; defaults to default. |
The call returns Result.Id immediately with status Processing. The asset is stored and reviewed in the background: poll GetAsset and use the asset in video tasks only after it becomes Active. Failed means review or processing failed; see Error for the reason.
GetAsset
Request fields: Id (required) and ProjectName. Returns:
| Field | Description |
|---|---|
Id / Name / GroupId / AssetType | Basic asset information. |
Status | Processing, Active (ready to use), or Failed. |
URL | Temporary access URL, returned only when Active. |
Error.Code / Error.Message | Failure reason when Failed. |
Moderation.Strategy | Review strategy. |
CreateTime / UpdateTime | RFC 3339 timestamps in UTC. |
LastInferenceTime | Last time a video task used the asset; omitted if never used. |
ProjectName | Namespace. |
{
"ResponseMetadata": { "Action": "GetAsset", "Region": "cn-beijing" },
"Result": {
"Id": "asset-20261102161227-cj74s",
"Name": "",
"URL": "https://cdn.example.com/ark-assets/asset-20261102161227-cj74s.jpg",
"AssetType": "Image",
"GroupId": "group-20261102160629-smddt",
"Status": "Active",
"Moderation": { "Strategy": "Default" },
"Error": { "Code": "", "Message": "" },
"CreateTime": "2026-11-02T08:12:27Z",
"UpdateTime": "2026-11-02T08:12:36Z",
"ProjectName": "default"
}
}ListAssetGroups and ListAssets
| Field | Description |
|---|---|
Filter.GroupIds | Filter by group IDs, up to 100. |
Filter.Name | Fuzzy search by name. |
Filter.GroupType | Only AIGC is supported. |
Filter.Statuses | ListAssets only: filter by status, for example ["Active"]. |
SortOrder | Desc (default, newest first) or Asc. |
Use one of two pagination styles; they cannot be mixed:
| Style | Request fields | Response fields |
|---|---|---|
| Cursor (default) | MaxResults (1–100, default 10), NextToken | Items, NextToken (empty when there is no more data) |
| Page number | PageNumber (≥1), PageSize (1–100) | Items, PageNumber, PageSize, TotalCount |
Page-number pagination requires PageNumber × PageSize to be at most 20,000 (10,000 for groups). Use cursor pagination for deeper results.
Update and delete
| Action | Request fields | Description |
|---|---|---|
UpdateAssetGroup | Id, Name, Description | Updates only the fields you send. |
UpdateAsset | Id, Name | Updates the name only. |
DeleteAsset | Id | New tasks can no longer reference the asset; tasks already submitted are not affected. |
DeleteAssetGroup | Id | Deletes the group's assets as well. |
Use in video tasks
Once an asset is Active, put asset://<asset ID> in image_url.url, video_url.url, or audio_url.url; all other fields work as with ordinary reference media. Pair Mainland China assets with Mainland China models and Global assets with Global models.
curl "http://127.0.0.1:11113/v1/contents/generations/tasks" -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{
"model": "volcengine/seedance-2.0",
"content": [
{"type": "text", "text": "She turns around and smiles by the sea"},
{
"type": "image_url",
"image_url": {"url": "asset://asset-20261102161227-cj74s"},
"role": "reference_image"
}
],
"ratio": "16:9",
"duration": 5
}'- The creation response is the same as for any task and contains only the task ID. A task that references library assets may stay
queuedbriefly while the assets are prepared before generation starts; query and callback behavior is unchanged. - Preset asset IDs (such as preset virtual portraits) can also be referenced with
asset://. - One request can mix library assets, preset assets, and ordinary URLs.
Tasks that reference assets are rejected in these cases:
| HTTP | Error code | Reason |
|---|---|---|
404 | asset_not_found | The asset does not exist, was deleted, expired, failed review, or belongs to another wallet or the other asset library. |
400 | asset_not_ready | The asset is still Processing; wait until it is Active. |
400 | asset_unavailable | No resources for this model can currently accept library assets. |
503 | channel_capacity_exhausted | Resources that accept assets are temporarily full; retry after Retry-After. |
Media requirements
| Type | Formats | Limits |
|---|---|---|
| Image | jpeg, png, webp, tiff, gif, heic/heif | Aspect ratio (W/H) 0.4–2.5; width and height 300–6,000 px; under 30 MB |
| Video | mp4, mov | 2–30 seconds; aspect ratio 0.4–2.5; width and height 300–6,000 px; total pixels 407,696–8,295,044; at most 200 MB; 24–60 FPS |
| Audio | wav, mp3 | 2–30 seconds; at most 15 MB |
Accepted audio and video durations vary by model, so record media durations before uploading. See Seedance Video Tasks.
Notes
- Retention: assets are kept for 24 hours by default and then deleted automatically; afterwards queries return "not found". Re-upload assets you need beyond that window.
URL: a temporary platform storage URL.ProjectName: echoed back as a platform namespace only.- Real-person assets: liveness verification and real-person asset groups are not supported;
GroupTypeaccepts onlyAIGC.
Limits and error codes
| Item | Limit |
|---|---|
CreateAsset | 60 calls per wallet per minute |
| Other actions | 1,200 calls per wallet per minute |
| Unexpired assets | 5,000 per wallet |
| Asset groups | 1,000 per wallet |
| HTTP | Error.Code | Meaning |
|---|---|---|
400 | MissingParameter | A required field is missing. |
400 | InvalidParameter | A field format, length, or pagination parameter is invalid. |
400 | InvalidAction / InvalidVersion | Unsupported action, or Version is not 2024-01-01. |
400 | QuotaExceeded | The asset or group count limit has been reached. |
401 | InvalidAuthorization | The API key is missing, invalid, disabled, or expired. |
403 | SignatureDoesNotMatch | The V4 signature failed verification or expired. |
404 | NotFound.Asset / NotFound.AssetGroup | The asset or group does not exist (including expired, other-wallet, and other-library objects). |
429 | TooManyRequests | The per-minute call limit was exceeded. |
500 | InternalError | Internal error; retry later. |
Help us improve this page
Found something unclear, outdated, or incorrect?
Last updated on