Skip to content
On this page

企业视频开放平台 API(/business

重要:第 1、2 节接口维护说明
POST /business/uploadPOST /business/download 功能仍提供,后续将逐步不再维护
新接入请优先使用第 3~5 节(COS 直传:uploadCosCredential → PUT → uploadCosConfirm;结果下载:downloadCosCredential)。


通用约定

项目说明
multipart 接口Content-Type: multipart/form-data,文件字段名见各节。
JSON 接口Content-Type: application/json(除非特别说明)。
企业凭证companyKey 为企业上传凭证,可在用户详情页查看。

骨架类型详情表(bonetype)

请求参数 bonetype 为整数,表示输出骨架/格式类型。

名称支持功能限制说明
1boyFBX 格式帧率选择、原地动作、物理优化
2BIP 格式帧率选择、原地动作、物理优化不支持面捕(含 3)
3Mixamo 格式帧率选择、原地动作、物理优化不支持面捕(含 3)
4Unreal 4 格式帧率选择、原地动作、物理优化不支持面捕(含 3)
5VMD 格式原地动作
7girlFBX 格式帧率选择、原地动作、物理优化
8Unity-Anim 格式原地动作、帧率选择、物理优化
9OnlyFace 格式原地动作、帧率选择capturetype 只能为 "1,3"
10C4D 格式原地动作、帧率选择、物理优化不支持面捕(含 3)
11CC&iClone 格式原地动作、帧率选择、物理优化不支持面捕(含 3)
12Roblox R15 格式原地动作不支持手捕(2)和面捕(3)
13Unreal 5.5 格式原地动作、帧率选择、物理优化不支持面捕(含 3)
14Unreal 5.6 格式原地动作、帧率选择、物理优化不支持面捕(含 3)
15BVH 格式原地动作、帧率选择、物理优化不支持面捕(含 3)
16Warudo-Anim 格式原地动作、帧率选择、物理优化

说明:服务端对 bonetype 的合法范围另有校验,与 capturetype 的组合约束以接口实际校验为准;上表侧重格式能力与限制说明


1. 视频上传(后续将逐步不再维护。新接入请优先使用第3,4节)

1.1 接口功能

提交 MP4 视频文件制作参数,上传成功后返回 videoId 等。可配置 rollbackUrl,在视频制作完成时由服务端 POST 回调。

1.2 请求方法

POST

1.3 请求路径

https://www.qmai.vip/business/upload

1.4 请求参数

Content-Type:multipart/form-data

参数名必填类型说明
companyKeystring企业上传凭证。
bonetypenumber骨架类型,详见上文 骨架类型详情表(bonetype)
capturetypestring动捕类型,多个值用英文逗号分隔,如 0,2,30 全身、1 半身、2 手捕、3 面捕、5 自动判断(全身/半身);全身/半身/自动判断只能选一类。
videoFilefile视频文件,MP4,其它限制以官网说明为准。
isStaticCameranumber摄像机状态:1 表示通用摄像机等。
poseTypenumber第一帧姿势:1 TPose、2 APose、3 原 Pose。
mulPersonInfostring多人视频目标框信息;单人场景下可不传。对于多人场景,建议先调用第 6 节 uploadPic 接口上传截图,以获取人框信息。该参数使用字符串表示,格式为 "startFrame(起始帧),x,y,w,h",其中 startFrame 表示截图对应的视频起始帧序号。
frameRatenumber输出帧率(计费相关):24 / 30 / 60 / 120 等。
standPoseboolean原地动作:false 关闭、true 开启。
physicTypenumber物理优化类型(现默认为开启)。
physicTimesnumber可选 166 表示 10 次)。
rollbackUrlstring制作完成回调地址(POST)。

1.5 响应信息

响应体为 JSON(CompanyVideoResponse)。

字段名类型说明
messagestring提示信息;成功时为 "Video uploaded successfully"
videoIdstring成功时为新建视频/任务 ID;失败时可能为 -1 等,以 message、status 为准。
statusstring200 业务成功;600 参数或业务拒绝;500 服务异常等。
videoStatusstring成功时为待制作相关文案。
dataobject一般为空或未使用。

2. 文件下载(后续将逐步不再维护。新接入请优先使用第5节)

2.1 接口功能

根据 companyKeyvideoId 查询动捕结果,服务端将多个结果文件打包为 ZIP,在响应体中返回二进制内容。

2.2 请求方法

POST

2.3 请求路径

https://www.qmai.vip/business/download

2.4 请求参数(JSON)

参数名必填类型说明
companyKeystring企业上传凭证。
videoIdstring视频任务 ID。
videoSignnumber1 时,ZIP 中可额外包含处理后视频、音频等资源(若任务存在);其它值按默认结果集。

