メインコンテンツへスキップ

概要

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 進数で表した値に署名します:
リクエストを検証するには:
  1. X-Krea-Webhook-Url が、ジョブとともに送信した X-Webhook-URL と完全に一致することを確認します。
  2. タイムスタンプがサーバーの現在時刻から 5 分以内であることを確認します。
  3. https://api.krea.ai/.well-known/jwks.json 内のいずれかの鍵で署名を検証できた場合に、リクエストを受け入れます。鍵のキャッシュは最大 24 時間までにしてください。Krea は新しい鍵での署名を開始する 24 時間前にその鍵を公開します。
再シリアライズした JSON ではなく、生のボディのバイト列をハッシュ化してください。たとえば、Express では 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 を使った画像生成を最初から最後まで試す