asset:// 格式的引用地址,可直接用于视频生成请求中。group_id,需先通过「创建素材库」接口创建分组group_id <= 0 或不传)时,返回当前令牌的所有素材 + 账号历史素材token_id=0)token_id=0):asset:// 引用地址不变,已有的视频生成请求无需修改?token_id=X 切换令牌视角:Authorization: Bearer sk-xxxx
Content-Type: application/json{BASE_URL}/v1/assetsgroup_id 参数。POST /v1/assets| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 素材文件的公网可访问 URL |
| asset_type | string | 是 | 素材类型:Image、Video、Audio |
| name | string | 否 | 素材名称(上限 64 字符) |
| group_id | int | 是 | 素材库 ID,必须指定素材归属的素材库(通过「创建素材库」接口获得) |
| upload_mode | string | 否 | 上传模式:sync(默认,同步阻塞等待审核完成后返回)、async(异步,立即返回处理中的素材,后台轮询上游审核)。详见「1.1 异步上传素材」 |
{
"code": "success",
"data": {
"id": "asset-20260403150605-bfjwz",
"asset_url": "asset://asset-20260403150605-bfjwz"
}
}id:素材唯一标识asset_url:素材引用地址,格式为 asset://{id},可直接用于视频生成请求Active)才能使用,通常耗时几秒到几十秒group_id 后才能创建素材upload_mode=async)。异步上传会立即返回一条状态为 Processing 的素材记录,同时返回一个 id(即上游任务 ID)。平台在后台轮询上游审核,完成后将该素材状态更新为 Active(失败则为 Failed)。返回的 id 可直接用于「查询单个素材」接口,无论素材处于处理中还是已完成,都能用同一个 id 查到最新状态。同步模式(默认)会阻塞等待审核完成,单次请求最长可能等待几十秒;异步模式立即返回,适合不希望长时间占用连接的场景。
POST /v1/assetsupload_mode 为 async:| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 素材文件的公网可访问 URL |
| asset_type | string | 是 | 素材类型:Image、Video、Audio |
| name | string | 否 | 素材名称(上限 64 字符) |
| group_id | int | 是 | 素材库 ID |
| upload_mode | string | 是 | 固定为 async |
| callback_url | string | 否 | 结果回调地址(Webhook)。填写后,任务处理完成(成功或失败)时平台会向该地址 POST 一次结果,免去轮询。详见「1.3 上传结果回调(Webhook)」 |
| callback_secret | string | 否 | 可选。回调签名密钥,用于验签防伪造。不需要验签时留空即可,回调照常发送,只是不带签名头 |
{
"code": "success",
"data": {
"id": "task-20260630120000-abcde",
"status": "Processing"
}
}id:异步上传返回的任务 ID,可直接作为「查询单个素材」接口的 id 参数轮询状态。status:Processing 表示后台正在处理。id),根据 status 字段判断结果:Processing:仍在处理中,建议每隔 3 秒轮询一次Active:处理完成,响应中的 asset_url 即可用于视频生成Failed:处理失败(审核拒绝、URL 不可访问或上游超时等),响应会额外带 error 对象说明失败原因,详见「3. 查询单个素材」的失败响应示例id 字段返回,但用异步返回的任务 ID 仍可继续查询该素材,两者均可作为查询凭证。callback_url,任务完成后平台会主动 POST 结果到该地址,可省去轮询;轮询与回调二者独立、互为补充。详见「1.3 上传结果回调(Webhook)」。Failed,避免长期卡在 Processing。batch_id)在后台异步处理。适合需要一次录入大量素材的场景,避免逐条调用「创建素材」。批量上传仅支持异步模式( async)。提交后立即返回一个batch_id和每条 URL 的初始状态(Processing),平台在后台逐条向上游提交审核并回填结果。请通过「3.1 按批次查询素材」轮询整批进度。
POST /v1/assets| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| urls | string[] | 是 | 素材文件的公网可访问 URL 数组,最多 50 条。非空时走批量异步,忽略 url 单条字段 |
| asset_type | string | 否 | 素材类型:Image、Video、Audio,默认 Image。批次内所有素材共用同一类型 |
| name | string | 否 | 素材名称,批次内所有素材共用 |
| group_id | int | 是 | 素材库 ID,必须指定素材归属的素材库 |
| upload_mode | string | 否 | 批量下只能为 async(默认即 async);显式传 sync 会被拒绝 |
| callback_url | string | 否 | 整批结果回调地址(Webhook)。填写后,整批处理完成时平台会 POST 一次批次结果到该地址。详见「1.3 上传结果回调(Webhook)」 |
| callback_secret | string | 否 | 可选。回调签名密钥,不需要验签时留空即可 |
jpeg / jpg / png / webp / bmp / tiff / gif / heicmp4 / movwav / mp3{
"code": "success",
"data": {
"batch_id": "task-20260713070255-c9a9f950",
"task_id": "task-20260713070255-c9a9f950",
"total": 3,
"status": "Processing",
"items": [
{ "source_url": "https://example.com/img-1.jpg", "status": "Processing" },
{ "source_url": "https://example.com/img-2.jpg", "status": "Processing" },
{ "source_url": "https://example.com/img-3.jpg", "status": "Processing" }
]
}
}| 字段 | 说明 |
|---|---|
| batch_id | 批次 ID,后续用「3.1 按批次查询素材」查整批进度 |
| task_id | 上游任务 ID,与 batch_id 相同 |
| total | 本批提交的素材条数 |
| status | 批次整体状态,提交成功后固定为 Processing |
| items[].source_url | 原始提交 URL |
| items[].status | 单条初始状态,均为 Processing |
Processing 占位记录(共享同一 batch_id),后台逐条轮询上游审核并回填为 Active / Failed。| 请求 | 返回 |
|---|---|
urls 全为空白 | {"error":{"message":"urls 不能全为空"}} |
urls 超过 50 条 | {"error":{"message":"单次批量最多提交 50 条素材"}} |
upload_mode 传 sync | {"error":{"message":"批量上传仅支持 async 模式"}} |
| URL 无支持扩展名 | {"error":{"message":"第 N 条URL文件类型不受支持..."}} |
1.1 与批量 1.2)支持在提交时携带 callback_url,任务处理完成后平台会主动向该地址 POST 一次结果,下游无需轮询即可实时拿到最终状态。回调与轮询相互独立、互为补充:即使配置了回调,仍可继续调用查询接口;回调因网络原因最终投递失败时,也可回退为轮询兜底。completed)或失败(failed)时触发一次。result.items 覆盖批次内所有素材。status=failed 回调。task_id 原子去重,回调与超时兜 底竞争时也只发一次)。| 请求头 | 说明 |
|---|---|
| Content-Type | application/json |
| X-Track-Id | 本次任务 ID(= 载荷中的 task_id),下游可用作幂等键去重 |
| X-Webhook-Signature | 仅当提交时填写了 callback_secret 才有;值为 HMAC-SHA256(callback_secret, 原始请求体) 的十六进制字符串,用于验签防伪造 |
{
"code": 200,
"task_id": "task-20260716024754-ad728332",
"status": "completed",
"total_count": 1,
"done_count": 1,
"result": {
"review_batch_id": "task-20260716024754-ad728332",
"items": [
{
"asset_id": "local-20260716024755-51504ef1",
"source_url": "https://example.com/sunflower.jpg",
"asset_url": "asset://asset-20260716104759-mm8tf",
"downstream_asset_id": "asset-20260716104759-mm8tf",
"downstream_final_url": "https://.../signed-url",
"downstream_url_expire_at": "2026-07-16T14:48:08Z",
"submit_review_status": 1,
"asset_type": "Image",
"error_code": "",
"error_message": "",
"createtime": "2026-07-16T02:47:59Z"
}
]
}
}| 字段 | 说明 |
|---|---|
| code | 任务级状态码,200 表示任务完成;非 200 表示任务失败 |
| task_id | 任务 ID,与单条异步返回的 id / 批量返回的 batch_id 一致 |
| status | 任务状态:completed(完成)/ failed(失败) |
| total_count | 任务内素材总数 |
| done_count | 已处理完成数 |
| result | 成功时的结果对象;任务级失败时可能为 null |
| result.items[].source_url | 原始提交 URL,用于对账哪条 URL 对应哪个素材 |
| result.items[].asset_url | asset://{id} 引用地址,可直接用于视频生成 |
| result.items[].submit_review_status | 1 表示该条审核通过;其他值表示未通过,失败原因见 error_code / error_message |
task_id(或 X-Track-Id)做幂等去重,避免重试导致的重复处理。大多数场景无需验签,只填 callback_url即可,本节可跳过。 仅当你需要在下游严格校验回调来源、防止伪造时才使用callback_secret。
callback_secret 用于校验回调请求确实来自本平台、且内容未被篡改。它的工作方式是"共享密钥",由客户自己定义,平台不下发、也不保存明文用于其他用途:openssl rand -hex 32 的输出)。callback_secret(与 callback_url 一起)。HMAC-SHA256,把结果的十六进制字符串放进 X-Webhook-Signature 请求头发给你。HMAC-SHA256,与 X-Webhook-Signature 比对:一致则可信,不一致则应拒绝(可能是伪造或篡改)。说明: 不传 callback_secret时,回调请求不带X-Webhook-Signature头,此时下游无法验签,建议至少通过校验来源 IP / 隐蔽的callback_url路径等方式自行保障安全。验签必须使用原始请求体字节计算,不要先把 JSON 解析成对象再重新序列化(字段顺序/空格差异会导致签名不一致)。
callback_url 必须是下游公网可访问的 http(s) 地址。POST /v1/assets/async。与「1.1 异步上传素材」的关键区别:asset-xxxxx 素材 ID(无需等任务回填),状态初始为 Pending。status,无平台后台轮询延迟。Active)后,平台会将其转存到 平台 OSS,返回永久有效的访问 URL(与「1.1 异步上传素材」一致),无需担心签名过期。本接口与「1. 创建素材」「1.1 异步上传素材」并存,互不影响。已有集成无需改动;需要真实素材 ID 立即返回时使用本接口。素材同样归属到 group_id指定的素材库,可在平台界面按分组查看。
POST /v1/assets/async| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 素材文件的公网可访问 URL,需可被上游直接访问 |
| group_id | int | 是 | 素材库 ID,指定素材归属的素材库(通过「创建素材库」接口获得) |
| asset_type | string | 否 | 素材类型:Image、Video、Audio,默认 Image |
| name | string | 否 | 素材名称 |
{
"code": "success",
"data": {
"id": "asset-20260716171312-pvq2l",
"group_id": 8,
"status": "Pending"
}
}id:上游返回的真实素材 ID,直接作为「3. 查询单个素材」接口(POST /v1/assets/get)的 id 参数轮询状态。group_id:素材归属的素材库 ID(即请求传入值)。status:初始为 Pending(处理中)。id 调用「3. 查询单个素材」接口轮询,status 取值:| status | 含义 | 是否终态 |
|---|---|---|
Pending | 处理中 | 否,需继续轮询 |
Active | 处理成功,可正常使用 | 是 |
Failed | 处理失败 | 是 |
Deleted | 已删除 | 是 |
建议轮询间隔 ≥ 500ms(上游单令牌限速 10 次/秒)。素材通常在 5–30 秒内进入终态。素材进入 Active后,查询返回的url为平台 OSS 的永久访问地址,可长期使用。
| 场景 | 响应 |
|---|---|
url 为空 | {"error":{"message":"url 不能为空"}} |
group_id 未指定 | {"error":{"message":"group_id 必须指定,请先创建素材库分组"}} |
| 分组不存在/无权访问 | {"error":{"message":"指定的分组不存在或无权访问"}} |
asset_type 非法 | {"error":{"message":"asset_type 必须为 Image、Video 或 Audio"}} |
| 上游创建失败 | {"error":{"message":"[ErrorCode] 上游返回的失败原因"}} |
POST /v1/assets/list| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page_number | int | 否 | 页码,默认 1 |
| page_size | int | 否 | 每页数量,默认 20,最大 100 |
| name | string | 否 | 按名称模糊搜索 |
| group_id | int | 否 | 素材库 ID。-2:仅查历史分组(token_id=0);<= 0(其他值)或不传:查当前令牌所有素材 + 历史素材;> 0:查指定分组 |
{
"code": "success",
"data": {
"items": [
{
"id": "asset-20260403150605-bfjwz",
"name": "sunflower-renamed",
"url": "https://ark-media-asset.tos-cn-beijing.volces.com/...(签名URL,有效期12小时)",
"asset_url": "asset://asset-20260403150605-bfjwz",
"asset_type": "Image",
"status": "Active",
"create_time": "2026-04-03T07:06:05Z"
}
],
"total_count": 1,
"page_number": 1,
"page_size": 20
}
}| 字段 | 说明 |
|---|---|
| id | 素材 ID |
| name | 素材名称 |
| url | 素材原始文件访问地址(签名 URL,有效期 12 小时) |
| asset_url | 素材引用地址,用于视频生成 |
| asset_type | 素材类型:Image / Video / Audio |
| status | 素材状态:Active(可用)/ Processing(处理中)/ Failed(失败) |
| error | 仅当 status=Failed 时出现,为失败原因对象 {"message": "..."}(若上游返回错误码则形如 {"code": "...", "message": "..."});成功素材不含此字段 |
| create_time | 创建时间 |
id参数同时接受素材 ID和异步上传返回的任务 ID:异步上传(upload_mode=async)时,用返回的任务 ID 查询即可,无论素材处于Processing还是Active状态都能查到。
本接口也用于「1.3 异步上传素材(新)」的状态轮询:传入新接口返回的真实素材 ID 即可。此时平台会实时透传上游查询该素材的最新状态, status取值为Pending(处理中)/Active(成功)/Failed(失败)/Deleted(已删除),返回的url为带签名访问地址(有效期约 12 小时,过期后重新 查询即可刷新)。两套接口的status语义对应关系:旧接口Processing≈ 新接口Pending,其余一致。
POST /v1/assets/get| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 是 | 素材 ID,或异步上传返回的任务 ID |
{
"code": "success",
"data": {
"id": "asset-20260403150605-bfjwz",
"name": "sunflower-renamed",
"url": "https://ark-media-asset.tos-cn-beijing.volces.com/...(签名URL,有效期12小时)",
"asset_url": "asset://asset-20260403150605-bfjwz",
"asset_type": "Image",
"status": "Active",
"create_time": "2026-04-03T07:06:05Z"
}
}upload_mode=async)返回的 id 即上游任务 ID,可直接作为 id 参数查询,无需关心它稍后会回填为真实素材 ID:status=Processing;处理完成后用同一个 task_id 查询即返回 status=Active 及真实的 asset_url:{
"code": "success",
"data": {
"id": "asset-20260713095616-z2djw",
"name": "test-async",
"url": "https://.../asset-20260713095616-z2djw.jpg",
"asset_url": "asset://asset-20260713095616-z2djw",
"asset_type": "Image",
"status": "Active",
"create_time": "2026-07-13 09:55:52"
}
}id 轮询此接口等待状态变为 Active,无需从素材列表中按名称翻找。status=Failed)时,响应会额外带一个 error 对象,透传上游返回的具体失败原因;无具体原因时回退为通用文案「素材处理失败」:{
"code": "success",
"data": {
"id": "task-20260714065603-2f6d17a7",
"name": "",
"asset_type": "Image",
"status": "Failed",
"error": {
"code": "",
"message": "InvalidParameter.WidthTooSmall: Width must be between 300px and 6000px."
},
"create_time": "2026-07-14 14:55:53"
}
}| 字段 | 说明 |
|---|---|
| error.code | 上游错误码,可能为空字符串 |
| error.message | 失败原因描述;上游未返回具体原因时回退为「素材处理失败」 |
同步上传( upload_mode=sync)失败时直接在创建接口的响应中以{"error":{"message":"..."}}返回原因;异步上传失败原因则通过本接口(及「查询素材列表」「按批次查询素材」)的error字段获取。
batch_id 查询整批素材的最新状态与详情。用于轮询「1.2 批量异步上传素材」提交的整批进度。POST /v1/assets/batch/get| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| batch_id | string | 是 | 批量上传返回的批次 ID |
{
"code": "success",
"data": {
"batch_id": "task-20260713070255-c9a9f950",
"total_count": 3,
"items": [
{
"id": "asset-20260713150306-cwb85",
"name": "batch-test",
"url": "https://.../asset-20260713150306-cwb85.jpg",
"asset_url": "asset://asset-20260713150306-cwb85",
"asset_type": "Image",
"status": "Active",
"create_time": "2026-07-13 15:02:48",
"batch_id": "task-20260713070255-c9a9f950",
"source_url": "https://example.com/img-1.jpg"
},
{
"id": "task-20260713070255-c9a9f950",
"name": "batch-test",
"url": "",
"asset_url": "",
"asset_type": "Image",
"status": "Processing",
"create_time": "2026-07-13 15:02:48",
"batch_id": "task-20260713070255-c9a9f950",
"source_url": "https://example.com/img-2.jpg"
}
]
}
}| 字段 | 说明 |
|---|---|
| batch_id | 回显批次 ID |
| total_count | 批次内素材总数 |
| items[].id | 素材 ID。完成后为真实 asset_id;处理中为 batch_id 占位 |
| items[].name | 素材名称 |
| items[].url | 可预览 URL(已配置 OSS 时为平台 OSS 直链);处理中为空 |
| items[].asset_url | asset://{id} 归一化地址;处理中为空 |
| items[].asset_type | 素材类型 |
| items[].status | Processing(处理中)/ Active(可用)/ Failed(失败) |
| items[].error | 仅当该条 status=Failed 时出现,为失败原因字符串(上游有错误码时形如 [错误码] 描述);成功素材不含此字段 |
| items[].create_time | 记录创建时间 |
| items[].batch_id | 批次 ID |
| items[].source_url | 原始提交 URL,便于对账哪条 URL 对应哪个素材 |
batch_id 返回整批全部素材,各条状态独立,可实时反映 Processing → Active/Failed 的进度。items[].status 均不为 Processing 即处理结束。建议每隔 5~10 秒轮询一次。Failed 的素材会在该条上带 error 字符串说明失败原因。若整批因上游参数校验等原因整体失败(如尺寸不符 ),批内每条会带相同的失败原因。| 请求 | 返回 |
|---|---|
batch_id 不存在或无权访问 | {"error":{"message":"批次不存在或无权访问"}} |
缺 batch_id | {"error":{"message":"...Field validation for 'BatchId' failed on the 'required' tag"}} |