2.5 响应信息

响应体为 JSON(CompanyDownResponse)。

字段名类型说明
fileNamestring建议保存的 ZIP 文件名(含 .zip)。
messagestring成功时为 "Success";失败时为错误说明。
statusstring200 表示 ZIP 生成成功;600 等为业务失败。
filebyte[]ZIP 文件字节;JSON 序列化形式依客户端/网关而定(常见为 Base64)。

若服务端内部异常(如无动捕结果文件等),可能返回 HTTP 500 且无 body。


3. 申请 COS 上传凭证

3.1 接口功能

为当前企业生成 直传对象存储的预签名 PUT 地址cosObjectKey。客户端向该 URL PUT 上传 MP4 成功后,再调用 第 4 节 提交业务参数并创建动捕任务。

服务端将 cosObjectKey 与企业做短时绑定,第 4 节会校验该绑定。

3.2 请求方法

POST

3.3 请求路径

https://www.qmai.vip/business/uploadCosCredential

3.4 请求参数(JSON)

参数名必填类型说明
companyKeystring企业上传凭证。
suffixstring文件后缀,仅支持 .mp4;缺省按 .mp4。可传 mp4.mp4

3.5 响应信息

字段名类型说明
messagestring成功为 "OK";失败为错误说明。
statusstring200 成功;600 失败。
uploadUrlstring预签名 PUT 地址;失败时为 null
cosObjectKeystring对象键(非完整 URL),由服务端生成;确认接口须原样回传,勿自行拼路径。
expiresInSecondsint预签名剩余有效时间(秒),约 5 分钟 量级。

常见失败:No user information found, please check input key!Only .mp4 suffix is supported(均为 status=600)。

成功示例:

json
{
  "message": "OK",
  "status": "200",
  "uploadUrl": "https://example-bucket.cos.ap-guangzhou.myqcloud.com/companyVideoDirect/your-company-key/550e8400-e29b-41d4-a716-446655440000.mp4?q-sign-algorithm=sha1&q-ak=***&q-sign-time=1710000000;1710000300&q-key-time=1710000000;1710000300&q-header-list=host&q-url-param-list=&q-signature=***",
  "cosObjectKey": "companyVideoDirect/your-company-key/550e8400-e29b-41d4-a716-446655440000.mp4",
  "expiresInSeconds": 300
}

3.6 调用步骤

  1. 调用本节接口获取 uploadUrlcosObjectKey
  2. 使用 HTTP PUT 将 MP4 二进制发往 uploadUrl(请求体为文件内容;Header 以预签名要求为准)。
  3. 调用 第 4 节,JSON 中携带 cosObjectKey 及业务字段。

4. 确认 COS 上传并创建任务

4.1 接口功能

在客户端已把视频上传到对象存储后,本接口根据 cosObjectKey 启动动捕任务。

业务字段与 第 1 节 中除 videoFile 外的参数含义一致;本节须显式提供 videoName(逻辑名,不可为空,不允许表情符号)。

4.2 请求方法

POST

4.3 请求路径

https://www.qmai.vip/business/uploadCosConfirm

4.4 请求参数(JSON)

直传专用

参数名必填类型说明
cosObjectKeystring第 3 节 返回的 cosObjectKey 完全一致(可 trim)。
videoNamestring视频逻辑名。
视频逻辑名:服务端以上传文件的文件名去掉 .mp4 作为逻辑名,并校验不含表情符号

业务参数(与第 1 节一致,无文件)

参数名必填类型说明
companyKeystring企业上传凭证。
bonetypenumber骨架类型,见上文 骨架类型详情表(bonetype)
capturetypestring动捕类型,英文逗号分隔。
isStaticCameranumber摄像机状态等。
halfWholeBodyChecknumber半全身检测相关。
mulPersonInfostring多人视频目标框信息;单人场景下可不传。对于多人场景,建议先调用第 6 节 uploadPic 接口上传截图,以获取人框信息。该参数使用字符串表示,格式为 "startFrame(起始帧),x,y,w,h",其中 startFrame 表示截图对应的视频起始帧序号。
descriptionstring简述,最长 255。
rollbackUrlstring制作完成回调(POST)。
poseTypenumber1/2/3 同上。
modelUrlstring模型地址等。
piercingstring防穿模 0/1
frameRatenumber24、30、60、120 等。
standPoseboolean原地动作。
physicTypenumber物理优化类型。
physicTimesnumber物理优化次数。

绑定校验:须在 第 3 节 成功且预签名有效期内完成 PUT,且 companyKey 与申请凭证时一致。失败时 message 可能为:Invalid or expired cosObjectKey, please request a new upload credential

