API 文档

WisGate 文本、图片、视频与通用接口调用说明

Seedance 资产

创建角色素材,并在视频生成中通过 asset://ASSET_ID 引用。

Seedance 资产与真人认证

资产接口用于登记可复用的图片、视频和音频,并通过 asset://ASSET_ID 在 Seedance 生视频 中引用。创建资产成功与素材处理完成是两个阶段,先确认素材已就绪再提交视频任务。

本页以火山/豆包兼容资产流程为主。其他渠道可能使用不同的状态和结果字段,资产组、远端更新及真人认证并非所有渠道都支持。

两种调用入口

方式 地址
Action 路径 POST https://api.wisgate.cn/api/v3/open/{Action}
SDK / Query Action POST https://api.wisgate.cn/api/v3/assets?Action={Action}&Version=2024-01-01

请求体为 JSON,普通调用使用 Authorization: Bearer YOUR_API_KEY。Query Action 入口也兼容 ApiKey: YOUR_API_KEY,供火山 SDK 使用。两种入口调用相同的业务 Handler,但认证与偏好加载的中间件并不完全相同。

响应包装与渠道差异

启用原生响应偏好时,成功返回外层 ResponseMetadata / Result:

{
  "ResponseMetadata": {
    "Action":"CreateAssetGroup",
    "Region":"cn-beijing",
    "RequestId":"request-example",
    "Service":"ark",
    "Version":"2024-01-01"
  },
  "Result":{"Id":"group-example"}
}

平台当前新用户默认偏好启用原生包装。既有用户或兼容配置可关闭 volcengine_asset_native_response_enabled,返回业务结果本身,例如 {"Id":"group-example"}。不能写成“所有账户始终有 Result”。下文均以原生包装为例。

兼容解析可先判断是否存在 Result,存在则取其值,否则取整个响应。但必须先检查 HTTP 状态及 Error,避免把错误当作素材。

当前 SE 渠道创建资产后会内部轮询,拿到资产 ID 后以 Id 返回,并统一资产状态。其他兼容渠道仍需按实际返回检查;不能由创建成功推断所有素材已 Active。

操作清单

所有操作均可使用两种入口,下面列的是 Action 名称:

Action 用途
CreateAssetGroup 创建资产组
ListAssetGroups 查询本用户的本地资产组列表
GetAssetGroup 查询指定资产组
UpdateAssetGroup 更新组信息
DeleteAssetGroup 删除组,能力和非空组规则依赖渠道
CreateAsset 创建资产
ListAssets 查询本用户的本地资产列表
GetAsset 查询素材及处理状态
UpdateAsset 更新素材信息
DeleteAsset 删除资产
CreateVisualValidateSession 创建真人认证会话
GetVisualValidateResult 获取认证结果并同步资产组

列表从本地数据库查询,并按用户及允许渠道过滤;并不是查询上游账号全部素材。已有资产/组的详情和维护还会校验本地归属。远端同步行为随渠道能力变化,不能保证每次操作均调用火山官方接口。

1. 创建资产组

curl --fail-with-body https://api.wisgate.cn/api/v3/open/CreateAssetGroup \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"Name":"product-demo","Description":"产品参考素材","GroupType":"AIGC","ProjectName":"default"}'
字段 类型 说明
Name string 必填组名;火山流程上限为 64 字符,仍需遵守渠道限制
Description string 可选;上限 300 字符
GroupType string 普通 AI 素材示例使用 AIGC;真人授权组使用认证流程获得的 LivenessFace 组
ProjectName string 示例显式使用 default

成功后从 Result.Id 读取组 ID。不要把 LivenessFace 当作绕过真人认证的创建选项。

2. 创建资产

curl --fail-with-body https://api.wisgate.cn/api/v3/open/CreateAsset \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "GroupId":"group-example",
    "URL":"https://example.com/product.png",
    "Name":"product-front",
    "AssetType":"Image",
    "ProjectName":"default"
  }'
