Zum Hauptinhalt springen
Transaction Monitoring sendet drei Webhook-Ereignisse, die zusammen den gesamten Transaktionslebenszyklus abdecken, dazu ein optionales viertes, das neue Regelvorschläge meldet. Alle werden über die Standard-Webhook-Infrastruktur von Didit mit HMAC-SHA256-Signierung übertragen. Informationen zu Zielen, Signierung und Tests finden Sie in der Webhook-Referenz.

Ereigniskatalog

Ereignisse auf Entitätsebene (user.status.updated, business.status.updated) können ebenfalls als Folge von Transaktionsaktivität ausgelöst werden. Siehe dazu Entitäts-Webhooks.
Sandbox-Anwendungen senden keine transaction.created- oder transaction.status.updated-Webhooks. Um diese Ereignisse zu testen, verwenden Sie eine Live-Anwendung oder API & Webhooks → Try Webhook in der Konsole. Travel-Rule-Austauschvorgänge in der Sandbox senden travel_rule.status.updated-Webhooks mit environment: sandbox. Testen Sie einen Austausch vor dem Go-live mit dem Didit Test VASP.

Umschlag

Didit-Webhooks verwenden einen flachen Body: Die Ereignisfelder stehen auf oberster Ebene neben den Envelope-Feldern. Es gibt kein verschachteltes data-Objekt. Jede Zustellung enthält:

Payload-Strukturen

transaction.created und transaction.status.updated

Beide Ereignisse enthalten denselben Payload: eine kompakte Zusammenfassung plus den Block action_required (oder null):
Der Payload ist bewusst schlank. Rufen Sie nach dem Empfang den vollständigen Datensatz über GET /v3/transactions/{transaction_id}/ ab. Dieser Aufruf liefert alle Details (Parteien, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), einschließlich der Begründung, warum sich der Status geändert hat.

transaction_rule_suggestions.created

Dieses Ereignis betrifft Ihren Regelsatz und nicht eine einzelne Transaktion. Deshalb enthält es keine Transaktions-ID. Es enthält niemals personenbezogene Daten, nur Vorschlags-IDs, Arten, Titel und Anzahlen.
Die üblichen Envelope-Felder (event_id, timestamp, application_id, environment) werden dem Body hinzugefügt.

travel_rule.status.updated

Dieses Ereignis wird bei jedem Übergang ausgelöst, auch beim Übergang in FINISHED, CANCELLED oder EXPIRED. Sobald eine Überweisung einen dieser Zustände erreicht, werden keine weiteren Travel-Rule-Ereignisse mehr dafür gesendet. Ein Ereignis kann den Status des vorherigen wiederholen, etwa wenn ein erneuter Versuch wieder keine Schiene findet und die Überweisung in COUNTERPARTY_VASP_NOT_FOUND bleibt. rail ist INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (eine Sandbox-Überweisung, auf die der Didit Test VASP geantwortet hat; sie enthält außerdem test_vasp: true und test_vasp_scenario) oder "", solange keine Schiene ausgewählt ist (bei Sunrise-Registrierungen immer ""). Bei der Anlage einer Transaktion, einer Sunrise-Registrierung, einer eingehenden TRP-Anfrage oder dem eingehenden Teil über die INTERNAL-Schiene sendet Didit zuerst transaction.created und danach die travel_rule.status.updated-Ereignisse der Transaktion. Eine Regel, die in diesem Schritt den Status der Transaktion ändert, kann auch transaction.status.updated vor transaction.created senden. Eine Sunrise-Registrierung, die an eine bereits von Ihnen angelegte Einzahlungstransaktion angehängt wird, sendet kein transaction.created. Jeder Webhook wird einzeln zugestellt und einzeln wiederholt. Ein erneut zugestelltes Ereignis kann deshalb nach einem späteren Ereignis eintreffen. Verarbeiten Sie Ereignisse anhand von transaction_id und lesen Sie die Transaktion erneut aus, wenn Sie ihren aktuellen Stand benötigen.

Beispiele für Statusverläufe

Einfache Genehmigung

Prüfung, dann Genehmigung

Verifizierung mit erhöhter Sicherheitsstufe

Travel-Rule-Überweisung

Die ersten beiden Ereignisse stammen aus derselben Anfrage, und transaction.created wird zuerst in die Warteschlange gestellt. Jeder Webhook wird einzeln zugestellt. Verlassen Sie sich deshalb nicht auf die Ankunftsreihenfolge. Eine Überweisung über TRUST erhält nie ein COMPLETED-Ereignis, weil TRUST keine Antwort zurücksendet, die Didit auslesen kann. Sie verbleibt in AWAITING_COUNTERPARTY bis zur Bestätigungsfrist und endet dann in EXPIRED. Über GTR, VerifyVASP und Sygna Bridge liest Didit die Antwort der Gegenpartei aus dem Netzwerk aus, und das Ereignis folgt dieser Antwort.

Signaturprüfung

Jede Zustellung wird mit HMAC-SHA256 unter Verwendung des gemeinsamen Geheimnisses des Webhook-Ziels signiert. Sie enthält drei Signatur-Header und einen Zeitstempel:
Den vollständigen Verifizierungscode einschließlich der Prüfung der Aktualität des Zeitstempels finden Sie in der Webhooks-Referenz.

Wiederholungsversuche und Zustellungsgarantien

  • Bei einem 5xx, einer 404, einem Timeout oder einem Verbindungsfehler wiederholt Didit die Zustellung bis zu 2-mal: etwa 1 Minute nach dem ersten Fehler und danach noch einmal etwa 4 Minuten später.
  • Wiederholte Zustellungen verwenden dieselbe event_id. Filtern Sie Duplikate in Ihrem Handler anhand dieser ID heraus.
  • Nach dem letzten Fehlschlag wird die Zustellung für dieses Ereignis eingestellt, und Ihre Organisation wird benachrichtigt. Webhook-Ziele werden niemals stillschweigend deaktiviert.
  • Antworten Sie schnell mit einem 2xx (zuerst in die Warteschlange einreihen, dann verarbeiten). Langsame Bestätigungen bergen das Risiko von Timeouts und doppelten Zustellungen.

Idempotenz

Verarbeiten Sie jeden Webhook genau einmal, indem Sie die event_id in Ihrem eigenen Deduplizierungsspeicher ablegen. Eine erneute Zustellung desselben Ereignisses ist möglich, wenn Ihr Endpoint langsam bestätigt oder die Verbindung während der Anfrage abbricht.

Abonnieren

Nächste Schritte

Webhooks-Referenz

Webhook-Ziele, Signierung, Wiederholungsversuche.

Status

Vollständiger Zustandsautomat.

Integrationsleitfaden

Webhooks im Produktivbetrieb verarbeiten.
Zuletzt geändert am 7. November 2026