Ark Seedance: Asset Library
Gateway proxy for Ark private asset OpenAPI. Sign with platform AK/SK (Volcengine-compatible HMAC). Bearer is rejected. There is no “project group” layer — only local project → asset group → asset. Asset calls are not billed. See Volcengine signing.
Related: Create video task · Task status
Endpoint
POST /openapi/volcengine/?Action=<Action>&Version=2024-01-01Auth
HMAC-SHA256 with AccessKeyId / SecretAccessKey from Portal「素材访问密钥」. Do not use ordinary or video API keys.
Conventions
| Item | Notes |
|---|---|
ProjectName | Required — local project name (not the upstream Ark project). Responses rewrite the local name |
model / Model | Forbidden; the channel comes from the project’s group binding |
| Isolation | List/Get filtered by local project for this user |
| Names | Group / asset Name: Chinese, letters, digits, _, - (max 64 runes). ProjectName stays ASCII |
| Upload | Public URL only — Ark’s servers GET it with no cookies. Private TOS / expired signed URLs fail with InvalidParameter.DownloadFailed (TOS 403). Smoke-test: https://placehold.co/64x64.png |
| Status | Active / Processing / Failed / PendingRebuild |
Success shape:
{
"ResponseMetadata": {
"RequestId": "2026062415283493B3836D523A0F3F0AFB",
"Action": "CreateAssetGroup",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing"
},
"Result": { }
}Supported Actions
| Action | Purpose |
|---|---|
CreateAssetGroup / GetAssetGroup / ListAssetGroups / UpdateAssetGroup / DeleteAssetGroup | Groups |
CreateAsset / GetAsset / ListAssets / UpdateAsset / DeleteAsset | Assets |
Out of scope
VisualValidate* returns 501.
Asset groups
CreateAssetGroup
POST /openapi/volcengine/?Action=CreateAssetGroup&Version=2024-01-01Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Name | string | yes | Logical group name, 1–64 chars (Chinese allowed); unique per user and ProjectName |
Description | string | no | Description, up to ~256 chars |
GroupType | string | no | Default / currently only AIGC |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | New group ID (e.g. group-…) |
Result.Name | string | Your logical name (restored by platform) |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=CreateAssetGroup&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Name":"figures","Description":"character refs","GroupType":"AIGC","ProjectName":"my_project"}'Response example
{
"ResponseMetadata": {
"RequestId": "…",
"Action": "CreateAssetGroup",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing"
},
"Result": {
"Id": "group-20260624152835-lb6rn",
"Name": "figures"
}
}GetAssetGroup
POST /openapi/volcengine/?Action=GetAssetGroup&Version=2024-01-01Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Id | string | conditional | Group ID; provide Id or Name |
Name | string | conditional | Logical name; provide Id or Name |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | Group ID |
Result.Name | string | Logical name |
Result.Description | string | Description |
Result.GroupType | string | Type |
Result.ProjectName | string | Upstream project (platform-injected) |
Result.CreateTime | string | Created at (UTC, ISO 8601) |
Result.UpdateTime | string | Updated at (UTC) |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=GetAssetGroup&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Id":"group-20260624152835-lb6rn","ProjectName":"my_project"}'ListAssetGroups
POST /openapi/volcengine/?Action=ListAssetGroups&Version=2024-01-01Visibility is scoped to your bindings; do not rely on cross-account GroupIds.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
PageNumber | integer | no | Page, default 1 |
PageSize | integer | no | Page size, default 10, max ~100 |
Filter.Name | string | no | Filter by name |
Filter.GroupType | string | no | e.g. AIGC |
Filter.GroupIds | string[] | no | Group IDs (intersected/rewritten with your visible set) |
ProjectName | string | yes | Local project name |
Nested fields:
Filter.Namemeans{"Filter":{"Name":"…"}}.
Response parameters
| Name | Type | Description |
|---|---|---|
Result.TotalCount | integer | Total hits |
Result.PageNumber | integer | Current page |
Result.PageSize | integer | Page size |
Result.Items[] | array | Groups |
Result.Items[].Id | string | Group ID |
Result.Items[].Name | string | Logical name |
Result.Items[].Description | string | Description |
Result.Items[].GroupType | string | Type |
Result.Items[].ProjectName | string | Project |
Result.Items[].CreateTime / UpdateTime | string | UTC times |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=ListAssetGroups&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"PageNumber":1,"PageSize":10,"Filter":{"GroupType":"AIGC"},"ProjectName":"my_project"}'UpdateAssetGroup
POST /openapi/volcengine/?Action=UpdateAssetGroup&Version=2024-01-01GroupType cannot change after create.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Id | string | yes | Group ID |
Name | string | no | New logical name, 1–64 chars |
Description | string | no | New description |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | Group ID |
Result.Name | string | Updated logical name (if renamed) |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=UpdateAssetGroup&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Id":"group-20260624152835-lb6rn","Name":"figures_v2","Description":"updated","ProjectName":"my_project"}'DeleteAssetGroup
POST /openapi/volcengine/?Action=DeleteAssetGroup&Version=2024-01-01Prefer clearing assets with ListAssets first.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Id | string | conditional | Group ID; or Name |
Name | string | conditional | Logical name; or Id |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | Deleted group ID |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=DeleteAssetGroup&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Id":"group-20260624152835-lb6rn","ProjectName":"my_project"}'Assets
CreateAsset
POST /openapi/volcengine/?Action=CreateAsset&Version=2024-01-01Async: success means accepted. Poll GetAsset until Status=Active before using asset://<Id> in video tasks.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
GroupId | string | yes | Group ID you own |
URL | string | yes | Ark downloads this URL anonymously. Private TOS / expired signatures → InvalidParameter.DownloadFailed. Example: https://placehold.co/64x64.png |
AssetType | string | yes | Image / Video / Audio |
Name | string | no | Display name, 1–64 chars (Chinese allowed); list search only |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | New asset ID (e.g. asset-…) |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=CreateAsset&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{
"GroupId":"group-20260624152835-lb6rn",
"URL":"https://placehold.co/64x64.png",
"AssetType":"Image",
"Name":"hero",
"ProjectName":"my_project"
}'Response example
{
"ResponseMetadata": {
"RequestId": "…",
"Action": "CreateAsset",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing"
},
"Result": {
"Id": "asset-20260624152850-mftbb"
}
}GetAsset
POST /openapi/volcengine/?Action=GetAsset&Version=2024-01-01Use to poll ingest / moderation status after create.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Id | string | yes | Asset ID |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | Asset ID |
Result.Name | string | Name |
Result.URL | string | Temporary download URL when Active (~12h); often empty while Processing |
Result.AssetType | string | Image / Video / Audio |
Result.GroupId | string | Group ID |
Result.Status | string | Processing / Active / Failed |
Result.Moderation | object | Moderation info |
Result.Moderation.Strategy | string | e.g. Default |
Result.CreateTime / UpdateTime | string | UTC times |
Result.ProjectName | string | Project |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=GetAsset&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Id":"asset-20260624152850-mftbb","ProjectName":"my_project"}'Response example (Active)
{
"ResponseMetadata": {
"RequestId": "…",
"Action": "GetAsset",
"Version": "2024-01-01",
"Service": "ark",
"Region": "cn-beijing"
},
"Result": {
"Id": "asset-20260624152850-mftbb",
"Name": "hero",
"URL": "https://….tos-cn-beijing.volces.com/…/product.png?X-Tos-Algorithm=…",
"AssetType": "Image",
"GroupId": "group-20260624152835-lb6rn",
"Status": "Active",
"Moderation": { "Strategy": "Default" },
"CreateTime": "2026-06-24T07:28:50Z",
"UpdateTime": "2026-06-24T07:28:52Z",
"ProjectName": "default"
}
}Poll after ~3s; images often become Active in seconds; video/audio take longer. On Failed / DownloadFailed, open the source URL in a private window — if that 403s, Ark cannot fetch it either.
ListAssets
POST /openapi/volcengine/?Action=ListAssets&Version=2024-01-01Filtered to your asset bindings.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Filter.GroupIds | string[] | no | Filter by group (intersected with your groups) |
Filter.Statuses | string[] | no | Processing / Active / Failed |
Filter.Name | string | no | Fuzzy name match |
Filter.AssetType | string | no | Image / Video / Audio |
Filter.GroupType | string | no | e.g. AIGC |
PageNumber | integer | no | Default 1 |
PageSize | integer | no | Default 10, max ~100 |
SortBy | string | no | e.g. CreateTime, GroupId |
SortOrder | string | no | Asc / Desc |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.TotalCount | integer | Total hits |
Result.PageNumber / PageSize | integer | Pagination |
Result.Items[] | array | Assets (same fields as GetAsset Result) |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=ListAssets&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{
"Filter": {
"GroupIds": ["group-20260624152835-lb6rn"],
"Statuses": ["Active", "Processing"],
"Name": "figure"
},
"PageNumber": 1,
"PageSize": 10,
"SortBy": "CreateTime",
"SortOrder": "Desc",
"ProjectName": "my_project"
}'UpdateAsset
POST /openapi/volcengine/?Action=UpdateAsset&Version=2024-01-01Rename only; URL / AssetType / GroupId are immutable — delete and recreate to replace media.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Id | string | yes | Asset ID |
Name | string | no | New name, 1–64 chars |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result.Id | string | Asset ID |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=UpdateAsset&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Id":"asset-20260624152850-mftbb","Name":"hero-v2","ProjectName":"my_project"}'DeleteAsset
POST /openapi/volcengine/?Action=DeleteAsset&Version=2024-01-01Hard delete. Do not delete assets still referenced by in-flight video tasks.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
Id | string | yes | Asset ID |
ProjectName | string | yes | Local project name |
Response parameters
| Name | Type | Description |
|---|---|---|
Result | object | Often {} or { "Id": "…" } (upstream-dependent) |
Request example
curl "https://ai.youqi.tech/openapi/volcengine/?Action=DeleteAsset&Version=2024-01-01" \
-H "Content-Type: application/json" \
-d '{"Id":"asset-20260624152850-mftbb","ProjectName":"my_project"}'Status and video reference
CreateAsset → Processing → Active (referenceable)
↘ Failed (delete only)| Status | Meaning | Allowed |
|---|---|---|
Processing | Fetch / moderation | Poll GetAsset, may DeleteAsset |
Active | Ready | Full ops; asset://<Id> in video tasks |
Failed | Moderation fail or unreachable URL | Prefer DeleteAsset |
After ingest, reference in create video task content, e.g.:
{
"type": "image_url",
"role": "reference_image",
"image_url": { "url": "asset://asset-20260624152850-mftbb" }
}Must belong to the local project (ProjectName) and be Active.