4.5 响应信息

第 1 节CompanyVideoResponse)。成功示例:

json
{
  "message": "Video uploaded successfully",
  "videoId": "xxxxxxxx",
  "status": "200",
  "videoStatus": "To be produced",
  "data": null
}

4.6 Python 示例

python
import requests

base = "https://www.qmai.vip/business/"
company_key = "your-company-key"
video_path = r"data\xiaoyu.mp4"

cred = requests.post(base + "uploadCosCredential", json={"companyKey": company_key}).json()
if cred.get("status") != "200":
    raise RuntimeError(cred)

with open(video_path, "rb") as f:
    requests.put(cred["uploadUrl"], data=f).raise_for_status()

payload = {
    "companyKey": company_key,
    "cosObjectKey": cred["cosObjectKey"],
    "videoName": "xiaoyu",
    "bonetype": 1,
    "capturetype": "0",
    "poseType": 1,
}
print(requests.post(base + "uploadCosConfirm", json=payload).text)

5. 获取结果文件下载凭证

5.1 接口功能

根据 videoIdcompanyKey 解析该任务下可下载的动捕结果文件列表,返回 每个文件的文件名GET 下载地址(预签名 URL 或已是 http(s) 的链接)。不返回 ZIP 二进制,由客户端自行拉取或打包。

5.2 请求方法

POST

5.3 请求路径

https://www.qmai.vip/business/downloadCosCredential

5.4 请求参数(JSON)

参数名必填类型说明
companyKeystring企业上传凭证。
videoIdstring视频任务 ID。
videoSignnumber1 时,列表中可包含处理后视频、音频等(若存在);否则为默认文件列表。

5.5 响应信息

字段名类型说明
messagestring成功为 "Success"
statusstring200 成功;600 业务失败。
videoIdstring请求中的视频 ID。
archiveNamestring建议的本地 ZIP 命名(与线上下载习惯一致);失败时可能为 null
filesarray见下表。
expiresInSecondsint预签名有效期 300(秒)。

files 元素

字段名类型说明
fileNamestring文件名。
downloadUrlstringGET 地址。

无动捕结果等内部错误时,可能 HTTP 500 且无 body。

成功示例:

json
{
  "message": "Success",
  "status": "200",
  "videoId": "1919191919",
  "archiveName": "demo_result.zip",
  "files": [
    {
      "fileName": "demo.fbx",
      "downloadUrl": "https://example-bucket.cos.ap-guangzhou.myqcloud.com/result/demo.fbx?q-signature=***"
    },
    {
      "fileName": "demo.bvh",
      "downloadUrl": "https://example-bucket.cos.ap-guangzhou.myqcloud.com/result/demo.bvh?q-signature=***"
    }
  ],
  "expiresInSeconds": 300
}

5.6 Python 示例

python
import requests

payload = {
    "companyKey": "your-company-key",
    "videoId": "your-video-id",
    "videoSign": 1,
}

resp = requests.post(
    "https://www.qmai.vip/business/downloadCosCredential",
    json=payload,
)
resp.raise_for_status()

data = resp.json()
if data.get("status") != "200":
    raise RuntimeError(data.get("message"))

print("archiveName =", data.get("archiveName"))
for item in data.get("files", []):
    print(item["fileName"], "->", item["downloadUrl"])

6. 上传截图(人框检测)

6.1 接口功能

上传 图片 供人框检测服务使用,返回检测结果字符串(如框坐标等),用于多人场景的 mulPersonInfo 等配置。

6.2 请求方法

POST

6.3 请求路径

https://www.qmai.vip/business/uploadPic

6.4 请求参数

Content-Type:multipart/form-data

参数名必填类型说明
picturefile图片文件(@RequestPart("picture"))。
companyKeystring企业上传凭证(表单字段)。

6.5 响应信息

响应体为 JSON(UploadPicResponse)。

字段名类型说明
messagestring成功为 "SUCCESS";失败为错误说明。
multiAddrobject / string成功时为检测服务返回的内容(为 JSON 字符串);失败时为空。
statusstring200 成功;600 企业不存在等;500 服务异常。

企业不存在时:messageNo user information found, please check input key!status600

成功示例:

json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "SUCCESS",
    "multiAddr": "{\"boxes\":\"[[71, 402, 177, 285], [270, 363, 134, 327]]\"}",
    "status": "200",
    "videoStatus": ""
  }
}

6.6 Python 示例

python
import requests

url = "https://www.qmai.vip/business/uploadPic"
data = {"companyKey": "your-company-key"}

