Fehler wegen doppelter txn_id
Symptom. Beim Absenden einer Transaktion gibt die Anfrage 400 mit A transaction with this transaction_id already exists. im Feld transaction_id zurück, oder 409, wenn zwei identische Anfragen gleichzeitig eintreffen.
Ursache. txn_id (die transaction_id, die Sie senden) ist pro Anwendung eindeutig.
Didit lehnt eine zweite Transaktion mit derselben transaction_id ab und gibt den vorhandenen Datensatz nicht zurück.
Behebung.
- Erzeugen Sie
txn_idauf Ihrer Seite deterministisch (z. B. mit der ID aus Ihrer eigenen Transaktionsdatenbank). - Suchen Sie bei einem
400oder409wegen einer doppeltentransaction_idwährend eines Wiederholungsversuchs die bestehende Transaktion nach, statt sie erneut zu senden. Lesen Sie sie mitGET /v3/transactions/{uuid}/unter Verwendung deruuidaus der ersten Antwort, oder verwenden Sie dietransaction_id(die Didit-UUID), die der Webhooktransaction.createdneben Ihrertxn_idmitliefert. - Handelte es sich nicht um einen Wiederholungsversuch, geben Sie der neuen Transaktion eine eigene
transaction_id.
Regel wird nicht ausgelöst
Symptom. Sie haben eine Regel erstellt, die greifen sollte, aber bei keiner Transaktion erscheint sie inrule_runs[] mit matched: true.
Ursachen und Behebungen.
- Die Anwendung befindet sich im Sandbox-Modus – In einer Sandbox-Anwendung werden keine Regeln ausgewertet, kein AML-Screening durchgeführt, keine Abrechnung erstellt und keine Webhooks
transaction.createdundtransaction.status.updatedgesendet. Travel-Rule-Austausche laufen bei aktivierter Option weiterhin, und zwar gegen den Didit Test VASP. Sie liefern Webhookstravel_rule.status.updatedmitenvironment: sandbox.rule_runsist leer und der Score bleibt0, unabhängig vom Modus Ihrer Regeln. Die Transaktion bleibtAPPROVED, es sei denn, ein ablaufender Travel-Rule-Transfer wendet Ihrtimeout_outcomean. Prüfen Sieenvironmentin der Transaktionsantwort:"sandbox"bedeutet, dass sie nie ausgewertet wurde. Unter Transaction Monitoring in der Sandbox erfahren Sie, wie Sie eine Regel validieren, bevor sie live geht. - Der Regelmodus ist
DISABLEDoderTEST– Prüfen Sie Rules → [rule] → Mode. NurACTIVE-Regeln fließen in die Bewertung ein.TEST-Regeln werten aus, beeinflussen den Status aber nicht. - Der Geltungsbereichsfilter schließt die Transaktion aus – Der auf
transaction_type = financegesetzte Geltungsbereich passt z. B. nicht auftravelRule-Transaktionen. - Das Aggregationsfenster ist kürzer als nötig – Eine Regel „20 Transaktionen in 30 Tagen“ greift nicht, wenn erst 15 Transaktionen vorliegen.
- Das Bedingungsfeld ist null – Ihre Regel prüft z. B.
counterparty.country_code, Sie haben aber keine Gegenpartei übermittelt. - Währungsumrechnung – Die Regel vergleicht Schwellenwerte mit
amount_in_default_currency. Weicht die Standardwährung Ihrer Anwendung von der Transaktionswährung ab, kann der umgerechnete Betrag unter dem Schwellenwert liegen.
Regel wird bei allen Transaktionen ausgelöst
Symptom. Eine Regel wird bei 90%+ der Transaktionen ausgelöst, und Ihre Prüfwarteschlange ist überflutet. Ursache. Die Bedingungen sind zu breit gefasst oder die Schwellenwerte zu niedrig. Behebung.- Fügen Sie
scope-Filter hinzu, um die Anwendbarkeit einzugrenzen (z. B. nur ausgehende Transaktionen oder nur bestimmte Transaktionstypen). - Erhöhen Sie die Schwellenwerte (Beträge, Anzahl der Transaktionen innerhalb eines Zeitraums).
- Setzen Sie die Regel eine Woche lang in den Modus
TEST. Werten Sie dierule_runsaus, um die Trefferquote zu sehen, und schärfen Sie die Bedingungen, bevor Sie die Regel wieder aktivieren.
Krypto-Screening mit Zeitüberschreitung
Symptom. Die Transaktion wurde mitstatus: APPROVED abgeschlossen, aber das Array provider_results[] zeigt status: FAILED für eine Wallet, einen Transaktionshash oder einen Anbieter für das Krypto-Screening.
Ursachen.
- Die API des Anbieters war kurzzeitig nicht verfügbar.
- Die Abfrage lief in eine Zeitüberschreitung (typischerweise ~10s).
- Transaktionen schlagen nie wegen Problemen beim Anbieter fehl, denn die Anreicherung erfolgt nach bestem Bemühen.
- Wenn ein bestimmter Anbieter wiederholt ausfällt, prüfen Sie dessen Statusseite oder eröffnen Sie ein Support-Ticket.
- Erwägen Sie, unter Settings → Transaction Monitoring → Providers Anbieterpräferenzen zu konfigurieren, damit Abfragen an alternative Anbieter geleitet werden.
Fehlende IP-Anreicherung
Symptom. Das Feldapplicant.ip_enrichment einer Transaktion fehlt oder ist unvollständig.
Ursachen.
- Die Übermittlung enthält keine
applicant.device.ip. - Die Adresse ist privat oder reserviert (nicht routingfähig).
- Alle Anreicherungsanbieter waren vorübergehend nicht verfügbar.
- Erfassen Sie die Adresse des Absenders in Ihrem Client bzw. Server und übergeben Sie sie bei jeder Transaktion.
- Verwenden Sie nur routingfähige Adressen, denn Didit überspringt private Bereiche stillschweigend.
- Prüfen Sie den Anbieterstatus in der Konsole unter Settings → Status.
Webhook-Signatur stimmt nicht überein
Symptom. Ihr Endpoint weist Ereignisse ab, weil die Signatur nicht übereinstimmt. Ursachen.- Der rohe Anfrage-Body wurde verändert (JSON mit anderen Leerzeichen neu serialisiert).
- Falsches Geheimnis.
- Mehrere Ziele mit derselben URL. Die Signaturen unterscheiden sich pro Ziel.
- Berechnen Sie die Signatur über den rohen Anfrage-Body, nicht über das geparste JSON. Viele Frameworks bieten dafür eine Raw-Body-Middleware.
- Rotieren Sie das Geheimnis, falls es kompromittiert wurde: Webhook destinations → [destination] → Rotate secret.
- Verwenden Sie pro URL nur ein Ziel, um Verwechslungen beim Geheimnis zu vermeiden.
Webhook kommt nicht an
Symptom. Transaktionen werden erstellt, aber Webhooks kommen nie an. Ursachen.enableddes Ziels istfalse.- Die URL ist nicht öffentlich erreichbar.
- Das Ziel wurde nach wiederholten Fehlern automatisch deaktiviert.
- Das Ereignis ist nicht in
subscribed_eventsenthalten.
- Senden Sie ein Testereignis: Webhook destinations → [destination] → Send test.
- Prüfen Sie die letzten Zustellungen: Webhooks → [destination] → Deliveries. Dort sehen Sie 4xx- und 5xx-Antworten mit Body und Headern.
- Aktivieren Sie deaktivierte Ziele wieder.
Währungsumrechnung scheint falsch
Symptom.amount_in_default_currency stimmt nicht mit Ihrem erwarteten Kurs überein.
Ursachen.
- Der FX-Kurs ist der Mittelkurs zum
txn_date. - Rückdatierte Transaktionen verwenden den historischen Kurs zu diesem Datum.
- Manche Währungen (exotische Devisen) werden in größeren Abständen aktualisiert.
- Verwenden Sie
amountundcurrency(die Originalwährung) für die Anzeige. - Verwenden Sie
amount_in_default_currencynur für interne Schwellenwertprüfungen von Regeln. - Für Audit-Zwecke hält der Transaktionsdatensatz den bei der Auswertung verwendeten Umrechnungskurs fest.
Gegenpartei stimmt nicht mit meiner Sperrliste überein
Symptom. Sie haben ein Unternehmen übervendor_data auf die Sperrliste gesetzt, trotzdem wurde eine Transaktion mit dieser Gegenpartei durchgeführt.
Ursachen.
- Die Gegenpartei im Transaktions-Payload hat kein
vendor_data: Sie wird als externer Snapshot gespeichert. - Die Schreibweise von
vendor_dataweicht ab.
- Übergeben Sie
counterparty.vendor_dataimmer, wenn es sich bei der Gegenpartei um eine Entität auf Ihrer Plattform handelt. - Verwenden Sie überall dieselbe Schreibweise:
vendor_dataunterscheidet Groß- und Kleinschreibung.
AWAITING_USER-Transaktionen hängen fest
Symptom. Transaktionen bleiben im StatusAWAITING_USER hängen, weil der Benutzer die Remediation-Sitzung nie abschließt.
Ursachen.
- Der Benutzer hat die URL der Remediation-Sitzung nicht geöffnet.
- Die Remediation-Sitzung ist abgelaufen.
- Bei der Transaktion handelt es sich um einen Travel-Rule-Transfer, den eine Bibliotheksregel wie
travel-rule-pending-actioninAWAITING_USERüberführt hat. Didit erstellt für eine Travel-Rule-Transaktion keine Standard-Remediation-Sitzung. Solange die Regel keinen eigenen Remediation-Workflow nennt, gibt es daher keinen Link zur Zustellung.
- Der Link zur Zustellung ist
remediation_session_urlaus der Antwort der Transaktion. Stellen Sie ihn dem Benutzer erneut zu. - Lösen Sie bei einer Travel-Rule-Transaktion den Transfer im Reiter Travel Rule auf und ändern Sie danach selbst den Transaktionsstatus. Das Auflösen des Transfers führt die Transaktion nicht automatisch aus
AWAITING_USERheraus. - Remediation-Sitzungen folgen demselben Muster wie im KYC-Schnellstart: Abonnieren Sie die Webhooks für den Abschluss.
- Legen Sie in Ihrem eigenen System ein Timeout fest, damit veraltete Transaktionen ablaufen, wenn die Remediation nie abgeschlossen wird.
Rate-Limit beim Erstellen
Symptom.429 Too Many Requests bei Lastspitzen mit hohem Volumen.
Lösung.
- Beachten Sie den Header
Retry-After. - Drosseln Sie den Datenverkehr auf Client-Seite bei Lastspitzen.
- Wenden Sie sich an den Support, wenn Sie bei nachweislich hohem Produktionsvolumen höhere Limits benötigen.
Nächste Schritte
Integrationsleitfaden
Vollständige Integrationsmuster.
Regeln
So funktioniert die Regelauswertung.
Webhooks
Funktionsweise von Webhooks.