POST /v3/transactions/ dan GET /v3/transactions/{transaction_id}/. Kedua endpoint mengembalikan objek TransactionDetail yang sama. Referensi API memuat skema per kolom, sedangkan halaman ini menjelaskannya secara berurutan.
Struktur tingkat atas
uuid adalah pengenal stabil milik Didit dan merupakan nilai yang diharapkan GET /v3/transactions/{transaction_id}/ pada path-nya. txn_id adalah transaction_id yang Anda berikan saat membuat transaksi. transaction_number adalah nomor berurutan dalam lingkup aplikasi yang ditampilkan di konsol.
Subjek dan pihak lawan yang Anda kirimkan tidak dikembalikan sebagai kunci tingkat atas. Keduanya merupakan entri dalam array parties dan dibedakan melalui role. Sementara itu, vendor_data di tingkat atas adalah salinan yang disediakan demi kemudahan dari vendor_data milik pemohon.
Kolom utama
Kolom keuangan
amount/currency: jumlah transaksi sebagaimana dikirimkan.amountberupa string desimal tanpa angka nol di belakang ("1500","0.5"), dengan maksimal 18 angka desimal.currency_type:fiatataucrypto, sebagaimana dikirimkan dicurrency_kind;nulljika tidak disertakan.amount_in_default_currency/default_currency_code: jumlah yang sudah dikonversi sebelumnya dan Anda kirimkan pada permintaan, dikembalikan kembali;nulljika Anda tidak mengirimkannya.preferred_currency_amount/preferred_currency_code:amountyang dikonversi ke mata uang pilihan aplikasi Anda.nulljika tidak ada kurs untukcurrencydan Anda tidak mengirimkanamount_in_default_currency.payment_details/payment_txn_id: referensi pembayaran berupa teks bebas dan referensi pembayaran eksternal (misalnya hash transaksi blockchain) dari permintaan.
Kolom status
status:APPROVED,IN_REVIEW,DECLINED,AWAITING_USER. Transaksi dibuat denganAPPROVED; aturan dapat mengubahnya secara sinkron.score: skor risiko bilangan bulat yang terkumpul dari aturan. Semakin tinggi, semakin berisiko.severity:UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL, ataunullhingga sebuah aturan atau penyedia menetapkannya.decision_reason_code/decision_reason_label: alasan terstruktur dan alasan yang mudah dibaca untuk status saat ini.environment:liveatausandbox, berdasarkan aplikasi yang memiliki transaksi tersebut. Transaksisandboxdisimpan tetapi tidak pernah dievaluasi, sehinggarule_runsyang kosong berarti “belum dievaluasi”, bukan “tidak ada yang cocok”. Lihat Pemantauan Transaksi di sandbox.source:LIVEuntuk transaksi yang dikirim melalui API atau SDK,IMPORTEDuntuk transaksi yang dimuat melalui impor CSV di konsol.
Pihak
Setiap pihak dalam transaksi adalah entri diparties. Endpoint pembuatan mencatat subjek sebagai APPLICANT dan pihak lawan opsional sebagai COUNTERPARTY; enum role juga mencakup REMITTER dan BENEFICIARY. Semua entri memiliki bentuk yang sama.
role:APPLICANT,COUNTERPARTY,REMITTER,BENEFICIARY. Gunakan filter pada kolom ini untuk menemukan subjek.entity_type:individual,company,external,unhostedWallet, sebagaimana dikirimkan.kind:USERatauBUSINESSketika pihak tersebut terhubung dengan pengguna atau bisnis Didit melaluivendor_data;EXTERNALjika tidak.country_code/dob: berasal dariaddress.countrydandate_of_birthyang dikirimkan.address/institution_info: objek sebagaimana dikirimkan;{}jika tidak disertakan.external_party_snapshot: salinan data pihak yang dibekukan untuk pihakEXTERNAL;nullselama pihak tersebut terhubung dengan pengguna atau bisnis Didit.
device
device adalah device_context yang Anda kirimkan untuk pihak tersebut, dinormalisasi ke snake_case, ditambah pengayaan IP di sisi server. Nilainya {} jika permintaan tidak menyertakan konteks perangkat, jadi anggap setiap kunci bersifat opsional.
Tidak ada objek pengayaan terpisah. Ketika pihak menyertakan
network_context.ip_address publik, Didit menyelesaikannya secara inline dan menuliskan kolom hasil pengayaan ke dalam objek network_context yang sama, dengan hanya mengisi kunci yang tidak Anda kirimkan. Kunci yang dikembalikan kosong oleh resolver dihilangkan, sehingga network_context yang diperkaya sepenuhnya berisi empat kunci yang dikirimkan (ip_address, ip_country_code, latitude, longitude) ditambah kunci ip_country, ip_state, ip_city, isp, organization, is_vpn_or_tor, is_data_center, time_zone, time_zone_offset, asn_number, asn_organization, connection_type, carrier, dan proxy_type yang berhasil diselesaikan. is_vpn_or_tor dan is_data_center selalu ada setelah resolusi berhasil.
Pengayaan dilewati, dan network_context dikembalikan persis seperti yang dikirimkan, ketika IP tidak ada atau tidak dapat dirutekan, ketika aplikasi berada di sandbox, atau ketika resolusi gagal. ip_country_code berupa kode ISO 3166-1 alpha-2 ketika Didit berhasil menyelesaikannya, dan sebaliknya berupa nilai yang Anda kirimkan; kondisi aturan menormalisasi kedua bentuk tersebut sebelum membandingkannya.
Metode pembayaran
role:SOURCE,DESTINATION,FUNDING,BENEFICIARY. Endpoint create menetapkanSOURCE/DESTINATIONberdasarkandirection: pada transaksi keluar, metode subjek adalahSOURCEdan metode pihak lawan adalahDESTINATION; untuk transaksi masuk, kebalikannya.payment_method_type:bank_card,bank_account,e_wallet,crypto_wallet,unhosted_wallet,other.fingerprint: SHA-256 atastype:account_id:issuing_country, stabil di antara transaksi sehingga Anda dapat mengorelasikan penggunaan ulang instrumen yang sama.nulljika tidak adaaccount_idyang dikirimkan.owner_kind/vendor_data/owner_name: siapa pemilik instrumen, dengan konvensiUSER/BUSINESS/EXTERNALyang sama seperti pada pihak.details: objekpayment_methodmentah sebagaimana dikirimkan.
Eksekusi aturan
rule: UUID aturan yang dijalankan;rule_title,rule_description,rule_categorydisalin darinya.matched: eksekusi hanya dicatat ketika kondisi aturan terpenuhi, sehingga evaluasi produksi selalu memilikimatched: true. Aturan yang dievaluasi tanpa kecocokan tidak meninggalkan entri. Data demo dapat menyertakan baris denganmatched: false.is_test/mode:truedanTESTketika aturan dijalankan dalam mode uji; eksekusi uji dicatat tetapi tidak memengaruhistatus,score, atauseverity.score_delta/status_target/severity: kontribusi dari eksekusi ini.status_targetdiisi ketika tindakanchange_statusdijalankan, atau ketika skor yang ditambahkan melewati ambang batas.action_summary: ringkasan teks dari tindakan yang dijalankan aturan, digabungkan dengan;(score +30,change_status:IN_REVIEW,add_tag:<name>,add_note,add_to_list,open_case);nullketika aturan tidak menjalankan tindakan.metadata: detail evaluasi:scope_match, sertaconditions[]danaggregations[]. Kedua daftar tersebut menggunakan kunci nilai yang berbeda:conditions[]: satu entri untuk setiap kondisi denganfield,operator,expected_value,current_valueyang dibaca dari transaksi,matched,group_index, dangroup_logic.field_sourceselalunullpada eksekusi aturan transaksi; kolom ini hanya diklasifikasikan untuk peristiwa pemantauan.aggregations[]: satu entri untuk setiap agregasi frekuensi / jumlah / total denganmetric,field,operator,expected_value,computed_valuehasil evaluasi agregat,window,filters,matched, dansample_references. Agregasi yang hanya dapat dihitung secara asinkron memilikicomputed_value: nulldandeferred: true.
Alert
alerts selalu berupa array kosong saat ini.
Alert yang terbuka berarti transaksi sedang ditahan, jadi baca status (IN_REVIEW atau AWAITING_USER) sebagai gantinya. Lihat Alert.
Aktivitas
Log aktivitas transaksi: pembuatan, catatan, peninjauan manual, dan perubahan status.TRANSACTION_NOTE_ADDED; tidak ada array notes terpisah.
Dokumen
File yang dilampirkan ke transaksi dari konsol.[] jika tidak ada.
file_url adalah URL bertanda tangan dengan masa berlaku singkat; ambil saat Anda membutuhkannya, dan jangan menyimpannya.
Hasil penyedia
Keluaran dari penyedia eksternal (skrining hash transaksi kripto, skrining dompet, pemantauan fiat, skrining sanksi).result_type: FIAT_MONITORING, WALLET_SCREENING, TRANSACTION_SCREENING, TRAVEL_RULE, NETWORK_GRAPH, CUSTOM.
payload.risk_factors adalah penjelasan berperingkat dari score: apa yang menghasilkan vonis, dengan pendorong risiko tinggi di urutan pertama, lalu diurutkan berdasarkan nilai yang dipindahkan. score yang tinggi tanpa entri is_high_risk berarti penyedia menilai entitas tersebut berdasarkan model paparan miliknya sendiri tanpa melaporkan kecocokan dengan sanksi atau entitas yang teridentifikasi; summary menyatakannya secara eksplisit. Referensi per kolom: Faktor risiko. Hasil yang diskrining sebelum kolom ini ada tidak menyertakan kunci tersebut.
Untuk skrining hash transaksi kripto, transaction_flows terisi saat pengayaan on-chain tersedia. Kolom ini menormalkan aktivitas rantai sehingga konsol dapat menampilkan ikhtisar transaksi dan grafik visualisasi dari payload respons yang sama.
Sumber pengayaan yang didukung:
- Rantai EVM menggunakan Blockscout untuk menormalkan transaksi utama, panggilan internal, dan transfer token.
- Bitcoin menggunakan mempool.space untuk menormalkan input dan output transaksi.
- Solana menggunakan Helius untuk menormalkan transfer SOL native, transfer token SPL, dan konteks event NFT yang tersedia.
transaction_flows[] menyertakan kolom ternormalisasi yang stabil (flow_type, from_address, to_address, amount, amount_usd, currency, token_name, token_address, transaction_hash, block_timestamp, index, success) beserta metadata khusus penyedia.
Contoh metadata yang umum:
metadata bersifat tambahan dan khusus penyedia. Jangan membangun integrasi kritis yang mensyaratkan setiap kunci selalu ada untuk setiap rantai.
Travel Rule
null jika transaksi tidak memiliki transfer atau pemeriksaan Travel Rule. Kolom ini terisi saat Anda mengirimkan travel_rule_details, dan juga saat Travel Rule diaktifkan untuk aplikasi dan transaksi dibuat dengan transaction_category: "travelRule": Didit kemudian memulai pertukaran data sendiri, dengan atau tanpa travel_rule_details, dan melaporkan status-nya di sini. Baca kolom ini, bukan permintaan yang Anda kirim.
Pada transfer masuk, originator_data dan beneficiary_data milik pihak lawan tetap disamarkan (data_masked: true) hingga kepemilikan dompet dikonfirmasi (lihat Data pihak lawan yang disamarkan).
direction, rail, counterparty_vasp, delivery, discovery, reason, dan next_actions memiliki bentuk yang sama seperti pada endpoint transfer.
reason dan next_actions menjelaskan mengapa transfer dengan status COUNTERPARTY_VASP_NOT_FOUND atau COUNTERPARTY_VASP_NOT_REACHABLE tertahan dan tindakan apa yang dapat melanjutkan transfer tersebut, dan bernilai "" serta [] untuk status lainnya: lihat Mengapa transfer tertahan.
Setiap baris dari GET /v3/transactions/ memuat blok yang sama.
Lihat Travel Rule.
Snapshot jaringan
Grafik yang tersimpan itu sendiri, bukan referensi ke grafik tersebut. Grafik berasal dari salah satu sumber berikut:network_snapshotyang Anda kirim bersama transaksi, atau- grafik yang dibangun Didit ketika skrining dompet AML berhasil untuk transaksi kripto, meskipun permintaan tidak menyertakan
network_snapshot. Grafik hasil skrining menggantikan grafik yang dikirim, dan skrining ulang asinkron akan menyegarkannya.
null jika keduanya tidak ada:
Tag, metadata, props
tags[]: tag yang dilampirkan (melalui tindakan aturan atau oleh analis):{ "uuid", "name", "color", "description", "source" }, dengansourcebernilaididituntuk tag preset dancustomuntuk tag buatan Anda.metadata: salinan payloadsubjectdancounterpartypersis seperti yang Anda kirim saat pembuatan, di bawah kedua kunci tersebut.props:custom_propertiesyang Anda berikan saat pembuatan. Setiap kunci dapat dirujuk dalam kondisi aturan sebagaicustom_values.<key>.
Remediasi
Saat sebuah aturan memicuAWAITING_USER, Didit membuat sesi verifikasi yang tertaut dan mengembalikannya dalam dua kolom:
remediation: sesi yang tertaut:{ "session_id", "session_token", "url", "status" }. Kolom ini tetap terisi selama masa transaksi, sehingga Anda selalu dapat melihat hasil akhir tindakan pengguna.action_required: tindakan yang harus dilakukan pengguna saat ini, ataunulljika tidak ada yang tertunda:{ "type": "verification_session", "url", "session_id", "session_token", "status" }. Arahkan pengguna keurl, atau berikansession_tokenke SDK Didit. Tindakan kepemilikan dompet Travel Rule menggunakan{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }dan didahulukan jika keduanya dapat berlaku. Ketika tindakan kepemilikan dompet tertunda dan pihak lawan transfer tidak dapat ditemukan, blok yang sama juga memuatreasondannext_actions(lihat penemuan pihak lawan).
transaction.created dan transaction.status.updated (action_required); lihat webhook.
Rincian biaya
null sampai fitur yang dikenai biaya dijalankan untuk transaksi. Selain itu berupa { "total_price", "items": [ { "usage_type", "price", "details" } ] }, dengan satu item untuk setiap fitur yang dikenai biaya berdasarkan penggunaan (skrining, pengayaan, dan sebagainya).
Konversi mata uang
preferred_currency_amount adalah amount yang dikonversi ke mata uang pilihan aplikasi Anda menggunakan kurs tengah pasar, kecuali Anda mengirimkan amount_in_default_currency, dalam hal ini nilai yang sudah dikonversi sebelumnya digunakan apa adanya. Kondisi aturan pada amount membandingkan nominal asli. Gunakan preferred_currency_amount dalam kondisi jika Anda memerlukan satu ambang batas untuk semua mata uang.
Langkah selanjutnya
Kirim transaksi
Skema permintaan lengkap.
Status
Arti setiap status.
Penilaian risiko
Cara skor risiko dihitung.