字段 类型 说明
GroupId string 推荐明确指定本用户拥有的组。火山标准流程需要组;平台某些模式可自动分组,不能当作通用省略规则
URL string 可供上游访问的素材地址;此流程不用 Base64
Url string 历史兼容拼写;不要同时传两者,本地非空 Url 优先
Name string 推荐填写;长度和必填性有渠道差异,火山流程最多 64 字符,其他渠道需确认限制
AssetType string Image、Video 或 Audio,同时受组和渠道能力限制
ProjectName string 与组使用相同项目

火山兼容成功业务结果示意:

{"Result":{"Id":"asset-example"},"ResponseMetadata":{"Action":"CreateAsset","RequestId":"request-example"}}

当前 SE 创建路径也将结果归一为 Id。客户端应先处理响应包装,再读取实际返回的 ID,不要固定读取顶层 AssetId。

3. 查询处理状态

curl --fail-with-body https://api.wisgate.cn/api/v3/open/GetAsset \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"Id":"asset-example","ProjectName":"default"}'

火山兼容业务结果示意(省略外层):

{
  "Id":"asset-example",
  "Name":"product-front",
  "GroupId":"group-example",
  "AssetType":"Image",
  "Status":"Active",
  "URL":"https://example.com/product.png"
}
火山状态 行为
Processing 等待,稍后重查
Active 已就绪,可以引用
Failed 停止等待,排查 URL、格式、授权或上游错误

轮询设置间隔与总超时,超时后保留资产 ID;不要每次等待都重新 CreateAsset。当前 SE 状态也会映射到 Active/Processing/Failed,但公开 GetAsset 使用本地读取能力,不保证每次查询都会重新访问 SE;长时间未就绪时应排查平台记录与上游状态。

4. 查询列表

资产组列表:

curl --fail-with-body https://api.wisgate.cn/api/v3/open/ListAssetGroups \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"Filter":{"GroupType":"AIGC","Name":"product"},"PageNumber":1,"PageSize":20,"SortBy":"CreateTime","SortOrder":"Desc","ProjectName":"default"}'

资产列表:

curl --fail-with-body https://api.wisgate.cn/api/v3/open/ListAssets \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"Filter":{"GroupType":"AIGC","GroupIds":["group-example"],"Statuses":["Active","Processing"]},"PageNumber":1,"PageSize":20,"SortBy":"CreateTime","SortOrder":"Desc","ProjectName":"default"}'
参数 用途
Filter.Name 名称筛选
Filter.GroupIds 按组 ID 列表筛选
Filter.GroupType 按 AIGC / LivenessFace 等组类型筛选;本地接口未强制必填
Filter.Statuses 仅资产列表,状态数组
ProjectName 项目筛选
PageNumber 默认 1;小于 1 归一到 1
PageSize 默认 20;小于 1 用 20,大于 100 截到 100
SortBy / SortOrder 常用 CreateTime/UpdateTime 与 Desc/Asc;不使用未确认的任意列名

两个列表的业务结果均包含 Items、TotalCount、PageNumber、PageSize。第一页为空不等于上游无素材,可能是本地尚未同步、用户归属、渠道或筛选条件不同。

5. 详情、更新和删除

统一调用模板:将 ACTION 替换为下表 Action,将 JSON 替换为对应请求体。

curl --fail-with-body https://api.wisgate.cn/api/v3/open/ACTION \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"Id":"group-example"}'
Action 请求体示例 说明
GetAssetGroup {"Id":"group-example","ProjectName":"default"} 读取组详情
UpdateAssetGroup {"Id":"group-example","Name":"product-v2","Description":"更新描述"} 标准用法只更新名称/描述
UpdateAsset {"Id":"asset-example","Name":"product-front-v2"} 标准用法只更新名称
DeleteAsset {"Id":"asset-example","ProjectName":"default"} 删除指定资产
DeleteAssetGroup {"Id":"group-example","ProjectName":"default"} 本地已注册;渠道可能不支持,非空组能否删除由实际返回决定

标准火山删除成功业务结果通常为 {}。不要假定删除组会自动级联删除所有素材;也不要将删除资产理解为取消已经创建的视频任务。后端接受更多维护字段不等于所有供应商允许修改这些字段。

