If you have already uploaded private assets through the avatar asset APIs and obtained an asset_id, you do not need to send the original file URL again in the generation request. Use:
asset://<ASSET_ID>
This applies to:
Private virtual avatar assets
Private real avatar assets
Image, video, and audio assets that have finished processing and are in active status
Before using an uploaded asset in video generation, make sure you complete this flow:
Create an asset group or complete real-person verification first
Upload the asset and obtain asset_id
Poll the asset status until it becomes active
Use asset://<ASSET_ID> in the generation request
You can use these guides to complete asset onboarding:
{ "model": "seedance-2", "prompt": "Keep the same person from image 1 and let them slowly turn around in front of a floor-to-ceiling window with a gentle camera push-in.", "image_with_roles": [ { "url": "asset://asset_img_01KXXXXXXX", "role": "reference_image" } ]}
Example with video and audio references:
{ "model": "seedance-2", "prompt": "Keep the character from image 1, follow the camera movement of video 1, and match the rhythm and mood of audio 1 to generate an indoor talking-head video.", "image_with_roles": [ { "url": "asset://asset_img_01KXXXXXXX", "role": "reference_image" } ], "video_with_roles": [ { "url": "asset://asset_vid_01KXXXXXXX", "role": "reference_video" } ], "audio_with_roles": [ { "url": "asset://asset_aud_01KXXXXXXX", "role": "reference_audio" } ]}
Only assets with active status can be used for video generation.If you pass asset://<ASSET_ID> while the asset is still processing or has already failed, the generation request may fail or produce poor results.