name is required and description is optional. Your integration only needs an AiToEarn X-Api-Key; no Volcengine access key or secret key is required.
If you do not have an API Key yet, read Get API Key first. Use the same API key to create the group, create assets, and generate video.
See Real-person verification for that flow.
If generating a video with a real-person asset fails, use Create virtual portrait group on this page.
Integration flow
1
Create a virtual portrait group
Send
name and optional description, then store groupId. The returned avatarType is Virtual.2
Prepare a public media URL
The source file must be reachable from the public internet. For a local or private file, use Asset upload and keep the confirmed
data.url.3
Create an asset
Register the image, video, or audio in that group and store
assetId.4
Wait until the asset is ready
Query the asset until
status is Active.5
Generate video
Pass
asset://{assetId} in the Seedance reference field.Create a virtual portrait group
Call Create virtual portrait group. The request has only these fields. Do not add real-person verification fields:
Volcengine
CreateAssetGroup has no avatarType field. Name is required, Description is optional, and GroupType is optional with a default of AIGC (virtual portrait assets). This endpoint does not accept GroupType or avatarType. It always creates a virtual portrait group, and the response avatarType is Virtual. avatarType is optional only when listing groups.
name is required. description is optional. Store data.groupId:
avatarType is always Virtual. Use this groupId when you create, query, or delete assets.
Create an asset
The source URL must be publicly accessible while the asset is created and processed. If the file is local or private, use Asset upload first. Do not pass the object-storageuploadUrl as the asset URL.
Then call Create asset:
assetType can be Image, Video, or Audio. name is optional. Store data.assetId. The initial status is usually Processing.
Wait until the asset is Active
Asset details refreshes the upstream processing status:
The asset list stores the local registration record. Query a single asset to read the latest status.
Use the asset in Seedance
After the status becomesActive, write the asset ID as asset://{assetId} and send it to POST /api/ai/video/generations:
Limits
- Use the same API key for the group, the asset, and video generation.
- Keep the source URL publicly accessible while the asset is processing.
- Put only the asset ID after
asset://. Do not append a path, query string, or fragment. - Match the asset type to the field: images in
images, videos invideos, and audio inaudios. - Use only
Activeassets.
Create a virtual portrait group
Send
name and optional description only.Manage assets
Create an asset and check its processing status.

