异步任务接口(Tasks API)
视频、音乐等耗时任务走 通用任务体系:提交后返回任务 ID,再按 ID 查询状态与结果。
通用说明
| 项 | 值 |
|---|---|
| Base URL | https://187api.com |
| 鉴权 | Authorization: Bearer <API_KEY> |
| 路径前缀 | /v1 |
| 计费 | 按请求里的 model(「请求并计费模型」)计费 |
| 失败退款 | 任务最终失败或取消时,预扣额度会退回 |
接口一览
| 用途 | 方法 | 路径 |
|---|---|---|
| 提交任务 | POST | /v1/tasks/{key} |
| 查询任务 | GET | /v1/tasks/{key} |
| 查询产物列表 | GET | /v1/tasks/{key}/artifacts |
| 下载产物 | GET | /v1/tasks/{key}/artifacts/{artifact_key}/content |
信息
路径中的 {key} 在提交接口里是插件标识(如 sora、kling),在查询接口里是任务 ID。
任务状态
| 状态 | 含义 |
|---|---|
queued | 排队中 |
in_progress | 处理中 |
completed | 已完成 |
failed | 失败(已退款) |
上游状态会被归一化到上面四种:
| 上游状态 | 我们的状态 |
|---|---|
succeeded / completed | completed |
failed / cancelled | failed |
queued / waiting | queued |
running | in_progress |
提交任务
POST /v1/tasks/{key}
curl https://187api.com/v1/tasks/sora \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<视频模型名>",
"prompt": "一只猫在雨中穿过霓虹街道"
}'
响应:
{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"object": "video.task",
"model": "<视频模型名>",
"status": "queued",
"created_at": 1779104464
}
提示
id 与 task_id 值相同,任选其一用于后续查询。
查询任务
GET /v1/tasks/{task_id}
curl https://187api.com/v1/tasks/task_xxxxxxxxxxxxxxxxxxxxxxxx \
-H "Authorization: Bearer $API_KEY"
响应(data 中含完整任务信息):
{
"code": "success",
"message": "",
"data": {
"id": 1,
"task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"platform": "sora",
"action": "generations",
"status": "completed",
"progress": "100%",
"result_url": "https://cdn.example.com/....mp4",
"submit_time": 1779104464,
"start_time": 1779104465,
"finish_time": 1779104530,
"quota": 12345,
"fail_reason": ""
}
}
查询产物
GET /v1/tasks/{task_id}/artifacts
产物是任务的输出文件(如视频、音频)。下载时用产物自己的 key:
GET /v1/tasks/{task_id}/artifacts/{artifact_key}/content
信息
该下载接口支持 TokenOrTaskArtifactAccessAuth —— 既可以用 API Key,也可以用任务级凭据访问。
已支持的任务平台
按源码中的任务插件:
| key | 平台 | 能力 |
|---|---|---|
sora | OpenAI Sora | 文生视频、图生视频、remix |
kling | 快手可灵 | 文生视频、图生视频 |
jimeng | 火山引擎即梦 | 文生视频、图生视频、首尾帧 |
vidu | 生数 Vidu | 文生/图生/首尾帧/参考生视频 |
google | Google Veo(Gemini API) | 文生视频、图生视频 |
vertex-ai | Google Veo(Vertex AI) | 文生视频、图生视频 |
doubao | 字节 Seedance | 视频生成任务 |
hailuo | MiniMax 海螺 | 视频生成 |
alibaba | 阿里通义万相 | 图像/视频/多模态生成 |
xai | xAI Grok | 视频生成、编辑、扩展 |
sunoapi | SunoAPI | 音乐生成 |
信息
具体可用的模型名与价格,以控制台的 模型广场 与任务插件配置为准。 不同平台支持的分辨率、时长、参考输入能力不同。
轮询建议
import time
import requests
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def wait_task(task_id, interval=10, timeout=1800):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(
f"https://187api.com/v1/tasks/{task_id}", headers=HEADERS, timeout=30
)
r.raise_for_status()
task = r.json()["data"]
if task["status"] in ("completed", "failed"):
return task
time.sleep(interval)
raise TimeoutError("任务超时")
task = wait_task("task_xxxxxxxxxxxxxxxxxxxxxxxx")
if task["status"] == "completed":
print(task.get("result_url"))
else:
print("失败原因:", task.get("fail_reason"))
排错
| 现象 | 原因 | 处理 |
|---|---|---|
| 404 | {key} 写错 | 用上表中的插件 key |
| 403 | 分组不含该任务模型 | 换分组或换模型 |
任务一直 queued | 通道排队 | 稍后重试,或在控制台查通道状态 |
failed | 上游失败 | 看 fail_reason,额度会自动退回 |
| 拿不到产物 | 任务未完成 | 先轮询到 completed |