api

视频生成任务 API

直接答案POST /v1/videos 创建任务,GET /v1/videos/{task_id} 查询,completed 后再读取内容;视频是异步任务,不能把提交成功当作生成成功。

更新 · 审核信息

小白:提交、完成、下载是三步

使用真人照片或多张人物参考图生成 Seedance 视频时,先阅读真人素材视频生成完整教程:上传图片、发起审核、等待 active,再使用 asset:// 引用提交视频。教程提供完整调用脚本、参数表和审核任务查询说明。

视频生成通常需要几十秒到数分钟。POST /v1/videos 只负责创建任务,响应中的 id 或兼容字段 task_id 必须持久化;随后查询 GET /v1/videos/{task_id}。只有 status=completed 才读取结果;queuedin_progress 是中间态,failed 是失败终态。本站也保留 /v1/video/generations 兼容入口,客户端应固定一种契约,不要混用两套字段。

MiniMax-H3 官方 V2 与 OpenAI remix

本站支持 MiniMax 官方格式的 POST /v2/video_generationPOST /v2/video_regenerationPOST /v2/h3_context_irGET /v2/query/video_generation/{task_id},也支持 OpenAI 兼容的 POST /v1/videos/{video_id}/remix。所有创建和查询响应中的 ID 都是本站 system Task ID;source_task_id、路径 video_id 会在内部完成权限校验并映射为真实上游任务 ID,客户端不应保存、提交或依赖真实上游 ID。

官方路径固定操作,不自动切换:/v2/video_generation 始终按严格 generation schema 校验并调用 generation,/v2/video_regeneration 始终按严格 regeneration schema 校验并调用 regeneration,/v2/h3_context_ir 始终创建增强提示词任务。错误请求不会因为 body 看起来属于另一种操作而被静默改道。

POST /v1/videos 才使用强判据自动分流:非空 source_task_id 或恰好一个 base_video 选择 regeneration;reference_video 仍是 generation;没有强判据时也是 generation。source_task_idbase_video 并存、多个或空 base_video、以及显式 action 与结构不一致等冲突请求返回 400,并且不会先执行源任务查询、媒体处理、计费、持久化或上游调用。

每次渠道 retry 都从 immutable 原始请求重新恢复客户端 path、body 和媒体引用,再重新分类、校验、解析 system source Task ID 并选择当前 credential 的上游表示;上一 attempt 的 action、映射模型、content、暂存 URL 或真实 upstream ID 不会成为下一 attempt 的输入。客户端始终看到 system Task ID,真实上游 Task ID 只保存在私有映射中。

普通 H3 V2 生成沿用官方请求字段,durationresolutionratio 都必须按模型支持范围填写;创建响应仍只返回系统 Task ID。

MiniMax-H3 Context-IR 官方请求

POST /v2/h3_context_ir 创建异步增强提示词任务,不生成视频。请求必须使用 JSON,wire model 必须精确为 MiniMax-H3;顶层只允许 modelcontentdurationratio 和可选的 callback_urltask_type 由服务器根据路径派生并注入,客户端在该官方路径提交 task_type 会返回 400;resolutionaigc_watermark、顶层 promptactionsource_task_idmetadatasecondssize 和其他未知字段同样不被接受。

content 必须是非空数组并包含至少一个非空文本项,单个文本项最多 7000 个 Unicode 码点;duration 必须是 4 到 15 的整数。纯文本模式必须显式提供非 adaptive 的合法 ratio;首帧、仅尾帧、首尾帧或参考媒体模式可以省略 ratio。Context-IR 按其端点级 OpenAPI 支持 text + last_frame,不会借此放宽普通 generation/regeneration。callback_url 若提供会原样转发给 Hailuo。

{
  "model": "MiniMax-H3",
  "content": [{"type": "text", "text": "把这段创意扩展为结构化视频提示词"}],
  "duration": 5,
  "ratio": "16:9",
  "callback_url": "https://callback.example/context-ir"
}

创建成功只返回本站 system task_id。继续请求 GET /v2/query/video_generation/{task_id};成功结果是 task.content.prompt 中的增强提示词,而不是 task.content.url 视频地址。

MiniMax-H3 V2 official generation payload

参考文档:MiniMax-H3 创建视频生成任务(官方)。本站调用使用本站地址、令牌和系统 task_id,不要混用官方示例中的上游凭据与任务 ID。

{
  "model": "MiniMax-H3",
  "content": [{"type": "text", "text": "纸雕白兔穿过晨雾森林"}],
  "duration": 5,
  "resolution": "768P",
  "ratio": "16:9"
}

官方 /v2/video_generation 不接受顶层 prompt,也不会把它转换成 content;这类扁平输入只属于 /v1/videos 兼容入口。官方路径始终按原生 raw schema 校验并在本地返回参数错误。

官方再生成请求必须使用 MiniMax-H3、显式 resolution: "2K",并且恰好选择一种输入模式。源任务模式适合同一 MiniMax 账户中符合官方条件的成功任务:

curl "$BASE_URL/v2/video_regeneration" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMax-H3",
    "source_task_id": "system-source-task-id",
    "resolution": "2K",
    "aigc_watermark": false
  }'

base_video 模式用于提交一个符合官方约束的源视频;不能与 source_task_id 同时出现,并应在 content 中带上生成该 768P 源视频时实际使用的最终提示词和原始参考媒体。

MiniMax-H3 V2 official content regeneration payload

