查询与下载

Open in ShowDoc → · All docs

查询与下载

GET /v1/videos/{id}

轮询 GET /v1/videos/{id} 获取最近状态。任务完成(status=completed)时,网关统一注入 output_url = {base}/v1/videos/{task_id}/content —— 无论上游把结果放在哪,对外只暴露这一个稳定地址。

查询响应示例(完成后)

{
  "id": "task_xxxxxxxx",
  "task_id": "task_xxxxxxxx",
  "object": "video",
  "status": "completed",
  "progress": 100,
  "created_at": 1700000000,
  "completed_at": 1700000060,
  "output_url": "https://gsnails.xyz/v1/videos/task_xxxxxxxx/content"
}

下载结果

GET /v1/videos/{id}/content

任务完成后调用 GET /v1/videos/{id}/content 直返二进制(图片或视频);data: URL 会自动解码。任务未完成返回 400,客户端附加的 query 参数不透传。

状态机

queued → in_progress(progress 0~100)→ completed | failed。只按 status 终态结束轮询;失败任务平台全额退款。

完整轮询示例

import time, requests

BASE = "https://gsnails.xyz/v1" KEY = "sk-..." H = {"Authorization": f"Bearer {KEY}"}

1) create — returns a queued task

job = requests.post(f"{BASE}/videos", headers=H, json={ "model": "gpt-image-2", "prompt": "a neon fox", "tier": "2k", }).json() task_id = job["id"]

2) poll until the task reaches a terminal state

while job["status"] not in ("completed", "failed"): time.sleep(3) job = requests.get(f"{BASE}/videos/{task_id}", headers=H).json()

3) download via the unified output_url

if job["status"] == "completed": url = job["output_url"] # = {BASE}/videos/{id}/content open("out.bin", "wb").write(requests.get(url, headers=H).content)