概要
GET /jobs/{id} をポーリングする代わりに、Krea に Webhook URL を指定します。ジョブが終了すると、Krea はその URL にジョブを送信します。
Webhook の使用方法
任意の生成リクエストにX-Webhook-URL ヘッダーを追加します。ジョブが完了、失敗、またはキャンセルされると、Krea はその URL に POST リクエストを送信します。
Webhook ペイロード
リクエストボディはGET /jobs/{id} のレスポンスと同じ形式です:
署名の検証
Krea はすべての Webhook に Ed25519 で署名します。ペイロードを信頼する前に署名を検証し、署名のないリクエストは拒否してください。
Krea は、タイムスタンプ、URL、メタデータ、生のリクエストボディを改行で連結したものの SHA-256 を小文字の 16 進数で表した値に署名します:
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 についてはリトライしません。
同じジョブが複数回届くことがあるため、job_id と status で重複を排除してください。
Webhook vs ポーリング
HTTP リクエストを受信できるサーバーがある場合は Webhook を使用してください。クライアントサイドアプリケーションやパブリックエンドポイントを公開できない場合はポーリングを使用してください。
次のステップ
ジョブのライフサイクル
ジョブの状態とステータスポーリングについて学ぶ
コードサンプル
API を使った画像生成を最初から最後まで試す