API 手册
Sora 视频生成
OpenAI Sora 兼容视频任务接口
Sora 视频接口兼容 OpenAI 视频任务风格,适合通过 API 创建、查询、下载和删除视频任务。
接口概览
| 能力 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 创建任务 | POST | /v1/videos | 文生视频或图生视频 |
| 查询任务 | GET | /v1/videos/{video_id} | 查询状态和结果 |
| 下载文件 | GET | /v1/videos/{video_id}/content | 下载 mp4 文件 |
| 删除任务 | DELETE | /v1/videos/{video_id} | 删除任务 |
所有接口都使用:
Authorization: Bearer $API_KEY可用模型
| 模型 | 说明 |
|---|---|
sora-2 | OpenAI Sora 兼容视频模型 |
创建任务
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 固定使用 sora-2 |
prompt | string | 是 | 视频提示词 |
size | string | 否 | 1280x720 或 720x1280 |
seconds | string | 否 | 视频时长,例如 "4"、"8"、"12" |
input_reference | file | 否 | 图生视频参考素材,支持多次传入 |
文生视频使用 application/json,图生视频使用 multipart/form-data。
curl https://cdn.12ai.org/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "镜头缓慢推进,一只未来感狐狸站在雨夜霓虹街头",
"size": "1280x720",
"seconds": "8"
}'curl https://cdn.12ai.org/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-F "model=sora-2" \
-F "prompt=主体保持不变,镜头缓慢拉远,背景变成霓虹夜景" \
-F "size=1280x720" \
-F "seconds=8" \
-F "input_reference=@reference.png;type=image/png"创建响应
{
"id": "task_xxx",
"object": "video",
"model": "sora-2",
"status": "queued",
"size": "1280x720",
"seconds": "8",
"progress": 0,
"created_at": 1760000000
}查询任务
curl https://cdn.12ai.org/v1/videos/task_xxx \
-H "Authorization: Bearer $API_KEY"状态说明
| status | 说明 |
|---|---|
queued | 已排队 |
in_progress | 生成中 |
completed | 已完成,响应中包含视频结果 |
failed | 生成失败,查看 error.message |
完成响应
{
"id": "task_xxx",
"object": "video",
"model": "sora-2",
"status": "completed",
"progress": 100,
"output": "https://img.12ai.org/videos/task_xxx.mp4",
"created_at": 1760000000,
"completed_at": 1760000090
}下载文件
优先使用查询响应中的 output 字段直接下载。需要兼容 OpenAI SDK 下载风格时,可以使用下载接口:
curl https://cdn.12ai.org/v1/videos/task_xxx/content \
-H "Authorization: Bearer $API_KEY" \
--output output.mp4删除任务
curl -X DELETE https://cdn.12ai.org/v1/videos/task_xxx \
-H "Authorization: Bearer $API_KEY"Python 轮询示例
import time
import requests
API_BASE = "https://cdn.12ai.org"
API_KEY = "sk-xxx"
task = requests.post(
f"{API_BASE}/v1/videos",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"model": "sora-2",
"prompt": "镜头缓慢推进,一只未来感狐狸站在雨夜霓虹街头",
"size": "1280x720",
"seconds": "8",
},
timeout=60,
).json()
task_id = task["id"]
while True:
result = requests.get(
f"{API_BASE}/v1/videos/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
).json()
if result["status"] == "completed":
print(result["output"])
break
if result["status"] == "failed":
raise RuntimeError(result.get("error", {}).get("message", "生成失败"))
time.sleep(3)常见问题
| 问题 | 处理方式 |
|---|---|
| 查询不到任务 | 检查 video_id 是否为创建响应里的 id |
| 一直生成中 | 视频任务耗时较长,建议每 2 到 3 秒轮询一次 |
| 下载失败 | 优先使用 output 直链,或稍后重试下载接口 |
