你需要准备什么

你必须保留创建响应中的 id,并继续使用创建任务时的青云TOP API Key。查询和下载地址是:

操作方法与地址返回内容
查询GET https://top.qingyuntop.ai/v1/videos/{task_id}JSON 视频任务对象
下载GET https://top.qingyuntop.ai/v1/videos/{task_id}/content视频字节(通常为 MP4)

不要把 Google operation name 当作青云任务 ID,也不要把旧 /v1/video/generations 任务混用到标准 /v1/videos 路由。

状态判断

status含义客户端动作
queued已接收,等待处理约 10 秒后继续查询
in_progress正在生成继续查询,不要重复创建
completed已完成请求 /content 下载
failed生成失败停止轮询,查看任务日志

HTTP 200 只表示本次查询成功,必须以 status 判断任务是否完成。progress 是生成进度提示,不应当用来推算准确剩余时间。

查询代码示例

把 task_veo_example 替换为创建响应中的 id。下面的代码只查询已有任务,不会创建新视频。

curl --fail-with-body \
  https://top.qingyuntop.ai/v1/videos/task_veo_example \
  -H "Authorization: Bearer YOUR_API_KEY"

下载代码示例

只有 status 为 completed 后才下载。下载响应是视频字节,不要调用 response.json()。

curl --fail --location \
  https://top.qingyuntop.ai/v1/videos/task_veo_example/content \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --output veo-output.mp4

自动等待并保存

正常轮询间隔约 10 秒;示例在收到 429 或 5xx 时延迟 30 秒重试,生产程序还应遵循 Retry-After。客户端等待超时不代表服务端取消,仍应使用原任务 ID 继续查询。Google 官方提到生成可能需要约 11 秒到 6 分钟,排队时可能更久。Bash/cURL 需要 jq,Python 需要 requests,Node.js 使用 22+ 并保存为 .mjs。

set -e
task_id="task_veo_example"
for attempt in $(seq 1 90); do
  http_code=$(curl -sS -o task.json -w '%{http_code}' \
    "https://top.qingyuntop.ai/v1/videos/$task_id" \
    -H "Authorization: Bearer YOUR_API_KEY")
  case "$http_code" in
    429|5??) sleep 30; continue ;;
    2??) ;;
    *) cat task.json; exit 1 ;;
  esac
  status=$(jq -r '.status' task.json)
  case "$status" in
    completed)
      curl --fail --location \
        "https://top.qingyuntop.ai/v1/videos/$task_id/content" \
        -H "Authorization: Bearer YOUR_API_KEY" --output veo-output.mp4
      exit 0 ;;
    failed) echo "任务失败,请查看控制台任务日志"; exit 1 ;;
    queued|in_progress) sleep 10 ;;
    *) cat task.json; echo "无法识别状态,请保留任务 ID 联系支持"; exit 1 ;;
  esac
done
echo "等待超时,请保留任务 ID 稍后查询"
exit 1

下载返回 artifact_not_found 时,请按任务状态与错误检查。即使任务已是 completed,也应检查下载请求是否成功,再将响应保存为视频文件。

旧程序的兼容接口

旧程序可能使用 POST /v1/video/generations 和 GET /v1/video/generations/{task_id}。它的状态可能是 processing、succeeded、NOT_START、IN_PROGRESS 或 SUCCESS,响应也可能包在 data 中;它没有对应的 /content 下载路由。新项目请使用本页的 /v1/videos 三步流程。Apifox 中的 /v1/video/create 与 /v1/video/query?id=... 在当前基础地址上会返回 Invalid URL。