with open(r"data\person.jpg", "rb") as f:
    files = {
        "picture": ("person.jpg", f, "image/jpeg")
    }
    resp = requests.post(url, data=data, files=files)

resp.raise_for_status()
result = resp.json()
if result.get("status") != "200":
    raise RuntimeError(result.get("message"))

print("multiAddr =", result.get("multiAddr"))

7. 消费记录查询

7.1 接口功能

分页查询当前 companyKey 对应企业的 CV 币消费/变动记录

7.2 请求方法

POST

7.3 请求路径

https://www.qmai.vip/business/consumptionRecord

7.4 请求参数(JSON)

继承分页基类字段,并包含企业与时间筛选。

参数名必填类型说明
companyKeystring企业上传凭证。
pagenumber页码,从 1 开始,对应 JSON 字段 page(默认 1)。
sizenumber每页条数(默认 20)。
sortstring[]排序字段,依服务端实现。
startTimestring (ISO-8601 日期时间)记录开始时间。
endTimestring (ISO-8601 日期时间)记录结束时间。

7.5 响应信息

响应体为 JSON(FilterResponse<SurplusRecordDTO>)。

字段名类型说明
recordsarray消费记录列表。
totallong总条数。
sizelong每页条数。

records 元素(SurplusRecordDTO

字段名类型说明
amountnumber变动数量。
signedAmountstring带符号数量展示等。
reasonstring原因说明。
durationnumber时长相关(若有)。
videoIdstring关联视频 ID(若有)。
videoNamestring关联视频名(若有)。
usernamestring用户名等。
createAtstring创建时间。
statusNamestring状态名称。

成功示例:

json
{
  "records": [
    {
      "amount": 120,
      "signedAmount": "-120",
      "reason": "视频动捕消费",
      "duration": 15,
      "videoId": "1919191919",
      "videoName": "demo",
      "username": "enterprise_user",
      "createAt": "2026-04-07T10:30:00",
      "statusName": "已完成"
    }
  ],
  "total": 1,
  "size": 20
}

7.6 Python 示例

python
import requests

payload = {
    "companyKey": "your-company-key",
    "page": 1,
    "size": 20,
    "startTime": "2026-04-01T00:00:00",
    "endTime": "2026-04-07T23:59:59",
}

resp = requests.post(
    "https://www.qmai.vip/business/consumptionRecord",
    json=payload,
)
resp.raise_for_status()

data = resp.json()
print("total =", data.get("total"))
for record in data.get("records", []):
    print(record.get("createAt"), record.get("signedAmount"), record.get("reason"))

8. 查询余额

8.1 接口功能

查询当前 companyKey 对应企业的 CV 币余额

8.2 请求方法

POST

8.3 请求路径

https://www.qmai.vip/business/queryBalance

8.4 请求参数(JSON)

参数名必填类型说明
companyKeystring企业上传凭证。

8.5 响应信息

响应体为整数(Integer,表示当前 CV 币余额

成功示例:

json
{
  "code": 0,
  "data": 1111,
  "message": "success"
}

8.6 Python 示例

python
import requests

resp = requests.post(
    "https://www.qmai.vip/business/queryBalance",
    json={"companyKey": "your-company-key"},
)
resp.raise_for_status()

balance = resp.json()
print("balance =", balance)

9. 视频制作进度查询

9.1 接口功能

根据 videoIdcompanyKey 查询视频任务状态,并在成功时返回 可读的进度文案上传参数快照(与上传表单字段对齐,便于核对)。

9.2 请求方法

POST

9.3 请求路径

https://www.qmai.vip/business/getStatus/{videoId}/{companyKey}

路径参数 videoIdcompanyKey 中若含特殊字符,请按 URL 规则编码。

9.4 请求参数

无请求体;参数全部来自路径。

9.5 响应信息

响应体为 JSON(CompanyVideoResponse)。

字段名类型说明
messagestring 或 object成功时可能为含 CaptureType 的键值信息;失败时为错误说明文案。
videoIdstring路径中的视频 ID。
statusstring查询过程状态:200 表示查询逻辑正常返回;未找到企业/视频时 message 仍可能为错误文案。异常时为 500
videoStatusstring制作状态可读文案(如待制作、制作中等),依 ExchangeUtil 转换;无数据时可能为空字符串。
dataobject成功且查到视频时,为 上传参数快照(与 VideoUploadRequest 字段一致,如 bonetypecapturetypemulPersonInfo 等);否则可能为 null

常见 message:企业不存在 No user information found, please check input key!;视频不存在 未查询到上传视频信息,请检查输入的视频ID!


附录


CopyRight © 千面动捕开放平台文档(项目内副本,发布时请与官网同步)