概述
与其轮询GET /jobs/{id},不如向 Krea 提供一个 webhook URL。任务结束时,Krea 会将任务发送到该 URL。
使用 Webhooks
在任意生成请求中添加X-Webhook-URL 请求头。当任务完成、失败或被取消时,Krea 会向该 URL 发送 POST 请求。
Webhook 载荷
请求体的结构与GET /jobs/{id} 的响应相同:
验证签名
Krea 使用 Ed25519 为每个 webhook 签名。在信任载荷之前请先验证签名,并拒绝没有签名的请求。
Krea 将时间戳、URL、元数据和原始请求体用换行符连接,计算其 SHA-256 并以小写十六进制表示,然后对该值签名:
- 检查
X-Krea-Webhook-Url是否与你随任务发送的X-Webhook-URL完全一致。 - 检查时间戳与服务器当前时间的差值是否在 5 分钟以内。
- 如果签名能通过
https://api.krea.ai/.well-known/jwks.json中任一密钥的验证,则接受该请求。密钥最多缓存 24 小时。Krea 会在开始使用新密钥签名的 24 小时前发布该密钥。
express.raw(),在基于 Fetch API 的框架中使用 await request.arrayBuffer(),在 Flask 中使用 request.get_data()。如果缺少 X-Krea-Webhook-Metadata 请求头,请将其视为空字符串。
投递与重试
请在 15 秒内返回2xx。如果请求超时、无法连接,或收到 5xx、408、423、425 或 429,Krea 会在大约 10 分钟内持续重试,每次都使用新的时间戳和签名。对于其他 4xx,Krea 不会重试。
同一任务可能会多次送达,因此请根据 job_id 和 status 去重。
Webhooks 与轮询
如果你有可以接收 HTTP 请求的服务器,建议使用 webhooks。对于客户端应用或无法公开端点的场景,则使用轮询。
下一步
任务生命周期
了解任务状态和状态轮询
代码示例
使用 API 从头到尾生成一张图像