提交 Midjourney 视频生成或视频扩展任务。
POST
/mj/submit/video提交 Video 任务
API Key application/json
MJ 异步任务协议
调用与返回说明
提交 提交 Video 任务。MJ 接口采用“提交任务 → 保存任务 ID → 查询/回调 → 读取结果或执行后续动作”的异步模式,不是同步返回图片或视频。
请求时注意
- 所有 MJ 接口都要在 Header 中发送 Authorization: Bearer <API_KEY>。生产环境请从服务端环境变量读取 Key。
- 请求地址使用当前站点配置的 API Base URL 拼接本文 endpoint;不要把 /v1 误加到 /mj 路径,也不要重复拼接 Base URL。
- 普通图生视频至少需要 videoType、image、motion;扩展视频还需要 action=extend、index 和父 taskId。
- 这是异步任务接口。HTTP 请求成功只代表请求被网关接受;还必须检查响应体 code,并保存 result 作为任务 ID。
- notifyHook 可填写回调地址;为空时按外部文档说明使用全局回调配置。回调到达后仍应以任务查询结果为准,并做好签名/来源校验和幂等处理。
- base64 图片建议使用 data:image/...;base64,... 格式,并控制请求体大小;可以先调用上传图片接口换取链接,再把链接用于需要 URL 的场景。
返回时注意
- 先检查 HTTP 状态,再检查响应体中的 code 或 status。提交接口的 code=1 通常表示成功接收,result 才是后续查询使用的任务 ID。
- 视频任务的结果可能需要比图片更长的轮询时间;以最终任务状态和媒体链接为准。
- 任务查询的终态包括 SUCCESS、FAILURE、CANCEL;MODAL 表示需要继续提交 Modal。不要只根据 progress=100% 判定成功。
请求示例
curl -X POST https://top.qingyuntop.ai/mj/submit/video \
-H "Authorization: Bearer ${QINGYUN_TOP_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"prompt": "a cat walking",
"videoType": "vid_1.1_i2v_480",
"image": "https://example.com/cat.jpg",
"motion": "low",
"batchSize": 1
}'请求参数
| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
Authorization | Header | string | 是 | 必填。Bearer API Key,例如 Bearer ${QINGYUN_TOP_API_KEY}。不要把真实 Key 写入前端、日志或代码仓库。 | - |
videoType | JSON body | string | 是 | 视频类型:vid_1.1_i2v_480 或 vid_1.1_i2v_720。 | vid_1.1_i2v_480 |
image | JSON body | string | 是 | 首帧图片,支持 URL 或 Base64。 | https://example.com/cat.jpg |
motion | JSON body | string | 是 | 运动幅度:low 或 high。 | low |
prompt | JSON body | string | 否 | 视频提示词。 | - |
endImage | JSON body | string | 否 | 尾帧图片,支持 URL 或 Base64。 | - |
loop | JSON body | boolean | 否 | 是否循环播放。 | false |
batchSize | JSON body | integer | 否 | 生成数量:1、2 或 4,默认 4。 | 1 |
action | JSON body | string | 否 | 扩展视频时使用 extend。 | - |
index | JSON body | integer | 否 | 视频索引,范围 0-3;action 不为空时必填。 | - |
taskId | JSON body | string | 否 | 父任务 ID;action 不为空时必填。 | - |
notifyHook | JSON body | string | 否 | 回调地址。 | - |
返回响应 (200)
HTTP 成功不等于任务成功;请继续检查响应体中的 code 或 status。
| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
code | 响应 JSON | integer | 否 | 业务状态码。通常 1 表示提交成功,22 表示已进入排队;其他值表示提交失败。 | - |
description | 响应 JSON | string | 否 | 提交结果描述。 | - |
result | 响应 JSON | string | 否 | 任务 ID。提交成功后用它查询任务或执行后续 Action/Modal。 | - |
properties | 响应 JSON | object | 否 | 可选的服务端任务属性,例如 Discord 频道或实例信息。不要依赖未定义的子字段。 | - |
响应示例
{
"code": 1,
"description": "Submit success",
"result": "TASK_ID",
"properties": {}
}来源原始接口定义(用于追溯)
以下内容来自 Apifox 快照,可能包含兼容层字段或旧示例;公开调用请以本页的协议说明和当前模型列表为准。
{
"method": "post",
"path": "/mj/submit/video",
"description": "提交 Midjourney 视频生成或视频扩展任务。",
"parameters": {
"header": [
{
"name": "Authorization",
"type": "string",
"required": true,
"description": "Bearer API Key。所有 MJ 接口都必须携带;不要把真实 Key 写入前端、日志或代码仓库。",
"sampleValue": "Bearer ${QINGYUN_TOP_API_KEY}"
}
],
"path": []
},
"requestBody": {
"type": "application/json",
"jsonSchema": {
"type": "object",
"properties": {
"videoType": {
"type": "string",
"description": "视频类型:vid_1.1_i2v_480 或 vid_1.1_i2v_720。",
"example": "vid_1.1_i2v_480"
},
"image": {
"type": "string",
"description": "首帧图片,支持 URL 或 Base64。",
"example": "https://example.com/cat.jpg"
},
"motion": {
"type": "string",
"description": "运动幅度:low 或 high。",
"example": "low"
},
"prompt": {
"type": "string",
"description": "视频提示词。"
},
"endImage": {
"type": "string",
"description": "尾帧图片,支持 URL 或 Base64。"
},
"loop": {
"type": "boolean",
"description": "是否循环播放。",
"example": "false"
},
"batchSize": {
"type": "integer",
"description": "生成数量:1、2 或 4,默认 4。",
"example": "1"
},
"action": {
"type": "string",
"description": "扩展视频时使用 extend。"
},
"index": {
"type": "integer",
"description": "视频索引,范围 0-3;action 不为空时必填。"
},
"taskId": {
"type": "string",
"description": "父任务 ID;action 不为空时必填。"
},
"notifyHook": {
"type": "string",
"description": "回调地址。"
}
},
"required": [
"videoType",
"image",
"motion"
],
"x-apifox-orders": [
"videoType",
"image",
"motion",
"prompt",
"endImage",
"loop",
"batchSize",
"action",
"index",
"taskId",
"notifyHook"
]
},
"examples": [
{
"value": "{\n \"prompt\": \"a cat walking\",\n \"videoType\": \"vid_1.1_i2v_480\",\n \"image\": \"https://example.com/cat.jpg\",\n \"motion\": \"low\",\n \"batchSize\": 1\n}",
"mediaType": "application/json",
"description": "MJ 请求示例"
}
]
},
"responses": [
{
"code": 200,
"name": "成功或业务结果",
"contentType": "json",
"jsonSchema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "业务状态码。通常 1 表示提交成功,22 表示已进入排队;其他值表示提交失败。"
},
"description": {
"type": "string",
"description": "提交结果描述。"
},
"result": {
"type": "string",
"description": "任务 ID。提交成功后用它查询任务或执行后续 Action/Modal。"
},
"properties": {
"type": "object",
"description": "可选的服务端任务属性,例如 Discord 频道或实例信息。不要依赖未定义的子字段。"
}
},
"x-apifox-orders": [
"code",
"description",
"result",
"properties"
]
},
"description": "HTTP 成功不等于任务成功;请继续检查响应体中的 code 或 status。"
}
],
"responseExamples": [
{
"name": "规范示例",
"mediaType": "application/json",
"data": "{\n \"code\": 1,\n \"description\": \"Submit success\",\n \"result\": \"TASK_ID\",\n \"properties\": {}\n}"
}
]
}