Seedance Virtual Avatar Assets

Submit virtual avatar assets to the private asset library and reference them via `asset://` in Seedance video generation

POST/?Action={ActionName}&Version=2024-01-01

The asset library uses the native Volcengine Ark Action protocol: every operation is a POST to the root path with Action and Version query parameters, a JSON body with PascalCase field names, and Bearer authentication with your MaiToken API Key — the platform signs upstream requests on your behalf.

This API group lets you:

  • Create asset groups to organize assets of the same character
  • Submit image / video / audio assets (by public URL, not file upload)
  • Poll asset status and reference assets in generation requests

Before you start, prepare:

  • Publicly accessible asset URLs
  • Your MaiToken API Key

Authorizations

Authorizationstring必填

All requests use Bearer Token authentication; no upstream signing needed on your side. Get an API Key at the API Key console

Authorization: Bearer YOUR_API_KEY

Endpoint shape

All asset operations share a single entry point:

POST /?Action={ActionName}&Version=2024-01-01Content-Type: application/json

Virtual-avatar Action set:

Action Purpose
CreateAssetGroup Create an asset group
CreateAsset Submit one asset into a group (async processing)
GetAsset Query a single asset's status
GetAssetGroup Query group info
ListAssetGroups List groups
ListAssets List assets
UpdateAsset / UpdateAssetGroup Update name / description
DeleteAsset / DeleteAssetGroup Delete asset / group

Actions outside the whitelist return 404 unsupported_endpoint.

Flow

sequenceDiagram    participant Client    participant MaiToken     Client->>MaiToken: 1. CreateAssetGroup    MaiToken-->>Client: Result.Id (group-*)     Client->>MaiToken: 2. CreateAsset (GroupId + asset URL)    MaiToken-->>Client: Result.Id (asset-*)     loop until usable      Client->>MaiToken: 3. GetAsset (Id)      MaiToken-->>Client: Result.Status (Processing / Active / Failed)    end

Step 1: Create an asset group

Keep all assets of the same virtual character in one group.

Body fields:

  • Name (optional): group name
  • Description (optional): group description
  • GroupType (optional): group type; officially only AIGC (virtual avatar) is supported

Step 2: Submit an asset

One asset per request; assets are passed as public URLs (no file upload / Base64).

Body fields:

  • GroupId (required)
  • URL (required): publicly accessible asset URL
  • AssetType (required): Image / Video / Audio
  • Name (optional): only used for fuzzy search via ListAssets

Step 3: Poll asset status

Assets are processed asynchronously. Poll GetAsset until Status becomes Active. The query is also a POST, with the asset Id in the body.

Status values

  • Processing — submitted, under review/processing; not usable yet.
  • Active — ready to reference in video generation.
  • Failed — processing failed; check content quality and URL accessibility, then resubmit.

Asset requirements & best practices

  • Images: jpeg / png / webp / bmp / tiff / gif / heic, < 30MB each, aspect ratio (0.4, 2.5), side length (300, 6000) px
  • Videos: mp4 / mov, 2–15s, ≤ 200MB
  • Audio: wav / mp3, 2–15s, ≤ 15MB
  • Use stable public URLs; keep one character per group; prefer portrait full-body and face close-up shots

Data isolation & project name

  • Assets belong to your account: you can only access assets created through this platform. Accessing others' assets returns 404 asset_not_found; ListAssets / ListAssetGroups only return your own groups.
  • ProjectName in the body is optional; if the platform has a project name configured for the channel, your value will be overridden — normally you should omit it.

Using assets in video generation

Once Status=Active, reference the asset in the content array of Seedance video generation via asset://<ASSET_ID>:

{  "model": "doubao-seedance-2-0",  "content": [    { "type": "text", "text": "The character from image 1 slowly turns around in a city night scene" },    {      "type": "image_url",      "image_url": { "url": "asset://asset-20260716071009-*****" },      "role": "reference_image"    }  ]}

Notes

  • Submission success ≠ immediately usable; wait for Status=Active
  • Keep asset URLs accessible during processing
  • Real-person assets require identity verification first — see Real-Person Avatar Assets