Asset Management API
The Asset Management API lets your application manage assets (images, videos, audio) and asset groups programmatically. It uses the same API key issued for your account — there is no separate key to provision. If your account has the asset feature enabled, your existing sk-... key works here too.
It is zero-config: you don't pass any project or storage identifiers. Your account already determines where assets live, so most calls need no parameters at all.
Access — this feature is opt-in
The Asset Management API provides the reference assets used by SIRAYA Seedance 2.0 and SIRAYA Seedance 2.0 fast (reference-guided video generation). It is not enabled by default for all customers — if you need it, contact us to have it turned on for your account. Until it's enabled, calls return 403 FEATURE_INACTIVE.
If you're integrating faces into Seedance 2.0 (face swap, character consistency), see the Using Assets with Seedance 2.0 guide — it covers the required upload-first workflow, use cases, and the Platform UI walkthrough.
Asset Groups are a restricted, advanced feature
The Group API (/assets/groups*) is a more advanced capability that is not available to every account — even on request. It is granted selectively (VIP accounts); other accounts receive 403 TIER_FORBIDDEN. The standard single-group asset workflow needs no groups, so most integrations never use these endpoints.
Why Use the Asset Management API?
- Reuse your existing key: The same
sk-...key you use for the LLM gateway works here. - Zero-config storage: Where assets live is resolved from your account automatically — you never pass a project or bucket.
- Async, durable uploads: Upload a file or a public URL and poll until the asset is
active.
Base URL
API Methods
Assets
| Method | Endpoint | Description |
|---|---|---|
| List Assets | GET /assets |
List your assets with filtering, sorting, and pagination. |
| Upload an Asset | POST /assets |
Upload a file or a public URL (async → 202). |
| Get an Asset | GET /assets/{assetId} |
Fetch an asset and a short-lived download URL. |
| Delete an Asset | DELETE /assets/{assetId} |
Permanently delete an asset. |
Asset Groups — restricted (VIP only)
Granted selectively and not available to every account, even on request. Accounts without it receive
403 TIER_FORBIDDEN.
| Method | Endpoint | Description |
|---|---|---|
| List Groups | GET /assets/groups |
List your asset groups. |
| Create a Group | POST /assets/groups |
Create a new asset group. |
| Update a Group | PUT /assets/groups/{groupId} |
Rename or re-describe a group. |
| Delete a Group | DELETE /assets/groups/{groupId} |
Delete an asset group. |
Authentication
Send your API key as a Bearer token on every request:
The key is never stored or decrypted — the server hashes the key you send, checks it is active (not expired / not revoked), and resolves the owning account. A revoked or expired key stops working on this surface immediately.
| Situation | HTTP | error.code |
|---|---|---|
Missing / malformed Authorization header |
401 | UNAUTHORIZED |
| Invalid / expired / revoked key | 401 | UNAUTHORIZED |
| Account has no active asset entitlement | 403 | FEATURE_INACTIVE |
| Asset / group not owned by your account | 404 | NOT_FOUND |
| Plan not sufficient (normal account hitting a group endpoint) | 403 | TIER_FORBIDDEN |
| Request validation failed | 400 | INVALID_INPUT |
Response Envelope
All responses use a common envelope.
Plans
Your plan determines whether you work with a single account group or many.
| Capability | Normal | VIP |
|---|---|---|
| Asset list / upload / get / delete | ✅ no groupId needed — your account's group is used automatically |
✅ groupId optional; defaults to your account's group, or pass one to target a specific group |
Group endpoints (/assets/groups*) |
❌ 403 TIER_FORBIDDEN |
✅ list / create / update / delete your groups |
A Normal account simply calls the asset endpoints with no group parameter at all. A VIP account can additionally organise assets across multiple groups.
Note:
assetIdis returned when you list or upload an asset; use it to fetch or delete that asset.groupIdis plan-dependent — Normal accounts never send it (a sent value is ignored), and your account is provisioned with a group when it is set up.