Upload images, videos, audio, or PDFs to get an asset_id you can reference in other endpoints — like POST /v3/video-agents, POST /v3/videos, or POST /v3/avatars.
Upload an Asset
Response
Supported File Types
Max file size: 32 MB. MIME type is auto-detected from file bytes. For larger files, use the direct upload flow below.
Direct Upload for Large Files
POST /v3/assets proxies file bytes through the API, which is why it’s capped at 32 MB. For larger files, use the presigned direct upload flow — three required steps:
POST /v3/assets/direct-uploadswithfilename,content_type, and exactsize_bytes→ returnsasset_id, a presignedupload_url, andupload_headers.PUTthe raw file bytes toupload_url, sendingupload_headersverbatim, before the URL expires (expires_in_seconds).POST /v3/assets/{asset_id}/completeto finalize. Idempotent. Theasset_idis not usable until this step succeeds.
max_bytes in the initialize response). See Upload Assets for full examples in Python and Node.js. To upload up to 100 files in one call, use the batch variant of this flow.
Using Assets
Once uploaded, reference theasset_id anywhere the API accepts asset inputs:
{"type": "url", "url": "https://..."}) or base64 ({"type": "base64", "media_type": "image/png", "data": "..."}). URL inputs are capped at 16 MB for images and 32 MB for video, audio, and PDF, and signing the URL does not change that. For larger files, upload via the direct upload flow and pass the asset_id. Use asset_id when you need to reuse the same file across multiple requests. An asset_id does not expire: reuse it across requests and retries until you delete it.
Delete an Asset
DELETE /v3/assets/{asset_id} removes the asset, and later requests that use its asset_id return asset_not_found. Deleting an avatar group with DELETE /v3/avatars/{group_id} does not delete the assets used to create it, so delete each asset_id separately. See Asset lifetime and deletion.
