イベント一覧
エンティティレベルのイベント(
user.status.updated、business.status.updated)も、取引のアクティビティの結果として発火することがあります。詳しくはエンティティのWebhookを参照してください。
サンドボックスのアプリケーションでは、
transaction.createdおよびtransaction.status.updatedのWebhookは送信されません。これらのイベントをテストするには、本番環境のアプリケーションを使用するか、コンソールのAPI & Webhooks → Try Webhookを使用してください。トラベルルールのサンドボックス環境での情報交換では、environment: sandbox付きのtravel_rule.status.updatedのWebhookが送信されます。本番運用の前に情報交換をテストするには、Didit Test VASPを使用してください。エンベロープ
DiditのWebhookはフラットな本文を使用します。イベントのフィールドはエンベロープのフィールドと並んでトップレベルに配置され、ネストされたdataオブジェクトはありません。
すべての配信には以下が含まれます。
ペイロードの構造
transaction.createdとtransaction.status.updated
どちらのイベントも同じペイロードを共有します。簡潔なサマリーとaction_requiredブロック(またはnull)で構成されます。
GET /v3/transactions/{transaction_id}/で完全なレコードを取得してください。ステータスがなぜ変更されたかを含む詳細(当事者、rule_runs、provider_results、travel_rule、cost_breakdown、decision_reason_code)が返されます。
transaction_rule_suggestions.created
このイベントは個々の取引ではなくルールセットに関するものであるため、取引IDは含まれません。
個人データは一切含まれません。含まれるのは提案ID、種類、タイトル、件数のみです。
通常のエンベロープフィールド(
event_id、timestamp、application_id、environment)が本文に追加されます。
travel_rule.status.updated
FINISHED、CANCELLED、EXPIREDへの移行を含め、すべての遷移で発火します。送金がこれらのいずれかに達すると、その送金についてトラベルルールのイベントはそれ以上送信されません。
イベントが直前のイベントと同じステータスを繰り返すことがあります。たとえば、再送時に再びレールが見つからず、送金がCOUNTERPARTY_VASP_NOT_FOUNDのままとなる場合です。
railはINTERNAL、TRP、GTR、TRUST、VERIFYVASP、SYGNA、EMAIL、TEST_VASP(Didit Test VASPが応答したサンドボックスの送金で、test_vasp: trueとtest_vasp_scenarioも含まれます)、またはレールが選択されていない間は""(sunrise登録では常に"")のいずれかです。
取引の作成、sunrise登録、受信したTRP照会、またはINTERNALレールの受信側では、Diditはまずtransaction.createdを送信し、その後に取引のtravel_rule.status.updatedイベントを送信します。
その処理中に取引のステータスを変更するルールがある場合、transaction.createdより前にtransaction.status.updatedが送信されることもあります。
すでに作成済みの入金取引に紐づくsunrise登録では、transaction.createdは送信されません。
各Webhookは個別に配信・再試行されるため、再試行されたイベントが後続のイベントより後に届くことがあります。ハンドラーはtransaction_idをキーにし、現在の状態が必要な場合は取引を再取得してください。
ステータス遷移の例
シンプルな承認
レビュー後に承認
ステップアップ認証
トラベルルールの送金
transaction.createdが先にキューに入ります。各Webhookは個別に配信されるため、到着順序に依存しないでください。
TRUST経由で送信された送金にはCOMPLETEDイベントが送信されません。TRUSTはDiditが読み取れる応答を返さないためです。送金は確認期限までAWAITING_COUNTERPARTYのままとなり、その後EXPIREDで終了します。GTR、VerifyVASP、Sygna Bridge経由の場合、Diditはネットワークから取引相手の応答を読み取り、イベントはその応答に応じて発生します。
署名検証
すべての配信は送信先の共有シークレットを使用してHMAC-SHA256で署名され、3つの署名ヘッダーとタイムスタンプが付与されます。再試行と配信保証
5xx、404、タイムアウト、または接続失敗が発生した場合、Diditは最大2回再試行します。1回目は最初の失敗から約1分後、2回目はそこからさらに約4分後です。- 再試行される配信では同じ
event_idが使われます。ハンドラーではこの値で重複を排除してください。 - 最後の再試行も失敗すると、そのイベントの配信は停止し、組織に通知されます。送信先が通知なしに無効化されることはありません。
2xxをすばやく返してください(キューに入れてから処理してください)。ACKが遅いと、タイムアウトや重複配信が発生するおそれがあります。
冪等性
event_idを独自の重複排除ストアに保存し、各Webhookを確実に1回だけ処理してください。エンドポイントのACKが遅い場合やリクエストの途中で接続が切れた場合、同じイベントが再配信されることがあります。
Webhookの購読
次のステップ
Webhookリファレンス
送信先、署名、再試行。
ステータス
ステートマシンの全体像。
連携ガイド
本番環境でのWebhookの処理。