任务查询

GET /v1/tasks/:task_id

查询异步任务的执行状态和结果。图片生成、图片编辑、视频生成和视频编辑都使用这个接口。响应格式与 Webhook 回调 完全一致,客户端只需一套解析代码。

任务查询是公开只读接口,不要求 API Key。若请求里仍带有 Authorization header,服务端会忽略它。task_id 本身是短期只读访问凭证,请不要把它暴露到公开页面、第三方日志或会外泄 Referer 的 URL 中。

路径参数

参数说明
task_id提交时返回的任务 ID(task_ 前缀)

鉴权

不要求鉴权。可以直接使用提交任务时返回的 task_id 查询:

curl "https://api.token8.pro/v1/tasks/task_abc123def456"

服务端只接受 task_ 前缀的任务 ID。错误或不存在的任务 ID 会返回 404;客户端收到 404 后应停止轮询。

如果你的 SDK 或代码复用了提交请求的 Authorization: Bearer sk-...,也可以继续发送;任务查询接口不会处理这个 header。

响应字段

字段类型说明
task_idstring任务 ID
statusstringpending / processing / completed / failed
modelstring实际执行的模型或规格。视频生成可能显示为 omni_flash_8s_1080p 这类规格名
operationstringimage_generation / image_edit / video_generation / video_edit
media_typestringimage / video
result_typestring业务子类型,如 t2ir2it2vr2vvideo_edit
file_extstring结果文件扩展名,如 pngjpgwebpmp4
content_typestring结果 MIME,如 image/pngvideo/mp4
duration_msinteger媒体本身时长,只有上游明确返回媒体时长时才出现;不等于生成耗时
providerstring当前执行商家名称(display_name,未设置时回退到 name
elapsed_sinteger当前有效 attempt 的耗时(秒)
total_elapsed_sinteger从首次提交到当前状态的总耗时(秒)
created_atinteger创建时间 (unix timestamp)
completed_atinteger完成时间 (unix timestamp,完成/失败时)
dataarray生成结果(completed 时),如 [{ "url": "..." }]
fail_reasonstring失败原因(failed 时)
messagestring面向用户的失败说明(failed 且可安全展示时)
total_costinteger最终扣费额度(失败已退款的 attempt 不计入)
attempt_countinteger尝试次数(含首次)
attemptsarray每次尝试的详情

attempts 子字段

字段类型说明
attempt_nointeger尝试序号(从 1 开始)
providerstring该次使用的商家(display_name
statusstring该次状态
fail_reasonstring该次失败原因(如有)
messagestring该次失败的可展示说明(如有)
elapsed_sinteger该次耗时(秒,完成时)

任务状态流转

pending → processing → completed
                    ↘ failed → 自动切商家重试
                        ↘ processing (新商家) → completed

响应示例

处理中(单次):

{
  "task_id": "task_abc123def456",
  "status": "processing",
  "model": "gpt-image-2",
  "provider": "Token8",
  "elapsed_s": 15,
  "total_elapsed_s": 15,
  "created_at": 1714450000,
  "total_cost": 0,
  "attempt_count": 1,
  "attempts": [
    { "attempt_no": 1, "provider": "Token8", "status": "processing" }
  ]
}

已完成(单次成功):

{
  "task_id": "task_abc123def456",
  "status": "completed",
  "model": "gpt-image-2",
  "operation": "image_generation",
  "media_type": "image",
  "provider": "Token8",
  "elapsed_s": 23,
  "total_elapsed_s": 23,
  "created_at": 1714450000,
  "completed_at": 1714450023,
  "data": [{ "url": "https://r2.token8.pro/task_abc123def456.png" }],
  "total_cost": 5000,
  "attempt_count": 1,
  "attempts": [
    { "attempt_no": 1, "provider": "Token8", "status": "completed", "elapsed_s": 23 }
  ]
}

视频已完成:

{
  "task_id": "task_abc123def456",
  "status": "completed",
  "model": "omni_flash_edit",
  "operation": "video_edit",
  "media_type": "video",
  "result_type": "video_edit",
  "file_ext": "mp4",
  "content_type": "video/mp4",
  "provider": "HOLO",
  "elapsed_s": 95,
  "total_elapsed_s": 95,
  "created_at": 1714450000,
  "completed_at": 1714450095,
  "data": [{ "url": "https://r2.token8.pro/abcdef12/task_abc123def456.mp4" }],
  "total_cost": 112000,
  "attempt_count": 1,
  "attempts": [
    { "attempt_no": 1, "provider": "HOLO", "status": "completed", "elapsed_s": 95 }
  ]
}

自动重试后成功(多次尝试):

{
  "task_id": "task_abc123def456",
  "status": "completed",
  "model": "gpt-image-2",
  "provider": "Pic2API",
  "elapsed_s": 23,
  "total_elapsed_s": 35,
  "created_at": 1714450000,
  "completed_at": 1714450035,
  "data": [{ "url": "https://r2.token8.pro/task_abc123def456.png" }],
  "total_cost": 3000,
  "attempt_count": 2,
  "attempts": [
    { "attempt_no": 1, "provider": "Token8", "status": "failed", "fail_reason": "provider_timeout", "elapsed_s": 12 },
    { "attempt_no": 2, "provider": "Pic2API", "status": "completed", "elapsed_s": 23 }
  ]
}

开启「图片/视频生成重试」后,失败自动切换商家。task_id 不变,attempts 记录完整过程。失败 attempt 的费用已自动退还,total_cost 只计成功的那次。

内容安全失败:

{
  "task_id": "task_abc123def456",
  "status": "failed",
  "model": "omni_flash_components_6s_1080p",
  "operation": "video_generation",
  "media_type": "video",
  "provider": "HOLO",
  "fail_reason": "content_policy_violation",
  "message": "提示词或参考图未通过内容安全检测,请修改后重试",
  "total_cost": 0,
  "attempt_count": 1,
  "attempts": [
    {
      "attempt_no": 1,
      "provider": "HOLO",
      "status": "failed",
      "fail_reason": "content_policy_violation",
      "message": "提示词或参考图未通过内容安全检测,请修改后重试",
      "elapsed_s": 53
    }
  ]
}

内容安全失败属于请求内容问题,不会切换商家重试;Token8 会保留上游原始错误在后台日志中,但公开任务查询只返回归一后的 fail_reason 和可展示 message

轮询建议

  • 首次查询建议等待 3 秒
  • 连续处理中使用退避间隔,例如 3s → 5s → 8s → 13s → 20s
  • 收到 completedfailed 后立即停止
  • 收到 404 后立即停止,不要继续重试同一个任务
  • 客户端等待上限建议:图片 5 分钟,视频 30 分钟
  • 图片编辑和视频任务通常比图片生成更慢,建议优先使用 Webhook 回调
  • 推荐使用 Webhook 回调 替代轮询