Model Rover

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".

RegionEndpointResponseMetadata.Region
Mainland Chinahttp://127.0.0.1:11113/ark/cn/cn-beijing
Globalhttp://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/json

Authentication

Use either method with the same sk- platform key:

MethodFormWhen to use
BearerAuthorization: Bearer $API_KEYPlain HTTP calls; the simplest option
V4 signatureHMAC-SHA256 V4 signature with both the Access Key and the Secret Key set to your platform API keyYou already have a V4 signer or SDK

When signing:

  • The service is ark; the signing region is cn-beijing for Mainland China and ap-southeast-1 for Global.
  • Signed headers are content-type;host;x-content-sha256;x-date. X-Date must be within 5 minutes of server time, and X-Content-Sha256 must 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.

ObjectMainland ChinaGlobal
Assetasset-20261102161227-cj74sAsset-20261102161227-cj74s
Asset groupgroup-20261102160629-smddtgroup-20261102160629-smddt

Supported actions

ActionDescription
CreateAssetGroupCreate an asset group
GetAssetGroupGet asset group details
ListAssetGroupsList asset groups
UpdateAssetGroupUpdate an asset group's name and description
DeleteAssetGroupDelete an asset group together with its assets
CreateAssetCreate an asset in a group (reviewed asynchronously)
GetAssetGet asset details and review status
ListAssetsList assets
UpdateAssetUpdate an asset's name
DeleteAssetDelete 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

FieldTypeRequiredDescription
NamestringYesGroup name, up to 64 characters.
DescriptionstringNoDescription, up to 300 characters.
GroupTypestringNoOnly AIGC (virtual portraits) is supported; defaults to AIGC.
ProjectNamestringNoNamespace; defaults to default.

Returns Result.Id (the group ID).

CreateAsset

FieldTypeRequiredDescription
GroupIdstringYesOwning group ID; must belong to the same ProjectName.
URLstringYesPublic http(s) URL of the media, up to 2,048 characters. Base64 is not supported.
AssetTypestringYesImage, Video, or Audio.
NamestringNoAsset name, up to 64 characters. Used only for ListAssets fuzzy search, not for inference.
Moderation.StrategystringNoGlobal library only: Default or Skip. The Mainland China library does not accept this field and always reports Default.
ProjectNamestringNoNamespace; 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:

FieldDescription
Id / Name / GroupId / AssetTypeBasic asset information.
StatusProcessing, Active (ready to use), or Failed.
URLTemporary access URL, returned only when Active.
Error.Code / Error.MessageFailure reason when Failed.
Moderation.StrategyReview strategy.
CreateTime / UpdateTimeRFC 3339 timestamps in UTC.
LastInferenceTimeLast time a video task used the asset; omitted if never used.
ProjectNameNamespace.
{
  "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

FieldDescription
Filter.GroupIdsFilter by group IDs, up to 100.
Filter.NameFuzzy search by name.
Filter.GroupTypeOnly AIGC is supported.
Filter.StatusesListAssets only: filter by status, for example ["Active"].
SortOrderDesc (default, newest first) or Asc.

Use one of two pagination styles; they cannot be mixed:

StyleRequest fieldsResponse fields
Cursor (default)MaxResults (1–100, default 10), NextTokenItems, NextToken (empty when there is no more data)
Page numberPageNumber (≥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

ActionRequest fieldsDescription
UpdateAssetGroupId, Name, DescriptionUpdates only the fields you send.
UpdateAssetId, NameUpdates the name only.
DeleteAssetIdNew tasks can no longer reference the asset; tasks already submitted are not affected.
DeleteAssetGroupIdDeletes 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 queued briefly 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:

HTTPError codeReason
404asset_not_foundThe asset does not exist, was deleted, expired, failed review, or belongs to another wallet or the other asset library.
400asset_not_readyThe asset is still Processing; wait until it is Active.
400asset_unavailableNo resources for this model can currently accept library assets.
503channel_capacity_exhaustedResources that accept assets are temporarily full; retry after Retry-After.

Media requirements

TypeFormatsLimits
Imagejpeg, png, webp, tiff, gif, heic/heifAspect ratio (W/H) 0.4–2.5; width and height 300–6,000 px; under 30 MB
Videomp4, mov2–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
Audiowav, mp32–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; GroupType accepts only AIGC.

Limits and error codes

ItemLimit
CreateAsset60 calls per wallet per minute
Other actions1,200 calls per wallet per minute
Unexpired assets5,000 per wallet
Asset groups1,000 per wallet
HTTPError.CodeMeaning
400MissingParameterA required field is missing.
400InvalidParameterA field format, length, or pagination parameter is invalid.
400InvalidAction / InvalidVersionUnsupported action, or Version is not 2024-01-01.
400QuotaExceededThe asset or group count limit has been reached.
401InvalidAuthorizationThe API key is missing, invalid, disabled, or expired.
403SignatureDoesNotMatchThe V4 signature failed verification or expired.
404NotFound.Asset / NotFound.AssetGroupThe asset or group does not exist (including expired, other-wallet, and other-library objects).
429TooManyRequestsThe per-minute call limit was exceeded.
500InternalErrorInternal error; retry later.

Help us improve this page

Found something unclear, outdated, or incorrect?

Last updated on