API v1

接收任务完成通知

POSTtask.completed发送到你登记的回调地址

任务进入成功、失败或取消终态后发送 task.completed;成功任务须已完成交付处理。

查看 Markdown
  • 返回任意 2xx 表示已收到;其他状态或超时会按计划重试。
  • 先用 Chenvoya-Signature 验证签名,再处理正文。
  • 至少送达一次:验签后按正文的 event_id 去重。
  • 通知不含下载地址;结果请查询任务。

请求头

#Chenvoya-Event-Idstring必填

事件标识的便利副本,此请求头未被签名覆盖。验签后以正文 event_id 去重。

格式uuid
#Chenvoya-Signaturestring必填

通知签名,包含 t 与 v1。按回调通知总览校验时间戳,并使用原始正文计算 HMAC-SHA256 后做常量时间比较。

请求体application/json · 必填

#event_idstring必填

已签名的事件唯一标识,接收方验签成功后使用此字段去重。

格式uuid
#objectstring必填

通知对象类型,固定为 event。

固定为event
#typestring必填

通知类型,区分任务完成与任务结算。

task.completed任务完成通知
task.billing_settled任务结算通知
#schema_versioninteger必填

通知正文格式版本,当前为整数一。

固定为1
#created_atinteger必填

事件创建时间,Unix 整数秒;与每次尝试的签名时间分别校验。

范围≥ 0
#dataobject必填

事件冻结时的客户任务快照。

9 个子字段
#task_idstring必填

本团队的平台任务标识。

长度4–128字符A–Z a–z 0–9 _ -
#request_idstring必填

创建任务的请求关联标识。

长度4–128字符A–Z a–z 0–9 _ -
#billing_correlation_idstring必填

创建任务的费用关联标识。

长度4–128字符A–Z a–z 0–9 _ -
#modelstring必填

本任务的公开模型标识。

dreamina-seedance-2-0-260128Seedance 2.0
dreamina-seedance-2-0-fast-260128Seedance 2.0 Fast
dreamina-seedance-2-0-mini-260615Seedance 2.0 Mini
#statusstring必填

任务终态,区分成功、失败与取消。

succeeded已成功
failed已失败
cancelled已取消
#delivery_statusstring必填

事件冻结时的结果交付状态。

pending待交付
materializing准备下载
available可下载
output_unavailable结果不可用
#errorobject必填可能为空

任务错误对象;没有错误时为空。

3 个子字段
#codestring必填

机器可读错误码。

no_common_asset_route素材暂不可用
asset_not_ready引用素材仍在处理中
asset_review_timeout素材审核超时
route_misconfigured服务配置错误
route_temporarily_unavailable暂不可用
generation_expired生成已超时
generation_failed生成失败
input_fetch_failed输入素材下载失败
input_url_not_allowed输入素材链接不允许下载
input_too_large输入素材超过大小上限
input_unsupported输入素材格式、尺寸或时长不受支持
input_rejected输入素材未通过内容审核
input_preparation_failed未能及时准备输入素材
input_duration_exceeded输入素材总时长超过型号上限
#messagestring必填

供人阅读的错误说明。

长度1–1024
#detailsobject

可选的结构化错误详情。

1 个子字段
#content_indexinteger

失败输入在原始 content 数组中的下标,从 0 起,文字项也计入。

范围0–50
#settlement_statusstring必填

事件冻结时的费用结算状态。

reserved已预留费用
pending待处理
reconciliation_required需要核对
settled已结算
settled_with_receivable已结算,仍有应收金额
#final_actual_coststring必填可能为空

最终实际费用,单位为美元并保留六位小数;尚未确定时为空。

格式6 位小数

响应

接收成功。任意 2xx 响应均确认送达,其他状态或超时将按计划重试。

重试计划

  1. 10 秒后
  2. 1 分钟后
  3. 5 分钟后
  4. 之后每小时一次
  5. 最长 7 天

验证签名

验签、去重和时间窗口的完整规则见「验证回调签名」。

Python
import base64
import hashlib
import hmac
import time

def verify(signing_secret, header, body):
    fields = {}
    for item in header.split(","):
        name, _, value = item.strip().partition("=")
        fields[name] = value
    t, v1 = fields.get("t", ""), fields.get("v1", "")
    if not t.isdigit() or abs(time.time() - int(t)) > 300:
        return False
    key = base64.urlsafe_b64decode(signing_secret + "=" * (-len(signing_secret) % 4))
    signed = b"chenvoya.v1." + t.encode() + b"." + body
    expected = hmac.new(key, signed, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, v1)