查询与下载
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, requestsBASE = "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)