Katalog event
Event tingkat entitas (
user.status.updated, business.status.updated) juga bisa dipicu sebagai akibat dari aktivitas transaksi - lihat webhook entitas.
Aplikasi sandbox tidak mengirim webhook
transaction.created atau transaction.status.updated. Untuk menguji event tersebut, gunakan aplikasi live atau API & Webhooks → Try Webhook di konsol. Pertukaran Travel Rule di sandbox mengirim webhook travel_rule.status.updated dengan environment: sandbox; gunakan Didit Test VASP untuk menguji pertukaran sebelum beralih ke produksi.Struktur envelope
Body webhook Didit bersifat datar: kolom event berada di level teratas bersama kolom envelope, dan tidak ada objekdata bertingkat.
Setiap pengiriman memuat:
Bentuk payload
transaction.created dan transaction.status.updated
Kedua event ini memakai satu payload yang sama - ringkasan singkat ditambah blok action_required (atau null):
GET /v3/transactions/{transaction_id}/. Endpoint ini mengembalikan detail lengkap (pihak terkait, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), termasuk alasan perubahan status.
transaction_rule_suggestions.created
Event ini berkaitan dengan kumpulan aturan Anda, bukan satu transaksi, sehingga tidak memuat ID transaksi.
Event ini tidak pernah berisi data pribadi: hanya ID saran, jenis, judul, dan jumlah.
Kolom envelope yang biasa (
event_id, timestamp, application_id, environment) ditambahkan ke body.
travel_rule.status.updated
FINISHED, CANCELLED, atau EXPIRED; setelah transfer mencapai salah satu status tersebut, tidak ada event travel rule lagi yang dikirim untuknya.
Sebuah event dapat mengulang status sebelumnya, misalnya ketika pengiriman ulang tidak menemukan rail dan transfer tetap berada di COUNTERPARTY_VASP_NOT_FOUND.
rail bernilai INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (transfer sandbox yang dijawab oleh Didit Test VASP, yang juga memuat test_vasp: true dan test_vasp_scenario), atau "" selama belum ada rail yang dipilih (selalu "" pada pendaftaran sunrise).
Saat transaksi dibuat, untuk pendaftaran sunrise, permintaan TRP masuk, atau leg masuk rail INTERNAL, Didit mengirim transaction.created terlebih dahulu, lalu event travel_rule.status.updated untuk transaksi tersebut setelahnya.
Aturan yang mengubah status transaksi pada langkah itu juga dapat mengirim transaction.status.updated sebelum transaction.created.
Pendaftaran sunrise yang terhubung ke transaksi deposit yang sudah Anda buat tidak mengirim transaction.created.
Setiap webhook dikirim dan dicoba ulang secara terpisah, sehingga event yang dicoba ulang bisa tiba setelah event yang lebih baru: gunakan transaction_id sebagai kunci handler Anda, dan ambil kembali data transaksi ketika Anda memerlukan status terkini.
Contoh alur status
Persetujuan sederhana
Tinjau lalu setujui
Verifikasi tambahan
Transfer Travel Rule
transaction.created masuk antrean lebih dulu; setiap webhook dikirim secara terpisah, jadi jangan mengandalkan urutan kedatangan.
Transfer yang dikirim melalui TRUST tidak pernah menerima event COMPLETED, karena TRUST tidak mengirim balasan yang bisa dibaca Didit: transfer tetap di AWAITING_COUNTERPARTY hingga batas waktu konfirmasi, lalu berakhir di EXPIRED. Melalui GTR, VerifyVASP, dan Sygna Bridge, Didit membaca jawaban pihak lawan dari jaringan, dan event mengikuti jawaban tersebut.
Verifikasi tanda tangan
Setiap pengiriman ditandatangani dengan HMAC-SHA256 menggunakan rahasia bersama tujuan webhook dan membawa tiga header tanda tangan serta satu timestamp:Coba lagi dan jaminan pengiriman
- Saat
5xx,404, timeout, atau kegagalan koneksi, Didit mencoba lagi hingga 2 kali: sekitar 1 menit setelah kegagalan awal, lalu sekitar 4 menit lagi setelahnya. - Pengiriman ulang memakai
event_idyang sama - lakukan deduplikasi berdasarkan ID tersebut di handler Anda. - Setelah kegagalan terakhir, pengiriman untuk event tersebut dihentikan dan organisasi Anda diberi tahu; tujuan webhook tidak pernah dinonaktifkan secara diam-diam.
- Kembalikan
2xxdengan cepat (masukkan ke antrean, lalu proses) - ACK yang lambat berisiko menyebabkan timeout dan pengiriman duplikat.
Idempotensi
Proses setiap webhook tepat satu kali dengan menyimpanevent_id di penyimpanan deduplikasi Anda sendiri. Pengiriman ulang event yang sama dapat terjadi jika endpoint Anda mengirim ACK secara lambat atau koneksi terputus di tengah permintaan.
Berlangganan
Langkah selanjutnya
Referensi webhook
Tujuan, penandatanganan, coba lagi.
Status
Mesin status lengkap.
Panduan integrasi
Menangani webhook di produksi.