提交任务 → 轮询状态 → 下载视频。接口结构与 MiniMax 官方视频 API 一致, 已有脚本只需替换 base_url 与 API Key。
—
API Key · —
所有 /v1 接口需要携带请求头:
Authorization: Bearer —
也接受 X-API-Key: <key>。缺少或错误返回 401。
参考图 / 参考视频 / 参考音频需先上传,拿到 file_id 后在创建任务时引用。
同一个文件重复上传会返回同一个 id。
curl -X POST /v1/files/upload \ -H "Authorization: Bearer " \ -F "files=@person.png" \ -F "files=@car.png" \ -F "files=@street.png"
{
"files": [
{"file_id": "file_6159f1b87149", "kind": "image", "name": "person.png", "size": 1793346},
{"file_id": "file_07ef78e9d465", "kind": "image", "name": "car.png", "size": 2726058}
],
"base_resp": {"status_code": 0, "status_msg": "success"}
}
支持 png / jpg / webp / bmp / gif / mp4 / mov / webm / wav / mp3 / flac,单文件上限 2 GB。
curl -X POST /v1/video_generation \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{
"model": "h3-pulpcut",
"prompt": "subject_definitions:\n<Subject 1> is the young woman in <Picture 1> ...",
"resolution": "1080P",
"duration": 15,
"seed": 771002,
"ref_images": ["file_6159f1b87149", "file_07ef78e9d465", "file_57ca65cd8149"]
}'
{
"task_id": "a2e3128b",
"file_id": "f_a2e3128b",
"base_resp": {"status_code": 0, "status_msg": "success"}
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 否 | 模型 ID,默认 h3-pulpcut,见下表 |
prompt | string | 是 | 六段式 ref2va 提示词,≤ 20000 字符 |
resolution | string | 否 | 480P / 720P / 1080P,默认 1080P |
duration | number | 否 | 秒,1–15,默认 6;帧数自动对齐 17n+5 |
seed | int | 否 | 随机种子,默认 771002 |
ref_images | string[] | 是 | 参考图 file_id,1–9 张,顺序对应提示词中的 <Picture 1..N> |
ref_videos | string[] | 否 | 参考视频 file_id,0–3 段,锁定动作与运镜 |
ref_audios | string[] | 否 | 参考音频 file_id,0–3 段,锁定音色与环境声 |
name | string | 否 | 任务名称,仅用于后台识别 |
| model | 说明 | 1080P · 15 秒参考耗时 |
|---|
耗时为单条实测值,随提示词长度与参考素材数量浮动。单卡串行执行,任务按提交顺序处理。
curl "/v1/query/video_generation?task_id=a2e3128b" \ -H "Authorization: Bearer "
{
"task_id": "a2e3128b",
"status": "Processing",
"file_id": "f_a2e3128b",
"model": "h3-pulpcut",
"base_resp": {"status_code": 0, "status_msg": "success"}
}
| status | 含义 | 下一步 |
|---|---|---|
Queueing | 排队中 | 继续轮询,建议间隔 10 秒 |
Processing | 生成中 | 继续轮询 |
Success | 已完成 | 调用 /v1/files/retrieve 取下载链接 |
Fail | 失败 | 查看 base_resp.status_msg |
成功时会额外返回 duration_s(本任务实际耗时,秒)与 video_url。
curl "/v1/files/retrieve?file_id=f_a2e3128b" \ -H "Authorization: Bearer "
{
"file": {
"file_id": "f_a2e3128b",
"download_url": "https://h3.firstarpc.com/v1/files/web_00001_.mp4",
"expires_in": 3600
},
"base_resp": {"status_code": 0, "status_msg": "success"}
}
download_url 为相对路径,直接拼接 base_url 即可下载,支持断点续传(HTTP Range)。
import time, requests
BASE = ""
KEY = ""
H = {"Authorization": f"Bearer {KEY}"}
# 1) 上传参考图
files = [("files", open(p, "rb")) for p in ("person.png", "car.png", "street.png")]
ids = [f["file_id"] for f in
requests.post(f"{BASE}/v1/files/upload", headers=H, files=files).json()["files"]]
# 2) 创建任务
task = requests.post(f"{BASE}/v1/video_generation", headers=H, json={
"model": "h3-pulpcut",
"prompt": open("prompt.txt", encoding="utf-8").read(),
"resolution": "1080P",
"duration": 15,
"ref_images": ids,
}).json()
tid = task["task_id"]
print("task:", tid)
# 3) 轮询
while True:
q = requests.get(f"{BASE}/v1/query/video_generation",
headers=H, params={"task_id": tid}).json()
print(q["status"])
if q["status"] in ("Success", "Fail"):
break
time.sleep(10)
# 4) 下载
if q["status"] == "Success":
f = requests.get(f"{BASE}/v1/files/retrieve",
headers=H, params={"file_id": q["file_id"]}).json()["file"]
mp4 = requests.get(BASE + f["download_url"])
open("out.mp4", "wb").write(mp4.content)
| status_code | 含义 |
|---|---|
| 0 | 成功 |
| 1001 | 参数错误(字段缺失、格式不对、取值越界) |
| 1002 | 鉴权失败 |
| 1003 | task_id / file_id 不存在 |
| 1004 | 并发超限(同一来源最多 3 个任务排队或运行) |
| 1005 | 生成失败 |
| 1006 | 视频尚未生成完成 |
h3-original 约 46 分钟)。1004。