Skip to main content
Seedance rejects ordinary photos of real faces, so a consistent person or character enters a video through an asset. Once the asset is Active, add its asset://... URI to a Seedance video task.
The represented person must complete the official H5 identity, consent, and liveness checks. A virtual character based on a real person also requires the relevant likeness, voice, name, trademark, and usage rights.

Authentication

Every asset endpoint uses a LaoZhang API key:
The caller doesn’t need a YingTu session, Google session, or cookie. The API key validates the LaoZhang API account and available quota. Verification and asset records are bound to the API key that created them, so later retrieval and real-person creation requests must use the same key. Keep the key in a server-side environment variable. Never put the complete key in browser code, URLs, logs, or support messages. The examples below read it from LAOZHANG_API_KEY:

Billing

Whether verification and asset calls are billed separately is shown on the console pricing page and in call logs. Generating a video with an asset is a separate Seedance task, billed like any other Seedance task; see Seedance billing and pricing.

Endpoints

Virtual human assets: Real-person assets:

Create a virtual human asset

Virtual human assets support digital people, brand characters, virtual hosts, and enterprise spokesperson workflows. Submit one public HTTPS image that can be fetched without authentication. Private, loopback, cookie-protected, and sign-in-protected image URLs are rejected.
A successful create response includes a public retrieval id, the asset uri, and the initial status:
Use id to retrieve the asset status from YingTu, and use uri in the Seedance video task. Keep both values exactly as returned. Don’t build or decode internal identifiers from the examples.

Create a real-person asset

Real-person assets add a consent and liveness step before asset creation. The API caller can start this flow inside its own product, but the verification_url must be delivered to the represented person.
1

Create a verification session

Call POST /api/seedance-assets/real-persons/verifications with an HTTPS callback_url.The optional language accepts:
  • zh (the default)
  • en
  • zh-Hant
2

Have the represented person complete verification

Deliver the one-time verification_url securely to that person. It expires after 30 minutes and must not be logged or stored long term.
3

Retrieve the verification result

Read verification_id from the callback and retrieve its status. A pending verification still returns HTTP 200. Create the asset only after the status is verified.
4

Create and retrieve the real-person asset

Submit a public HTTPS URL for a clear, front-facing image of the same person. Retrieve the returned public id until the asset becomes Active.
Create the verification session:
Create the real-person asset after verification:
An ordinary image_url can’t replace the dedicated real-person asset flow. Workflows that preserve a real identity or person consistency must first complete verification and obtain an Active real-person asset URI.

Check asset status

Both asset types use the public id from the create response. For example:
A failed asset can still return HTTP 200 with status set to Failed and a failure object. Don’t treat the HTTP status alone as proof that an asset is ready.

Use an asset in a Seedance video task

After a real-person or virtual human asset becomes Active, add its complete asset://... URI to content as a reference_image. Video generation runs through the LaoZhang API Seedance video generation API:
Asset creation and retrieval use https://yingtu.ai/api/seedance-assets/.... Video task creation and result retrieval use https://api.laozhang.ai/seedance/api/v3/.... The two domains handle different steps, and both accept the LaoZhang API key.

Limits, errors, and acceptance

  • Each API key can make up to 12 create-operation POST requests per hour. Asset-status GET requests don’t count toward this limit. On 429, wait for the time in Retry-After.
  • A real-person verification link is valid for 30 minutes. An expired session returns 410 verification_expired and must be created again.
  • Creating a real-person asset while verification is still pending returns 409 verification_pending.
  • 403 capability_unavailable means the account doesn’t have the private portrait-asset entitlement, so changing the image won’t help. Contact support at hi@laozhang.ai or on Telegram (@laozhang_cn) with the request_id to ask about access.
  • Every success and error response includes request_id. Include it when you contact support, but never include the complete API key.
  • An integration is complete when an asset retrieval returns Active and a Seedance task that uses the returned asset://... URI succeeds.

Frequently asked questions

Can I use a photo of a real person as a reference image?

No. Volcengine doesn’t accept reference images or videos that contain real human faces for the Seedance 2.0 models or Seedance 2.5, and upstream content moderation blocks such requests. If a specific real person must appear, that person completes verification and you create a real-person asset. If you only need a realistic character rather than a particular person, create a virtual human asset. Either way, wait until the asset is Active, then send its asset://... URI as a reference_image.

Should I use a virtual human asset or a real-person asset?

It depends on whether the video has to show a specific real person. Digital humans, brand characters, and virtual hosts that don’t stand for a real individual need only a virtual human asset, created from one public HTTPS image. To keep a real person’s identity and likeness, use a real-person asset: that person must complete the official H5 consent and liveness checks within 30 minutes, and the caller can’t complete them on the person’s behalf. A virtual character based on a real person still needs the relevant likeness, voice, name, and usage rights.

Can I still retrieve my assets after switching API keys?

No. Verification and asset records are bound to the API key that created them, so retrieving them, or creating a real-person asset from that verification, with another key returns 403 resource_not_owned. Before you rotate or disable a key, make sure you no longer need to retrieve those assets. See Authentication.