> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Skrining Dompet Kripto dan Alamat API (KYT)

> Didit menyaring alamat dompet kripto dan hash transaksi di setiap transfer untuk risiko AML: skor risiko, paparan, dan sanksi. Mulai $0.15 per cek.

Skrining dompet kripto Didit, yang juga disebut skrining alamat atau KYT (kenali transaksi Anda), memeriksa alamat dompet dan hash transaksi dari setiap transfer kripto untuk risiko AML. Hasilnya berupa skor risiko, paparan terhadap sumber berisiko, dan kecocokan dengan sanksi apa pun.

Untuk transaksi kripto, Didit dapat menyaring alamat dompet dan hash transaksi terhadap penyedia analitik blockchain seperti Merkle Science, Crystal, Chainalysis, Elliptic, dan TRM Labs selama pembuatan transaksi. Skrining berjalan di sisi server, sehingga Anda tidak perlu melakukan panggilan API tambahan.

> [!TIP]
>
> Perlu menyaring alamat **tanpa** transaksi? Gunakan endpoint [skrining dompet sesuai permintaan](https://docs.didit.me/id/transaction-monitoring/wallet-screening.md) (`POST /v3/wallet-screening/`) untuk mendapatkan hasil risiko yang sama untuk satu dompet dengan satu panggilan API.

## Kapan skrining dipicu

Skrining kripto berjalan otomatis ketika kedua kondisi berikut terpenuhi:

1. Transaksi memiliki `currency_kind: "crypto"` dalam detail transaksinya
2. Pemantauan transaksi diaktifkan di [pengaturan aplikasi](https://docs.didit.me/id/transaction-monitoring/settings.md) Anda

Anda dapat mengganti default ini per transaksi dengan `include_crypto_screening` dalam payload pembuatan transaksi:

| Nilai | Perilaku |
| - | - |
| `true` | Jalankan skrining kripto meskipun default tingkat aplikasi dinonaktifkan |
| `false` | Lewati skrining kripto meskipun default tingkat aplikasi diaktifkan |
| dihilangkan atau `null` | Gunakan default tingkat aplikasi yang dikonfigurasi di Console |

> [!TIP]
>
> Default tingkat aplikasi terdapat di **Transaksi** > **Pengaturan** di Business Console. `include_crypto_screening` hanya mengganti default tersebut untuk satu transaksi yang sedang Anda buat.

## Pemilihan aset dan jaringan

Aset dan jaringan adalah kolom yang terpisah.
Atur `transaction_details.currency` ke simbol token, `transaction_details.currency_kind` ke `crypto`, dan `transaction_details.crypto_params.crypto_chain` ke jaringan.
Misalnya, fragmen ini mencatat token kustom di Base:

```json theme={null}
{
  "transaction_details": {
    "currency": "TOKEN",
    "currency_kind": "crypto",
    "crypto_params": {"crypto_chain": "BASE"}
  }
}
```

Skrining terkelola menerima `BTC`, `ETH`, `LTC`, `XRP`, `BCH`, `DOGE`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM` dan `HBAR`.
`BASE` berarti Base, `OP` berarti Optimism, `ARB` berarti Arbitrum One, `AVAX` berarti Avalanche C-Chain, `ADA` berarti Cardano, `XLM` berarti Stellar, dan `HBAR` berarti Hedera.
Nama jaringan umum juga diterima, misalnya `POLYGON` atau `POL` untuk `MATIC`, `BSC` untuk `BNB`, dan `TRON` untuk `TRX`.
Celo, Mode, dan Plume tidak tercakup oleh integrasi terkelola. Ketiganya diskrining melalui akun TRM Labs yang terhubung (`CELO`, `MODE`, `PLUME`).
Penyedia yang terhubung memiliki cakupan masing-masing. Lightning memiliki persyaratan tambahan yang dijelaskan di bawah.

Selalu tentukan `crypto_chain` untuk token, termasuk USDT dan USDC.
Tanpa itu, mata uang digunakan sebagai jaringan, dan USDT serta USDC mengambil jaringannya dari hash transaksi atau, tanpa hash, dari alamat dompet.
Hash dari Tron atau Solana menentukan jaringan Tron atau Solana.
Hash `0x` terlihat sama di setiap jaringan EVM, sehingga untuk USDT, USDC, dan ETH, Didit mencarinya di Ethereum, BNB Chain, Polygon, Base, Arbitrum, dan Optimism, lalu menyaring transaksi di jaringan tempat hash itu ditemukan.
ETH disertakan karena ETH adalah aset native di Ethereum, Base, Arbitrum, dan Optimism, dan juga ditransfer di BNB Chain sebagai token BEP-20 yang dijembatani.
Jika tidak ada jaringan yang memiliki hash tersebut, atau jaringan tidak dapat diperiksa pada saat itu, transaksi tidak diskrining dan skrining tidak dikenai biaya.
`custom_values.aml_screening_status` kemudian bernilai `FAILED`, `custom_values.aml_screening_error` menjelaskan penyebabnya, dan transaksi yang disetujui berpindah ke peninjauan.

Transaksi USDT atau USDC tanpa hash menyaring dompet, dan alamat dompet menentukan jaringannya.
Alamat Tron diskrining di Tron, dan alamat Solana diskrining di Solana.
Alamat `0x` diskrining di jaringan pertama dari Ethereum, BNB Chain, Polygon, Base, Arbitrum, dan Optimism tempat alamat itu pernah mengirim transaksi atau memegang token tersebut.
Alamat `0x` tanpa aktivitas di semua jaringan tersebut, atau yang jaringannya tidak dapat diperiksa pada saat itu, diskrining di Ethereum.

Mengirim `crypto_chain` menghindari pencarian tersebut.
Jangan pernah mengganti jaringan sebenarnya dengan `ETH`.

Mencatat simbol token kustom tidak menjamin bahwa transfernya terindeks untuk skrining hash transaksi.
Cakupan token harus diperiksa menggunakan kontrak token dan jaringannya.
Transaksi yang sudah dibuat bukan bukti bahwa skrining berhasil. Periksa status skrining dan hasil penyedia sebelum menganggapnya telah diskrining.

## Masuk vs keluar

`transaction_details.direction` wajib diisi karena menentukan sisi transfer mana yang harus diskrining oleh Didit.

| Arah | Sebelum transfer on-chain | Sesudah transfer on-chain |
| - | - | - |
| **Masuk** (deposit) | Skrining dompet pengirim pihak lawan, jika Anda memberikannya di `counterparty.payment_method.account_id` | Skrining hash transaksi yang dibatasi pada alamat deposit layanan/pelanggan Anda di `subject.payment_method.account_id` |
| **Keluar** (penarikan) | Skrining dompet tujuan di `counterparty.payment_method.account_id` sebelum Anda mengirim dana | Skrining hash transaksi yang dibatasi pada alamat dompet tujuan yang sama di `counterparty.payment_method.account_id` |

Untuk skrining sebelum transfer, hilangkan `transaction_details.payment_reference_id`; Didit menjalankan skrining dompet pada alamat yang relevan. Untuk skrining setelah transfer, sertakan hash transaksi blockchain di `transaction_details.payment_reference_id`; Didit menjalankan skrining transaksi dan menyimpan data ringkasan transaksi jika pengayaan on-chain tersedia.

### Lightning Network

Atur `transaction_details.crypto_params.crypto_chain` ke `LIGHTNING` untuk skrining Lightning Network.
Skrining Lightning memerlukan penyedia Elliptic atau Chainalysis BYOK yang terhubung di **Marketplace** pada konsol.
Merkle Science, Crystal, dan TRM Labs yang dikelola Didit tidak menerima `LIGHTNING`; Didit menolak permintaan tersebut dengan `400` sebelum skrining atau penagihan.

Untuk Elliptic, Didit menskrining pengidentifikasi Lightning yang diberikan melalui analisis dompet BTC Lightning dari Elliptic.
Untuk Chainalysis, Didit mengirimkan transfer Lightning ke KYT saat `transaction_details.payment_reference_id` tersedia.

## Kolom yang wajib diisi

Untuk semua permintaan skrining kripto, kirim:

* `transaction_details.direction`: `INBOUND` atau `OUTBOUND`
* `transaction_details.currency_kind`: `crypto`
* `transaction_details.currency`: simbol aset, misalnya `BTC`, `ETH`, `USDC` atau token kustom Anda
* Alamat pada peserta yang dipilih sesuai aturan arah di atas

Untuk skrining hash transaksi setelah transfer sudah tercatat on-chain, kirim juga:

* `transaction_details.payment_reference_id`: hash transaksi blockchain

Jika skrining kripto diaktifkan dan alamat yang diperlukan untuk arah tersebut tidak ada, API Create Transaction menolak permintaan.

## Contoh: skrining keluar sebelum transfer

Sebelum mengirim dana, buat transaksi kripto keluar tanpa hash transaksi. Didit menskrining alamat dompet tujuan.

```json theme={null}
{
  "transaction_id": "withdrawal-001",
  "transaction_category": "finance",
  "include_crypto_screening": true,
  "transaction_details": {
    "direction": "OUTBOUND",
    "amount": "0.25",
    "currency": "ETH",
    "currency_kind": "crypto",
    "action_type": "withdrawal"
  },
  "subject": {
    "entity_type": "individual",
    "vendor_data": "user-123",
    "full_name": "John Doe"
  },
  "counterparty": {
    "entity_type": "unhosted_wallet",
    "full_name": "John Doe",
    "payment_method": {
      "method_type": "crypto_wallet",
      "account_id": "0xRecipientWallet..."
    }
  }
}
```

## Contoh: skrining masuk setelah transfer

Setelah menerima dana, sertakan hash transaksi. Didit menskrining hash transaksi yang dibatasi pada alamat deposit Anda dan memperkaya respons dengan informasi ringkasan transaksi jika tersedia.

```json theme={null}
{
  "transaction_id": "deposit-001",
  "transaction_category": "finance",
  "include_crypto_screening": true,
  "transaction_details": {
    "direction": "INBOUND",
    "amount": "0.25",
    "currency": "ETH",
    "currency_kind": "crypto",
    "action_type": "deposit",
    "payment_reference_id": "0xTransactionHash..."
  },
  "subject": {
    "entity_type": "individual",
    "vendor_data": "user-123",
    "full_name": "John Doe",
    "payment_method": {
      "method_type": "crypto_wallet",
      "account_id": "0xYourServiceDepositAddress..."
    }
  },
  "counterparty": {
    "entity_type": "unhosted_wallet",
    "full_name": "John Doe"
  }
}
```

## Penyedia yang didukung

| Penyedia | Status | Harga terkelola | Harga kunci terhubung |
| - | - | - | - |
| **Merkle Science** | Tersedia | \$0.15/skrining | \$0.02/skrining |
| **Crystal** | Hubungkan kunci penyedia melalui Marketplace | Tidak tersedia | \$0.02/skrining |
| **Chainalysis** | Hubungkan kunci penyedia melalui Marketplace | Tidak tersedia | \$0.02/skrining |
| **Elliptic** | Hubungkan kunci penyedia melalui Marketplace | Tidak tersedia | \$0.02/skrining |
| **TRM Labs** | Hubungkan kunci penyedia melalui Marketplace | Tidak tersedia | \$0.02/skrining |

Atur penyedia pilihan Anda di **Transaksi** > **Pengaturan** > **Provider Preferences** di [Business Console](https://business.didit.me), atau hubungkan kunci API penyedia Anda sendiri dari **Marketplace** pada konsol (kategori Pemantauan Kripto).

`LIGHTNING` hanya didukung oleh konfigurasi Chainalysis dan Elliptic dengan kunci terhubung.

> [!TIP]
>
> Dengan **harga kunci terhubung**, Anda menghubungkan kunci API penyedia yang sudah ada dan membayar biaya infrastruktur yang tercantum per skrining. Gunakan opsi ini jika Anda sudah memiliki perjanjian komersial dengan penyedia analitik blockchain.

## Hasil skrining

Setiap skrining menghasilkan hasil yang terstandar, terlepas dari penyedia mana yang digunakan.

### Status skrining

`custom_values.aml_screening_status` menunjukkan apakah sebuah transaksi telah diskrining.

| Nilai | Arti |
| - | - |
| `COMPLETED` | Skrining selesai. Hasilnya ada di `provider_results` dan di kolom skrining `custom_values` lainnya. |
| `PENDING` | Skrining belum selesai: penyedia masih menganalisis transaksi, atau Didit menskrining ulang hash transaksi nanti (lihat di bawah). |
| `ERROR` | Penyedia memberikan respons, tetapi melaporkan bahwa analisisnya sendiri gagal. |
| `FAILED` | Transaksi tidak diskrining. `custom_values.aml_screening_error` menjelaskan penyebabnya. Skrining yang dikelola Didit tidak dikenakan biaya untuk kegagalan ini; permintaan yang dijawab oleh penyedia Anda yang terhubung dihitung sebagai permintaan penyedia. |

Transaksi yang seharusnya disetujui berpindah ke `IN_REVIEW` selama status skriningnya bukan `COMPLETED`.

### Hash transaksi yang belum diindeks

Penyedia analitik blockchain dapat membutuhkan beberapa menit untuk mengindeks transfer yang baru saja ditambang, dan selama itu penyedia tidak dapat menskrining transfer tersebut.
Ketika penyedia menjawab bahwa hash transaksi belum diindeks, dan jaringan itu sendiri mengonfirmasi bahwa transaksi tersebut ada, Didit menskrining ulang hash tersebut di latar belakang alih-alih menggagalkannya:

* Respons pembuatan sudah menampilkan `custom_values.aml_screening_status` sebagai `PENDING`, dengan alasannya di `custom_values.aml_screening_error`.
  Transaksi yang seharusnya disetujui ditahan dalam `IN_REVIEW` dengan `decision_reason_code` `aml_screening_pending`.
* Didit menskrining ulang hash transaksi sekitar 2, 12, dan 42 menit setelah transaksi dibuat.
* Ketika percobaan ulang berhasil menskrining transaksi, hasilnya disimpan seperti skrining lainnya dan skrining tersebut dikenakan biaya satu kali.
  Aturan Anda dijalankan kembali pada data skrining, penahanan dilepaskan, dan Anda menerima satu webhook `transaction.status.updated` dengan status yang dimiliki transaksi setelah aturan dijalankan, baik berubah maupun tidak.
  Transaksi yang ditolak atau diselesaikan oleh peninjau sementara itu tetap mempertahankan statusnya.
* Jika penyedia masih belum mengindeks hash transaksi setelah percobaan terakhir, skrining berakhir `FAILED` seperti saat pembuatan: transaksi tetap `IN_REVIEW` dengan `decision_reason_code` `aml_screening_failed`, dan dikenakan biaya sebagai kegagalan saat pembuatan: tidak ada biaya untuk skrining yang dikelola Didit, atau satu permintaan penyedia jika percobaan terakhir mencapai penyedia Anda yang terhubung. Percobaan sebelumnya yang diulang tidak pernah dikenakan biaya.
* Jika saldo Anda tidak lagi cukup untuk skrining saat percobaan ulang dijalankan, skrining berakhir `FAILED` dan tidak ada biaya yang dikenakan.

Percobaan ulang berlaku untuk hash transaksi di Ethereum, BNB Chain, Polygon, Base, Arbitrum, Optimism, dan Tron.
Hash yang tidak dikenali oleh jaringannya, atau hash di jaringan lain, tidak diulang: skrining langsung gagal.

### Skor risiko dan tingkat keparahan

Setiap dompet atau transaksi yang diskrining menerima:

* **Skor risiko** (0–100): skor yang lebih tinggi menunjukkan paparan yang lebih besar terhadap entitas berisiko
* **Tingkat keparahan**: diturunkan dari skor, yaitu `LOW`, `MEDIUM`, `HIGH`, atau `CRITICAL`

### Analisis sumber dana

Rincian persentase dari asal dana, dikelompokkan berdasarkan jenis entitas:

| Kategori | Tingkat risiko | Deskripsi |
| - | - | - |
| `SANCTIONED` | Kritis | Entitas dalam daftar sanksi internasional (OFAC, UE, PBB) |
| `TERRORIST_FINANCING` | Kritis | Alamat yang terkait dengan pendanaan terorisme |
| `CHILD_EXPLOITATION` | Kritis | Alamat yang terkait dengan materi eksploitasi anak |
| `RANSOMWARE` | Tinggi | Alamat pembayaran ransomware |
| `STOLEN_FUNDS` | Tinggi | Alamat yang terkait dengan pencurian atau peretasan yang diketahui |
| `DARKNET_MARKET` | Tinggi | Alamat pasar darknet |
| `MIXER` | Tinggi | Layanan pencampuran atau tumbling yang digunakan untuk menyamarkan asal dana |
| `SCAM` | Tinggi | Alamat penipuan yang diketahui |
| `HIGH_RISK_EXCHANGE` | Sedang | Bursa kripto dengan kontrol KYC/AML yang lemah |
| `HIGH_RISK_JURISDICTION` | Sedang | Entitas di yurisdiksi berisiko tinggi yang tercantum oleh FATF |
| `GAMBLING_UNLICENSED` | Sedang | Platform perjudian tanpa lisensi |
| `P2P_EXCHANGE` | Rendah | Layanan pertukaran peer-to-peer |
| `EXCHANGE` | Rendah | Bursa kripto yang diatur |
| `UNNAMED_SERVICE` | Rendah | Layanan yang tidak teridentifikasi |

Setiap entitas dalam rincian mencakup persentase dana, jumlah yang diterima dan dikirim, serta apakah koneksinya langsung atau tidak langsung.

### Tabel eksposur

Tabel yang menampilkan entitas sumber, tujuan, dan pihak lawan, termasuk:

* Nama dan kategori entitas
* Koneksi langsung vs. tidak langsung (jarak lompatan)
* Jumlah yang diterima dan dikirim
* Tingkat risiko per entitas

### Graf jaringan

Representasi visual node-sisi dari hubungan transaksi sebuah dompet:

* **Node** mewakili dompet, bursa, layanan, dan entitas lainnya
* **Sisi** mewakili transaksi antar node, dengan jumlah dan hash transaksi
* **Metrik** mencakup statistik tingkat graf seperti sentralitas dan kedalaman

Graf jaringan tersedia di [Business Console](https://docs.didit.me/id/transaction-monitoring/console.md) sebagai visualisasi interaktif.

## Integrasi dengan aturan

Hasil skrining langsung masuk ke [mesin aturan](https://docs.didit.me/id/transaction-monitoring/rules.md). Didit menyediakan aturan preset yang terpicu secara otomatis berdasarkan data skrining:

| Aturan preset | Tindakan |
| - | - |
| **Pihak lawan yang terkena sanksi** | Penolakan langsung - dompet yang diperiksa dikaitkan dengan entitas yang terkena sanksi (`custom_values.wallet_sanctioned`) |
| **Eksposur sanksi** | Tambahkan skor + tandai untuk peninjauan - dompet mengirim atau menerima dana dari entitas yang terkena sanksi tanpa terkena sanksi itu sendiri (`sanctions_hit` bernilai true, `wallet_sanctioned` tidak bernilai true) |
| **Pendanaan terorisme / eksploitasi anak** | Penolakan langsung |
| **Eksposur pasar darknet** | Tambahkan skor + tandai untuk peninjauan |
| **Eksposur layanan mixer/obfuskasi** | Tambahkan skor + tandai untuk peninjauan |
| **Sumber dana berisiko tinggi (>30%)** | Tambahkan skor + tandai untuk peninjauan |
| **Beberapa pihak lawan berisiko** | Tambahkan skor + tandai untuk peninjauan |
| **Skor risiko dompet sedang** | Tambahkan skor + tandai untuk peninjauan |
| **Skrining tertunda** | Tahan transaksi hingga skrining selesai |

### Kolom skrining untuk aturan

Skrining kripto menulis kunci berikut ke `custom_values` transaksi, sehingga aturan dapat menggunakannya sebagai `custom_values.<key>`:

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `sanctions_hit` | boolean | `true` jika dompet itu sendiri terkena sanksi, atau jika dana dari salah satu pihak lawannya berasal dari entitas yang terkena sanksi (eksposur). Bursa besar umumnya bernilai `true` hanya karena eksposur. |
| `wallet_sanctioned` | boolean | `true` hanya jika penyedia skrining mengaitkan dompet yang diperiksa itu sendiri dengan entitas yang terkena sanksi (penetapan OFAC, UE, PBB, atau HMT). Eksposur saja tidak pernah mengatur nilai ini. |
| `aml_sanctions_exposure_pct` | angka (0-100) | Porsi volume yang terskrining pada dompet dan bersentuhan dengan entitas yang terkena sanksi. Dihitung seperti `aml_high_risk_exposure_pct`, tetapi dibatasi pada sanksi. |

Gunakan `wallet_sanctioned` untuk memblokir transfer ke dompet yang terkena sanksi tanpa menolak transfer ke bursa besar yang hanya memiliki eksposur tidak langsung.
Gunakan `sanctions_hit` atau `aml_sanctions_exposure_pct` untuk meninjau atau memberi skor pada eksposur.

Aturan preset **Pihak lawan yang terkena sanksi** menolak ketika `wallet_sanctioned` bernilai `true`, dan aturan preset **Eksposur sanksi** mengirim dompet yang hanya memiliki eksposur ke peninjauan.
Keduanya tidak pernah cocok dengan transaksi yang sama, sehingga dompet yang terkena sanksi selalu ditolak.
Jika Anda memasang **Pihak lawan yang terkena sanksi** sebelum perubahan ini, Didit telah memindahkannya ke `wallet_sanctioned` untuk Anda dan menambahkan **Eksposur sanksi** dengan mode yang sama, sehingga transfer yang sebelumnya ditolak karena eksposur saja sekarang masuk ke peninjauan.

Setelah skrining selesai, Didit secara otomatis mengevaluasi ulang semua aturan terhadap data transaksi yang telah diperkaya dan memicu webhook yang berlaku.

## Langkah berikutnya

> [card] [Mengirim transaksi](https://docs.didit.me/id/transaction-monitoring/transactions.md)
>
> Cara mengirim transaksi termasuk detail dompet kripto.

> [card] [Aturan & penilaian](https://docs.didit.me/id/transaction-monitoring/rules.md)
>
> Cara hasil skrining masuk ke mesin aturan.

> [card] [Panduan konsol](https://docs.didit.me/id/transaction-monitoring/console.md)
>
> Melihat analisis skrining kripto, sumber dana, dan graf jaringan di konsol.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.