Langsung ke konten utama
Halaman ini mendokumentasikan payload lengkap yang dikembalikan oleh 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

Dua pengenal merujuk pada transaksi yang sama. 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. amount berupa string desimal tanpa angka nol di belakang ("1500", "0.5"), dengan maksimal 18 angka desimal.
  • currency_type: fiat atau crypto, sebagaimana dikirimkan di currency_kind; null jika tidak disertakan.
  • amount_in_default_currency / default_currency_code: jumlah yang sudah dikonversi sebelumnya dan Anda kirimkan pada permintaan, dikembalikan kembali; null jika Anda tidak mengirimkannya.
  • preferred_currency_amount / preferred_currency_code: amount yang dikonversi ke mata uang pilihan aplikasi Anda. null jika tidak ada kurs untuk currency dan Anda tidak mengirimkan amount_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 dengan APPROVED; aturan dapat mengubahnya secara sinkron.
  • score: skor risiko bilangan bulat yang terkumpul dari aturan. Semakin tinggi, semakin berisiko.
  • severity: UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL, atau null hingga sebuah aturan atau penyedia menetapkannya.
  • decision_reason_code / decision_reason_label: alasan terstruktur dan alasan yang mudah dibaca untuk status saat ini.
  • environment: live atau sandbox, berdasarkan aplikasi yang memiliki transaksi tersebut. Transaksi sandbox disimpan tetapi tidak pernah dievaluasi, sehingga rule_runs yang kosong berarti “belum dievaluasi”, bukan “tidak ada yang cocok”. Lihat Pemantauan Transaksi di sandbox.
  • source: LIVE untuk transaksi yang dikirim melalui API atau SDK, IMPORTED untuk transaksi yang dimuat melalui impor CSV di konsol.

Pihak

Setiap pihak dalam transaksi adalah entri di parties. 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: USER atau BUSINESS ketika pihak tersebut terhubung dengan pengguna atau bisnis Didit melalui vendor_data; EXTERNAL jika tidak.
  • country_code / dob: berasal dari address.country dan date_of_birth yang dikirimkan.
  • address / institution_info: objek sebagaimana dikirimkan; {} jika tidak disertakan.
  • external_party_snapshot: salinan data pihak yang dibekukan untuk pihak EXTERNAL; null selama 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 menetapkan SOURCE / DESTINATION berdasarkan direction: pada transaksi keluar, metode subjek adalah SOURCE dan metode pihak lawan adalah DESTINATION; untuk transaksi masuk, kebalikannya.
  • payment_method_type: bank_card, bank_account, e_wallet, crypto_wallet, unhosted_wallet, other.
  • fingerprint: SHA-256 atas type:account_id:issuing_country, stabil di antara transaksi sehingga Anda dapat mengorelasikan penggunaan ulang instrumen yang sama. null jika tidak ada account_id yang dikirimkan.
  • owner_kind / vendor_data / owner_name: siapa pemilik instrumen, dengan konvensi USER / BUSINESS / EXTERNAL yang sama seperti pada pihak.
  • details: objek payment_method mentah sebagaimana dikirimkan.

Eksekusi aturan

  • rule: UUID aturan yang dijalankan; rule_title, rule_description, rule_category disalin darinya.
  • matched: eksekusi hanya dicatat ketika kondisi aturan terpenuhi, sehingga evaluasi produksi selalu memiliki matched: true. Aturan yang dievaluasi tanpa kecocokan tidak meninggalkan entri. Data demo dapat menyertakan baris dengan matched: false.
  • is_test / mode: true dan TEST ketika aturan dijalankan dalam mode uji; eksekusi uji dicatat tetapi tidak memengaruhi status, score, atau severity.
  • score_delta / status_target / severity: kontribusi dari eksekusi ini. status_target diisi ketika tindakan change_status dijalankan, 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); null ketika aturan tidak menjalankan tindakan.
  • metadata: detail evaluasi: scope_match, serta conditions[] dan aggregations[]. Kedua daftar tersebut menggunakan kunci nilai yang berbeda:
    • conditions[]: satu entri untuk setiap kondisi dengan field, operator, expected_value, current_value yang dibaca dari transaksi, matched, group_index, dan group_logic. field_source selalu null pada eksekusi aturan transaksi; kolom ini hanya diklasifikasikan untuk peristiwa pemantauan.
    • aggregations[]: satu entri untuk setiap agregasi frekuensi / jumlah / total dengan metric, field, operator, expected_value, computed_value hasil evaluasi agregat, window, filters, matched, dan sample_references. Agregasi yang hanya dapat dihitung secara asinkron memiliki computed_value: null dan deferred: 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.
Catatan analis muncul di sini sebagai entri 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.
Setiap item 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_snapshot yang 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:
Halaman detail transaksi di konsol menampilkan grafik yang sama.

Tag, metadata, props

  • tags[]: tag yang dilampirkan (melalui tindakan aturan atau oleh analis): { "uuid", "name", "color", "description", "source" }, dengan source bernilai didit untuk tag preset dan custom untuk tag buatan Anda.
  • metadata: salinan payload subject dan counterparty persis seperti yang Anda kirim saat pembuatan, di bawah kedua kunci tersebut.
  • props: custom_properties yang Anda berikan saat pembuatan. Setiap kunci dapat dirujuk dalam kondisi aturan sebagai custom_values.<key>.

Remediasi

Saat sebuah aturan memicu AWAITING_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, atau null jika tidak ada yang tertunda: { "type": "verification_session", "url", "session_id", "session_token", "status" }. Arahkan pengguna ke url, atau berikan session_token ke 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 memuat reason dan next_actions (lihat penemuan pihak lawan).
Kedua kolom yang sama ikut dalam payload webhook 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.
Terakhir diubah pada 7 November 2026