> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gravitex.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create asset group (liveness) (CreateVisualValidateSession)

> CreateVisualValidateSession — start liveness validation session

## Introduction

Start an H5 live person validation session. Live person asset groups (`GroupType = LivenessFace`) **cannot** be created via `CreateAssetGroup` (which is always forced to `AIGC`); they must use this flow.

Live person and virtual asset libraries share the same Asset/AssetGroup Actions; after validation succeeds and you receive `GroupId`, subsequent CRUD operations are identical to `AIGC`.

<Warning>
  The response shape **differs** from other Actions: this returns a **flat structure**, not the `{ResponseMetadata, Result}` envelope.
</Warning>

<Warning>
  Quota check happens at this step: exceeding the limit returns `403` with `ResponseMetadata.Error.Code = "QuotaExceeded"` and no H5 validation link is generated.
</Warning>

## Authentication

<ParamField header="Authorization" type="string" required>
  Bearer Token, e.g. `Bearer sk-your_token_key`
</ParamField>

## Request parameters

<ParamField body="CallbackURL" type="string">
  **Always forced to a fixed callback page URL** regardless of input—preventing redirects to arbitrary caller-specified addresses. `GetVisualValidateResult` uses the same Bearer-authenticated API and does not rely on the callback page to pass context
</ParamField>

<ParamField body="ProjectName" type="string" default="default">
  Project name
</ParamField>

## Request example

```bash theme={null}
curl -X POST "https://api.gravitex.ai/api/v3/seedance?Action=CreateVisualValidateSession&Version=2024-01-01" \
  -H "Authorization: Bearer sk-your_token_key" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## Response example

```json theme={null}
{
  "BytedToken": "202607...",
  "H5Link": "https://www.byteplus.com/en/liveness-face-manage/authorization?pl=...",
  "CallbackURL": "https://api.gravitex.ai/asset-validate-callback.html"
}
```

| Field         | Description                                                                                                                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `H5Link`      | Show to end users to complete live person validation (open in WebView/browser)                                                                                                                         |
| `BytedToken`  | Save on the client side; valid for 30 minutes, single use; call [GetVisualValidateResult](/en/api-reference/endpoint/seedance-2.0-new/get-visual-validate-result) after completion to obtain `GroupId` |
| `CallbackURL` | Fallback display page after validation; does not affect active polling with `BytedToken`                                                                                                               |

## Live person asset restrictions

* **Separate quota**: live person asset group count per user per channel is limited independently (separate from `AIGC`)
* **Face matching**: each live person asset group maps to one real person; uploaded assets are compared to the validation reference face—mismatch or multiple faces cause `Status: Failed`
* **Delete restrictions**: see [DeleteAssetGroup](/en/api-reference/endpoint/seedance-2.0-new/delete-asset-group)
