APIByteDanceSeedance series
Asset library overview
Entry points, authentication, responses and limits for assets.
Endpoint
Asset operations use POST with Action and Version:
| Deployment | Asset URL |
|---|---|
Unified /ai | https://ai.tuiwo.vip/ai?Action=<Action>&Version=2024-01-01 |
All asset operations use the /ai entry point.
Authentication
Authorization: Bearer <TUIWO_API_TOKEN>
Content-Type: application/json- Use a TUIWO API key, not a native AccessKey/SecretKey.
- The key must be bound to a concrete group and allow at least one Seedance model in that group.
- The platform proxies to an asset-capable channel in the current group; callers never see service credentials.
- This is not an AK/SK signing flow; use native signing with the model service if you need it.
Request
{
"Action": "ListAssets",
"Version": "2024-01-01"
}Action and Version are URL query parameters, not body fields:
curl -X POST 'https://ai.tuiwo.vip/ai?Action=ListAssets&Version=2024-01-01' \
-H 'Authorization: Bearer $TUIWO_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"PageNumber":1,"PageSize":20}'The request body is limited to 10 MiB. Version must be 2024-01-01.
Response
Business data is under Result; platform metadata is under ResponseMetadata:
{
"ResponseMetadata": {
"RequestId": "0217...",
"Action": "CreateAsset",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing"
},
"Result": {
"Id": "ASSET_ID"
}
}Errors may be under ResponseMetadata.Error even when HTTP is 200, so always inspect it:
{
"ResponseMetadata": {
"Error": {
"Code": "ContentRestricted",
"Message": "content moderation failed"
}
}
}Platform authentication, group and proxy failures use:
{
"error": {
"code": "AccessDenied",
"message": "The pinned channel is not available"
}
}Actions
| Category | Action | Purpose |
|---|---|---|
| Group | CreateAssetGroup | Create a group |
| Group | GetAssetGroup | Get a group |
| Group | ListAssetGroups | List groups |
| Group | UpdateAssetGroup | Rename or update a group |
| Group | DeleteAssetGroup | Delete a group and its assets |
| Asset | CreateAsset | Create an image, video or audio asset |
| Asset | GetAsset | Get asset status and metadata |
| Asset | ListAssets | List and filter assets |
| Asset | UpdateAsset | Rename an asset |
| Asset | DeleteAsset | Delete an asset |
| Liveness | CreateVisualValidateSession | Create a liveness session |
| Liveness | GetVisualValidateResult | Poll the liveness result |
CreateRealValidateH5 is present in the proxy allowlist but is not documented by the service; do not rely on it until confirmed.
Detailed pages
Minimal workflow
CreateAssetGroupand readResult.Id.CreateAssetinto that group and readResult.Id.- Poll
GetAssetorListAssetsuntilStatus = Active. - Reference
asset://<ASSET_ID>in a video request.
{
"type": "image_url",
"image_url": {"url": "asset://ASSET_ID"},
"role": "reference_image"
}Limits
- Only
Activeassets can be used.Processingneeds more polling; inspectErrorforFailed. - Groups and assets belong to the current authorized workspace. Customers in the same group can see and reference each other's groups, including liveness groups. Only share a group with trusted customers.
- The group must have exactly one asset-capable service configuration. Multiple configurations return
409 AmbiguousServiceConfiguration; none returns404 NotFound. - The platform does not store video files. directly reachable asset URLs are returned as-is; other service URLs use the platform-signed proxy. Proxy URLs use
/v1/media/image,/v1/media/audioor/v1/media/videoby asset type; downloads are named after the asset ID with the actual extension. - Some model services return
Pending; theStatusesfilter is service-defined and does not guarantee that onlyActiveitems are returned, so check each item. - Page size depends on the service; the platform currently caps around 50, while the reference API allows up to 100.
- Deleting assets or groups is irreversible.
Common errors
| code | Meaning |
|---|---|
InvalidActionOrVersion | Action not allowed, or Version is not 2024-01-01 |
QuotaExceeded | Asset quota exhausted |
FlowLimitExceeded | Too many concurrent or frequent requests |
ContentRestricted | Moderation failed |
DownloadFailed | Service cannot download the asset URL |
TypeMismatch | Asset type does not match the content |
FormatUnsupported / FormatUndetectable | Unsupported or undetectable format |
FaceMismatch | Real-person asset does not match the verified person |
VisualValidateFailed / VisualValidateSessionExpired | Liveness failed or the session expired |
InternalError | Service internal error |