Skip to main content
Complete ByteDance domestic and overseas real-person verification, LivenessFace asset management, and Seedance video calls through GregAPI. The real-person asset library stores images, videos, or audio that have been authorized and liveness-verified by the person themselves as trusted assets, which can then be submitted to Seedance via asset://<AssetId>. The “real-person verification” here means liveness detection and same-person comparison — not ID card, name, or police-database identity verification. Verification must be completed by the real person themselves on the returned H5 page.

1. Endpoints and models

All asset library requests use the same entry point:
The model field in the request body is only used by GregAPI to select the domestic or overseas official channel and is not sent to the ByteDance upstream. We recommend using the same model and ProjectName throughout the entire verification and asset workflow. Real-person assets are not automatically migrated or downgraded across domestic, overseas, or third-party channels. After creating a real-person Group/Asset, continue using the original model region and Project.

2. Full workflow

  1. Call CreateVisualValidateSession to create a one-time verification session.
  2. Save the BytedToken in the response and have the real person open H5Link to complete liveness verification.
  3. After the H5 page redirects to CallbackURL, the server calls GetVisualValidateResult.
  4. Obtain GroupId from the successful result. This group’s type is fixed to LivenessFace.
  5. Use CreateAsset to add images, videos, or audio to the group.
  6. Poll with GetAsset until the asset becomes Active or Failed.
  7. Only Active assets can be used for Seedance via asset://<AssetId>.
The H5 callback is only a workflow notification. Even if resultCode=10000, the server must still call GetVisualValidateResult to obtain the trusted GroupId. When a domestic request hits the ZLHub channel with real-person capability enabled, H5Link is a GregAPI-hosted verification page: it hosts the vendor H5, and after the trusted Group is bound successfully it redirects to CallbackURL with the same ByteDance parameters. The caller’s flow does not need to distinguish channels.

3. Create a real-person verification session

Typical response:
If you do not have your own callback page, you can use the GregAPI-provided https://api.gregapi.com/real-person/callback. This page only indicates that the H5 operation has finished; it does not store or display callback parameters and does not represent successful verification. You must still call GetVisualValidateResult with the original BytedToken afterward. To specify the H5 language, append lng=zh, lng=en, or lng=zh-Hant after H5Link.

4. Query the verification result

After the real person completes the H5 flow, query with the original BytedToken:
Successful result:
GroupId is bound by GregAPI to the current API user, official channel, region, and Project. Real-person Groups cannot be created via CreateAssetGroup, nor used as the asset group for other users or other regions.

5. Create a real-person asset

A successful response returns only the asset ID:
Each real-person Group can correspond to only one real person. Assets containing multiple people, differing from the verified person, or failing same-person comparison will enter Failed. Common media limits: Moderation.Strategy=Skip is not available.

6. Query asset status

CreateAsset is asynchronous. Query using the official Id field until it reaches a terminal state:
The asset URL in the query response is a short-lived address; do not store it or use it in Seedance requests.

7. List, update, and delete

The following Actions are supported: List example:
Delete example:
After a delete request begins, the asset immediately stops accepting new asset:// inference. If the upstream deletion fails, retry with the same official Id. Delete only accepts the Id field — not ID, AssetId, AssetID, or asset_id.

8. Use real-person assets to generate video

Only Active assets can be used for video. Native Seedance task example:
For overseas calls, switch the model to the corresponding dreamina-* and continue using the Asset created by the overseas verification flow. Do not mix IDs between domestic and overseas Assets. The OpenAI-style /v1/videos endpoint also accepts asset:// reference assets:

9. Error responses

Errors keep the ByteDance ResponseMetadata.Error structure:
Common handling: Upstream errors for real-person assets use neutral error messages to avoid echoing one-time credentials or temporary media URLs into responses and logs.

10. Billing and compliance

  • Real-person verification and asset Create/Get/List/Update/Delete currently do not deduct the GregAPI model balance.
  • When generating video with a real-person asset://, billing still occurs once based on the actual Seedance tokens returned by the successful task.
  • Real-person verification is currently marked by the official channel as time-limited free; the future price and end time are not disclosed. Do not treat this status as a long-term free commitment.
  • The caller must obtain explicit, proactive, and revocable separate consent from the real person before verification, and provide deletion and withdrawal options.
  • Do not store face content, full H5Link, BytedToken, AK/SK, Authorization, or temporary asset URLs in logs, issues, support tickets, or databases.
  • The availability of the real-person H5, Group, and Asset depends on the corresponding domestic or overseas official channel entitlement. If the API returns permission or quota errors, contact the GregAPI administrator to confirm the activation status.
For model parameters and video billing details, see Seedance 2.5, Doubao Seedance 2.0, and BytePlus Dreamina Seedance 2.0.