接收任务结算通知
task.completed 已送达或放弃且任务结算为 settled 或 settled_with_receivable 后,发送 task.billing_settled,使用独立的七天投递窗口。
- 返回任意 2xx 表示已收到;其他状态或超时会按计划重试。
- 签名、去重和重试规则与
task.completed相同。 - 在
task.completed送达或放弃、且结算确定后发送。 - 完成三十天后仍未结算的任务不再发送这条通知。
请求头
请求体
已签名的事件唯一标识,接收方验签成功后使用此字段去重。
通知对象类型,固定为 event。
通知正文格式版本,当前为整数一。
事件创建时间,Unix 整数秒;与每次尝试的签名时间分别校验。
事件冻结时的客户任务快照。
9 个子字段
本团队的平台任务标识。
创建任务的请求关联标识。
创建任务的费用关联标识。
本任务的公开模型标识。
dreamina-seedance-2-0-260128Seedance 2.0dreamina-seedance-2-0-fast-260128Seedance 2.0 Fastdreamina-seedance-2-0-mini-260615Seedance 2.0 Mini任务错误对象;没有错误时为空。
3 个子字段
机器可读错误码。
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输入素材总时长超过型号上限供人阅读的错误说明。
事件冻结时的费用结算状态。
reserved已预留费用pending待处理reconciliation_required需要核对settled已结算settled_with_receivable已结算,仍有应收金额最终实际费用,单位为美元并保留六位小数;尚未确定时为空。
响应
接收成功。任意 2xx 响应均确认送达,其他状态或超时将按计划重试。
重试计划
- 10 秒后
- 1 分钟后
- 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)