{
  "model": "MiniMax-H3",
  "resolution": "2K",
  "content": [
    {
      "type": "video_url",
      "role": "base_video",
      "video_url": {"url": "https://media.example.com/source.mp4"}
    },
    {"type": "text", "text": "源视频生成时的最终提示词"}
  ]
}

OpenAI 客户端可以把 system Task ID 放入路径,网关会转换成同一官方再生成能力:

curl "$BASE_URL/v1/videos/system-source-task-id/remix" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MiniMax-H3","resolution":"2K"}'

官方创建响应为 {"task_id":"<system-task-id>"}。使用该值轮询 GET /v2/query/video_generation/{task_id};OpenAI 客户端则轮询 GET /v1/videos/{task_id},同一任务会按查询路径返回对应方言。MiniMax 官方再生成仅用于把符合 MiniMax-H3 官方 768P 输出约束的源视频再生成为 2K,不是任意视频的通用转码或超分接口。

再生成使用独立计价键 MiniMax-H3__regeneration;缺少该价格合同会在提交上游前拒绝请求,显式零价仍是有效合同。预扣使用冻结的请求和价格事实;成功优先按真实 upstream usage 结算,usage 缺失时使用冻结估算,对应 token/seconds 事实仍不可用时保留冻结预扣;失败按异步任务规则退款,并以终态 CAS 和唯一财务事件防止重复结算。外部 HTTP(S)、data URL、本站内容代理、MiniMax 文件引用和 /ximg/ 输入都进入统一的安全下载、类型/大小校验、暂存和渠道 URL 转换;重试时从冻结的原始媒体重新构造,成功结果只返回处理或加速后的客户端 URL。

创建和轮询最小示例

create=$(curl -sS "$BASE_URL/v1/videos" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"sora-2","prompt":"纸雕白兔穿过晨雾森林","seconds":"8","size":"1280x720"}')

task_id=$(printf '%s' "$create" | jq -r '.id // .task_id')
test -n "$task_id" && test "$task_id" != "null"

curl "$BASE_URL/v1/videos/$task_id" \
  -H "Authorization: Bearer $API_KEY"

查询响应可能包含 progresscreated_atcompleted_atexpires_atvideo_urlerror。不要只看 HTTP 200;任务对象内部仍可能是 failed

终态机、超时与重试

建议状态机只允许 queued → in_progress → completed|failed,未知状态保留原值并告警,不能默认当成功。轮询从 2–5 秒开始,指数退避到合理上限并加随机抖动;为整项业务设置截止时间。网络超时不等于创建失败:重发前先用本地幂等键、Request-ID 或已保存任务 ID 对账,避免重复任务与重复计费。

只有读取状态这类幂等请求适合常规重试。创建和 remix 请求必须先验证供应商是否支持幂等语义;400 参数错误、401/403 认证错误和确定的内容拒绝不应自动重试。

输入、下载和生命周期

图生视频输入应使用受控 HTTPS URL 或本站适配器明确支持的格式。远程拉取必须防 SSRF、限制重定向、内容类型、像素、时长和字节数。任务完成后,可使用响应中的 video_url,或在支持时请求 GET /v1/videos/{task_id}/content。下载时使用流式复制、超时、最大字节数、哈希校验和临时文件原子落盘。

expires_at 是结果生命周期信号,不是永久存储承诺。把产物保存到自有对象存储并记录任务、用户、模型、提示词版本、内容类型、大小、哈希、保留期与删除状态。

生产可观测性与计费

指标至少包括提交成功率、排队时长、生成时长、终态成功率、失败码、过期前下载率和每个模型的成本。日志保存内部任务 ID、上游任务 ID、Request-ID 与用户幂等键,但不要记录完整敏感提示词或原始参考图。按时长、分辨率、模型档位、生成数量和重试分别核算;客户端断开不一定终止上游任务,因此取消能力和计费仍要单独确认。

专家:容量、回调与故障恢复

用队列隔离提交与轮询,限制单用户和全局在途任务,避免高峰把数据库、Redis 或供应商轮询打满。轮询器用租约防多节点重复消费,终态写入需幂等;回调若可用也必须验签、防重放并以主动查询补偿漏回调。部署前演练供应商超时、任务永久卡住、链接过期、对象存储失败和重复回调,确保退款或最终结算能与任务终态和使用日志对齐。

适用场景

  • 文生视频和图生视频任务
  • 轮询终态并下载结果
  • 控制长任务成本、并发和过期清理

API 协议

  • /v1/videos
  • /v1/videos/{task_id}
  • /v1/videos/{task_id}/content
  • /v1/videos/{video_id}/remix
  • /v1/video/generations
  • /v1/video/generations/{task_id}
  • /v2/video_generation
  • /v2/video_regeneration
  • /v2/h3_context_ir
  • /v2/query/video_generation/{task_id}

FAQ

POST 返回 200 就代表视频完成了吗?

不代表。提交只创建任务;必须保存任务 ID 并查询到 completed。failed 是终态,queued 和 in_progress 需要继续等待。

应该多久轮询一次?

从数秒开始并逐步退避,叠加随机抖动;尊重服务端提示和业务时限。高频固定轮询会放大负载与限流。

为什么完成后下载链接失效?

供应商或网关返回的签名链接可能有 expires_at。完成后应及时流式保存到自有存储,并执行访问控制和清理策略。

官方来源

  1. OpenAI Video Generation Guide Official
  2. OpenAI Videos API Reference Official
  3. MiniMax-H3 创建视频生成任务 Official
  4. MiniMax Video Generation V2 Regeneration Official
  5. MiniMax H3 Context-IR Official