# 异步任务

## 状态

queued → submitting → running → persisting → succeeded。失败返回 failed，确认取消返回 canceled。submission_unknown 表示无法确认上游是否受理。

## 查询与恢复

GET /v1/tasks/{id} 返回状态、作品和账单。请求超时后查询原任务，不要换幂等键重新生成。只有作品已归档并完成结算后才会显示 succeeded。

## 取消

POST /v1/tasks/{id}/cancel 与 MCP tasks.cancel 使用 create 权限。本地排队任务在同一事务中停止提交并释放预留，返回 HTTP 200 和 canceled。

Beatra 已提交任务可以申请取消，返回 HTTP 202，cancellation.status 为 requested 或 checking。申请不表示已停止，预留继续保留；继续查询原任务，不要创建替代任务。提交响应尚未确认时，平台先确认原任务编号，再发送取消请求。

| cancellation.status | 含义 |
|---|---|
| none | 未申请取消 |
| requested / checking | 申请已保存，正在等待确认 |
| refused | 上游拒绝取消，任务继续查询 |
| unconfirmed | 取消请求未获确认，任务继续查询 |
| confirmed | 已确认取消，任务状态为 canceled，预留已释放 |
| not_needed | 任务先成功或失败，按最终任务状态和账单处理 |

当前 Kie 等未支持的渠道返回 409 CANCEL_UNAVAILABLE；归档中的作品也无法取消。Beatra 返回 409 时不宣称停止、不释放预留。即使取消 POST 返回终态，平台也会查询确认后再收尾；查询中若任务已成功，正常归档并按原报价收费。

重复申请复用已有取消意图。终态任务原样返回，不会再次释放或收费。取消失败与生成失败是不同状态；只在最终 task.status 为 canceled 时向用户确认已经取消。

## 删除

删除作品不会删除账单与财务记录。正在执行的任务不能作为已完成作品删除。