6. 真人认证与 Group ID

真人授权流程要求渠道具备 VisualValidate 能力。当前火山/豆包适配器声明了该能力,SE/清程不能因此被视为等价支持。官方流程说明参考 真人人像素材使用。

第一步创建会话:

curl --fail-with-body https://api.wisgate.cn/api/v3/open/CreateVisualValidateSession \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"CallbackURL":"https://example.com/verification/callback","ProjectName":"default"}'

返回结构示意:

{
  "ResponseMetadata":{"Action":"CreateVisualValidateSession","RequestId":"request-example"},
  "Result":{
    "BytedToken":"BYTED_TOKEN_PLACEHOLDER",
    "CallbackURL":"https://example.com/verification/callback",
    "H5Link":"H5_LINK_RETURNED_BY_PROVIDER"
  }
}

让素材本人打开实际 H5Link 完成认证,服务端保存对应 BytedToken。认证回调成功后查询结果;回调参数不能独立作为最终授权依据,仍需服务端查询。

curl --fail-with-body https://api.wisgate.cn/api/v3/open/GetVisualValidateResult \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"BytedToken":"BYTED_TOKEN_PLACEHOLDER","ProjectName":"default"}'

成功得到 Result.GroupId。平台随后调用组详情同步完整数据,若同步失败,本次请求会报错,不能把半完成状态当成可用资产组。

BytedToken 和 H5 会话具有时效性,以认证服务当前返回及规则为准。请尽快完成认证并查询结果;过期后重新创建会话,不要假设会话与查询 Token 的有效期相同。

H5Link 可能含短期授权参数,只传给本次认证用户,不放入公开日志或示例。随后按上游规则在认证组中创建素材、等待就绪,再引用 asset://。认证组类型本身不证明任意 URL 都已获得授权。

7. 火山 SDK 接入约定

使用火山 Go SDK universal.DoCall 时:

SDK 项 设置
endpoint https://api.wisgate.cn/api/v3/assets
Region cn-beijing
ServiceName ark
Version 2024-01-01
HttpMethod / ContentType POST / JSON
扩展 HTTP 请求头 ApiKey: <WisGate API Key>
SDK credentials 使用非空占位 AK/SK 满足客户端构造;本次 ApiKey 模式不依赖占位签名认证

最终应发出类似请求:

POST /api/v3/assets?Action=GetAssetGroup&Version=2024-01-01
ApiKey: YOUR_API_KEY
Content-Type: application/json

{"Id":"group-example"}

SDK 自动生成 HMAC Authorization 时,平台 Query Action 认证优先使用显式 ApiKey。必须设置 ApiKey,仅填写占位 AK/SK 不构成有效鉴权。不同 SDK 版本的 endpoint 拼接方式可能不同,请检查最终请求路径。

8. 引用已就绪资产

{
  "model":"doubao-seedance-2-5",
  "omni_reference_task_type":"reference",
  "content":[
    {"type":"text","text":"保持参考商品的外观,生成简洁的产品展示镜头。"},
    {"type":"image_url","role":"reference_image","image_url":{"url":"asset://asset-example"}}
  ],
  "duration":5,
  "resolution":"720p",
  "ratio":"16:9"
}

资产 ID、组 ID 与任务 ID 是三种不同标识。只在媒体 URL 中使用 asset://,不要把组 ID 当作素材。

错误处理

资产接口错误示意:

{
  "ResponseMetadata":{"Action":"GetAsset","RequestId":"request-example"},
  "Error":{"Code":"InvalidRequest","Message":"asset not found"}
}

不要按成功响应的 Result 解析错误;鉴权中间件还可能使用另一种通用错误格式。

问题 排查
asset/group not found 核对用户归属、ID 和是否完成本地同步
URL 处理失败 核对公网可访问性、素材格式及链接有效期
unsupported action / capability 检查 Action 名称及所选渠道能力
组与渠道不匹配 使用原组所属渠道或在允许渠道创建新组
Result 不存在 检查响应偏好与错误体,不先认定服务异常
pending/Processing 长时间不变 保存 ID,有界轮询并排查供应商,不重复创建