查询视频任务
视频任务提交后需要通过查询接口读取状态、进度、结果 URL 和失败信息。即使配置了 Webhook,也建议保留主动查询能力。
方法与路径
推荐统一查询入口:
GET /v1/tasks/{task_id}兼容入口:
GET /v1/videos/{task_id}
GET /v1/video/generations/{task_id}
GET /v1/videos/{task_id}/content
GET /api/v3/contents/generations/tasks/{task_id}兼容路径还支持按官方形状列出和取消任务:
GET /api/v3/contents/generations/tasks
DELETE /api/v3/contents/generations/tasks/{task_id}兼容路径响应中的 content.video_url、content.last_frame_url 等字段可能只在任务 成功后出现。无论使用哪种入口,都先检查 status 和 error,再读取结果地址。
标准请求
curl https://moonapix.com/v1/tasks/task_01HX... \
-H "Authorization: Bearer <MOONAPIX_API_KEY>"响应示例
{
"id": "task_01HX...",
"object": "task",
"trace_id": "2026060301010100000000000000000000",
"request_id": "2026060301010100000000000000000000",
"status": "succeeded",
"model": "your-video-model",
"created_at": 1710000000,
"output": [
{
"type": "video",
"url": "https://example.com/result.mp4"
}
],
"error": null
}状态说明
| 状态 | 说明 | 建议 |
|---|---|---|
pending | MoonApiX 已受理,等待提交或系统准备。 | 稍后继续查询。 |
submitted | 已提交生成任务,等待开始处理。 | 稍后继续查询。 |
running | 正在生成。 | 继续等待,避免高频轮询。 |
succeeded | 已完成。 | 读取结果 URL 并保存。 |
failed | 任务失败。 | 查看 error、trace_id 和原始请求。 |
cancelled | 任务已取消。 | 停止查询。 |
结果字段
请先判断 status,再读取结果 URL:
status为succeeded时,任务已成功,可以读取结果 URL。status为pending、submitted、running、failed或cancelled时,不要读取结果 URL。失败或未完成响应可能不会包含output或任何结果地址;failed表示任务失败,请读取error、trace_id和request_id。/v1/videos/{task_id}/content只建议在任务成功后使用。该兼容下载入口可能返回302跳转,请让 HTTP 客户端跟随重定向。
成功任务的结果可能出现在以下字段。不同兼容入口的响应结构可能不同,请以接口实际返回为准。
| 字段 | 说明 |
|---|---|
output[].url | 推荐读取的视频结果 URL。 |
url | 部分兼容响应中的结果 URL。 |
video_url | 部分视频响应中的结果 URL。 |
result_url | 部分任务链响应中的结果 URL。 |
content.video_url | 视频查询或官方兼容查询中的视频结果地址。 |
content.last_frame_url | 可选,生成视频的尾帧图片地址;与输入尾帧参考图不同。 |
生成结果尾帧
seedance-2.5-cl 已验证创建请求中的 return_last_frame=true。任务成功后,以下两种查询入口都可以返回 content.last_frame_url,无需开启 raw 模式或获取完整原始报文。其他模型是否支持,请查看对应模型页。
GET /v1/videos/{task_id} 的成功响应主要字段:
{
"id": "task_xxx",
"task_id": "task_xxx",
"status": "succeeded",
"content": {
"video_url": "https://example.com/result.mp4",
"last_frame_url": "https://example.com/last-frame.jpg"
}
}GET /api/v3/contents/generations/tasks/{task_id} 的成功响应主要字段:
{
"id": "task_xxx",
"status": "succeeded",
"content": {
"video_url": "https://example.com/result.mp4",
"last_frame_url": "https://example.com/last-frame.jpg"
}
}id 均为 MoonApiX 公共任务 ID;/v1/videos 返回的 task_id 与 id 相同。官方兼容响应不要求额外的 task_id 字段。
- 先确认
status=succeeded且没有错误,再读取图片地址。content.last_frame_url是独立图片 URL,不是视频 URL。 - 尾帧是可选结果。未请求、模型未产出或没有可用的尾帧地址时,该字段可能省略;不要用视频地址代替。
- 创建请求中的
last_frame_url或参考素材的role=last_frame表示输入尾帧参考图,不能替代return_last_frame=true。 - 根据图片下载响应的
Content-Type识别实际格式,不要固定要求 PNG;seedance-2.5-cl已验证返回 JPEG。 - 直接使用返回的完整图片 URL。地址不保证永久有效,需要长期保存时及时下载到自己的存储。
结果 URL 策略
成功任务可能返回经过 MoonApiX 策略批准的直达媒体 URL,也可能返回 MoonApiX 管理的媒体 URL。两者都是客户可用结果;请直接使用接口实际返回的完整地址,不要按域名判断任务是否成功,也不要强制改走内容下载入口。
客户端集成时请遵循:
- 不要根据结果 URL 推断模型能力或自行选择其他下载入口。
- 不要自行拼接或改写结果 URL。
- 保存接口返回的完整 URL,包括可能存在的签名查询参数;缺少或改写参数可能导致下载失败。
- 如果业务需要长期归档、二次分发或去除临时签名依赖,请在业务侧下载后保存到自己的存储。
内容下载入口
GET /v1/videos/{task_id}/content 是兼容兜底入口,只应在任务 succeeded 且查询响应没有提供可用结果 URL 时调用。该接口可能返回 302 跳转,也可能返回代理视频流;客户端请使用 curl -L 或在 SDK 中开启自动重定向。
curl -L https://moonapix.com/v1/videos/task_01HX.../content \
-H "Authorization: Bearer <MOONAPIX_API_KEY>" \
-o result.mp4轮询建议
- 前 30 秒可以每 3 到 5 秒查询一次。
- 长任务建议逐步拉大间隔,例如 10 秒、20 秒、30 秒。
- 任务进入成功、失败或取消状态后停止轮询。不要仅凭响应里出现 URL 字段判断任务成功。
- 在业务系统保存最终 URL 和原始响应,便于后续排查。