> ## 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.

# API Skrining Dompet On-demand: Tanpa Transaksi

> Skrining alamat dompet kripto untuk risiko AML tanpa membuat transaksi. Sumber dana, paparan sanksi, dan skor risiko on demand dari Didit.

Sesekali Anda perlu memeriksa risiko AML dompet kripto **sebelum** ada transaksi yang dicatat, misalnya saat pelanggan menambahkan alamat penarikan, atau saat tim kepatuhan Anda ingin memeriksa alamat secara ad hoc. Endpoint skrining dompet sesuai permintaan menyaring satu alamat dan mengembalikan hasil risiko lengkap tanpa membuat transaksi.

Ini adalah padanan mandiri dari [skrining kripto otomatis](https://docs.didit.me/id/transaction-monitoring/aml-screening.md) yang berjalan selama [pengajuan transaksi](https://docs.didit.me/id/transaction-monitoring/transactions.md). Keduanya menggunakan penyedia analitik blockchain yang sama dan bentuk hasil yang sama.

## Kapan digunakan

| Kasus penggunaan | Endpoint |
| - | - |
| Pra-cek alamat tanpa transaksi yang akan dicatat | **Skrining Dompet** — `POST /v3/wallet-screening/` |
| Saring dompet sebagai bagian dari setoran/penarikan yang dicatat | [Buat Transaksi](https://docs.didit.me/id/transaction-monitoring/transactions.md) dengan `currency_kind: "crypto"` |

Skrining dompet tidak menulis apa pun ke tabel transaksi. Jika Anda membutuhkan hasil skrining yang terlampir pada transaksi yang dipantau (dengan aturan, alert, dan webhook), ajukan transaksi sebagai gantinya.

## Prasyarat

Pemantauan transaksi harus dikonfigurasi untuk aplikasi dengan salah satu penyedia terkelola atau [kunci penyedia yang sudah ada](https://docs.didit.me/id/transaction-monitoring/aml-screening.md#penyedia-yang-didukung). Konfigurasikan di **Transaksi** > **Pengaturan** > **Provider Preferences** di [Business Console](https://business.didit.me). Jika tidak ada penyedia yang dikonfigurasi, endpoint mengembalikan `409 Conflict`.

## Permintaan

`POST https://verification.didit.me/v3/wallet-screening/`

Lakukan autentikasi dengan header `x-api-key`.

| Kolom | Tipe | Wajib | Deskripsi |
| - | - | - | - |
| `wallet_address` | string | Ya | Alamat atau identifier jaringan yang akan disaring. Harus sesuai dengan jaringan yang dipilih, misalnya `0x` + 40 karakter heksadesimal untuk rantai EVM, atau identifier Lightning yang diterima oleh penyedia Anda. Alias: `address`. |
| `blockchain` | string | Tidak | Identifier aset / jaringan. Jika dihilangkan, Didit membaca jaringan dari format alamat: alamat `bc1`, `1` dan `3` adalah Bitcoin (`BTC`), alamat `T` adalah Tron (`TRX`), dan kunci publik base58 adalah Solana (`SOL`). Alamat `0x` valid di setiap jaringan EVM, sehingga endpoint mengembalikan `422` dengan `candidate_chains` dan tidak ada yang disaring atau ditagih; kirim ulang dengan jaringan yang sudah diatur. Format lain mengembalikan `400`. Nilai yang diterima: `BTC`, `LIGHTNING`, `ETH`, `LTC`, `XRP`, `BCH`, `DOGE`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM`, `HBAR`, `CELO`, `MODE`, `PLUME`, `USDT`, `USDC`. Nama jaringan umum juga diterima, misalnya `POLYGON` atau `POL` untuk `MATIC`, `BSC` untuk `BNB`, dan `TRON` untuk `TRX`. Alias: `currency`. |
| `direction` | string | Tidak | `inbound`, `outbound`, `deposit`, atau `withdrawal`. Konteks opsional untuk penyedia; hilangkan untuk skrining netral sebelum transfer. Nilai ini tidak mengubah `risk_score`, `severity`, atau rincian aliran dana yang dikembalikan (lihat catatan di bagian [Respons](#respons)). |

### Cakupan jaringan

Skrining terkelola mendukung Base (`BASE`), Optimism (`OP`), dan Arbitrum One (`ARB`) untuk skrining dompet maupun skrining hash transaksi.
Penyedia yang terhubung mungkin memiliki cakupan yang berbeda; sebuah rantai juga harus didukung oleh penyedia dan akun yang Anda pilih.
Celo (`CELO`), Mode (`MODE`), dan Plume (`PLUME`) disaring melalui akun TRM Labs yang terhubung (Marketplace, bawa kunci Anda sendiri); skrining terkelola tidak mencakupnya dan mengembalikan `400`.
Jangan kirim `ETH` untuk jaringan EVM lain: alamat yang sama dapat memiliki aktivitas dan risiko yang berbeda di setiap rantai.

Dengan skrining terkelola, `USDT` dan `USDC` adalah alias lama untuk Ethereum, bukan pencarian di setiap jaringan tempat token tersebut ada.
Gunakan identifier jaringan (`ETH`, `TRX`, `SOL`, `MATIC`, `BNB`, `BASE`, `OP`, `ARB`, `AVAX`, `ADA`, `XLM`, `HBAR`, atau dengan TRM Labs `CELO`, `MODE`, atau `PLUME`) untuk jaringan yang sebenarnya digunakan dompet tersebut.
Untuk token dalam transaksi yang dicatat, simpan token di `transaction_details.currency` dan tentukan jaringannya secara terpisah di `transaction_details.crypto_params.crypto_chain`.
Lihat [pemilihan aset dan jaringan](https://docs.didit.me/id/transaction-monitoring/aml-screening.md#pemilihan-aset-dan-jaringan).

> [!WARNING]
>
> `LIGHTNING` hanya tersedia jika aplikasi memiliki penyedia BYOK Elliptic atau Chainalysis yang terhubung di **Marketplace**.
> Fitur ini tidak tersedia dengan Merkle Science terkelola, atau dengan Crystal maupun TRM Labs.
> Permintaan tanpa penyedia yang didukung dan terhubung mengembalikan `400` dan tidak disaring maupun ditagih.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/wallet-screening/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
    "blockchain": "ETH"
  }'
```

## Respons

Respons adalah hasil skrining terstandardisasi. Bentuknya identik dengan hasil provider `WALLET_SCREENING` yang dikembalikan oleh skrining transaksi.

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `provider` | string | Penyedia yang melakukan skrining terhadap alamat (`merklescience`, `crystal`, `chainalysis`, `elliptic`, `trmlabs`). |
| `screening_type` | string | Selalu `WALLET_SCREENING`. |
| `risk_score` | integer | Skor risiko ternormalisasi 0–100. Merkle Science menilai alamat dengan `0-5`, yang dipetakan ke `0`, `15`, `35`, `55`, `75` atau `95`. |
| `severity` | string | Kelompok tingkat risiko yang diturunkan dari `risk_score` (lihat catatan di bawah): `UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`, atau `CRITICAL`. |
| `status` | string | `SCREENED`, `PENDING`, atau `ERROR`. |
| `summary` | string | Ringkasan yang dapat dibaca manusia. |
| `wallet_address` | string | Alamat yang didiskrining. |
| `blockchain` | string | Blockchain yang didiskrining. |
| `sanctions_hit` | boolean | `true` ketika dompet yang didiskrining terkena sanksi, atau ketika dana dari salah satu pihak lawannya berasal dari entitas yang terkena sanksi (paparan). Kolom ini tidak membedakan keduanya. |
| `pep_counterparty` | boolean \| null | Paparan Politically Exposed Person (PEP). `null` ketika tidak ada temuan PEP yang tersedia, yang terjadi pada setiap hasil saat ini karena tidak ada provider yang melaporkannya. `false` hanya untuk hasil skrining negatif yang eksplisit. Jangan membaca `null` sebagai pemeriksaan PEP yang sudah selesai. |
| `dominant_risk_category` | string \| null | Kategori risiko tinggi dengan bobot tertinggi, atau `null`. |
| `risk_factors` | array | Penjelasan `risk_score` yang diurutkan: apa yang menghasilkan putusan ini. Lihat [Faktor risiko](#faktor-risiko). |
| `source_of_funds` | array | Dari mana dana diterima, per entitas. Lihat [Rincian paparan](#rincian-paparan). |
| `destination_of_funds` | array | Ke mana dana dikirim, per entitas. Bentuk entrinya sama dengan `source_of_funds`. |
| `counterparty_connections` | array | Entitas yang dikaitkan oleh provider dengan alamat ini. Lihat [Koneksi pihak lawan](#koneksi-pihak-lawan). |
| `network_nodes`, `network_edges` | array | Graf paparan untuk skrining transaksi. Kosong pada hasil skrining dompet. |
| `transaction_hash`, `block_timestamp`, `total_value_usd`, `fee_usd`, `transaction_flows_status`, `transaction_flows_error` | null | Kolom skrining transaksi yang juga terdapat dalam bentuk hasil. Selalu `null` pada hasil skrining dompet. |
| `sender_rows`, `receiver_rows`, `transaction_flows` | array | Kolom skrining transaksi. Selalu kosong pada hasil skrining dompet. |
| `raw_response` | object | Payload asli dari provider. Bentuknya spesifik untuk setiap provider dan dapat berubah tanpa pemberitahuan. Baca kolom ternormalisasi di atas, jangan mem-parsing-nya. |
| `report_signature` | string | Tanda tangan opak atas hasil ini, dibatasi untuk aplikasi Anda. Kirim ulang respons tanpa diubah, termasuk kolom ini, untuk [merendernya sebagai PDF](#laporan-pdf). |

> [!NOTE]
>
> **Cara `severity` ditetapkan.** `severity` adalah kelompok dari `risk_score` ternormalisasi: `0-9` → `UNKNOWN`, `10-39` → `LOW`, `40-69` → `MEDIUM`, `70-89` → `HIGH`, `90-100` → `CRITICAL`. `UNKNOWN` adalah kelompok terendah, bukan status terpisah "tidak ada data". `risk_score: 0` (kasus alamat bersih yang umum) berarti provider tidak mengembalikan penilaian negatif, sedangkan skor bukan nol dalam rentang `1-9` adalah sinyal nyata tetapi di bawah `LOW`. Jadi baca `risk_score` itu sendiri, bukan hanya kelompoknya. Bagaimanapun juga, jangan tampilkan `UNKNOWN` sebagai "bersih" atau "lolos" yang tegas.
>
> **`direction` tidak mengubah model risiko.** Kolom opsional `direction` hanya diteruskan ke provider sebagai konteks. Kolom ini tidak memengaruhi `risk_score`, `severity`, atau daftar rincian mana yang dikembalikan: baik `source_of_funds` maupun `destination_of_funds` selalu dikembalikan. Karena itu, mengubah atau menghilangkan `direction` tidak memerlukan skrining ulang untuk alamat yang sudah pernah diskrining.

### Faktor risiko

`risk_factors` adalah jawaban yang diurutkan atas pertanyaan "mengapa alamat ini diberi skor seperti ini". Provider menilai alamat dengan model mereka sendiri dan hanya mengembalikan putusan. Merkle Science mengembalikan bilangan bulat `0-5`, sehingga `risk_score` saja tidak dapat ditindaklanjuti. Setiap entri menyebutkan satu pendorong, diurutkan dari risiko tinggi lebih dulu, lalu menurut nilai yang mengalir melewatinya.

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `source` | string | `attribution` (apa yang dinyatakan provider tentang alamat itu, yaitu tag atau klusternya sendiri) atau `exposure` (ke mana dananya benar-benar bergerak). |
| `category` | string | Kategori risiko ternormalisasi, dengan kosakata yang sama seperti rincian paparan. |
| `label` | string | Penyebutan asli dari provider, misalnya `Gambling / Crypto only`. Gunakan ini di UI karena cocok dengan yang akan Anda lihat di konsol provider. |
| `entity_name` | string \| null | Entitas yang dikaitkan, misalnya situs judi atau bursa. Contoh di halaman ini menggunakan placeholder seperti `Example Gambling`. |
| `direction` | string | `incoming`, `outgoing`, `connected`, `attribution` (tag alamat itu sendiri), atau `unknown` ketika provider tidak melaporkan arah. |
| `exposure_type` | string | `direct` (1 hop), `indirect` (multi-hop), `attribution` (tag alamat itu sendiri), atau `unknown` ketika provider tidak menyatakan berapa hop jaraknya dari pihak lawan. Perlakukan `unknown` sebagai tidak terklasifikasi, jangan pernah sebagai `direct`. |
| `amount_usd` | number \| null | Nilai USD yang dikaitkan dengan pendorong ini. |
| `percentage` | number | Porsi dari **total** volume yang diskrining milik alamat, kedua arah digabung. Berbeda dengan `percentage` di dalam `source_of_funds` / `destination_of_funds`, yang dinormalisasi per arah. Nilai ini dapat dibandingkan dan dijumlahkan di seluruh daftar. |
| `is_high_risk` | boolean | Apakah kategori tersebut termasuk yang diperlakukan Didit sebagai risiko tinggi (`sanctioned`, `mixer`, `stolen_funds`, `ransomware`, `scam`, `darknet_market`, `terrorist_financing`, `child_exploitation`, `hacked_exchange`, `high_risk_exchange`, `seized_funds`). |
| `description` | string | Satu baris penjelasan pendorong, misalnya `9.01% indirect outgoing exposure to Gambling / Crypto only (Example Gambling)`. |

> [!NOTE]
>
> **Skor tinggi tanpa faktor `is_high_risk` adalah hasil yang nyata dan bermakna.** Artinya provider menilai alamat tersebut dengan model paparannya sendiri tanpa melaporkan kecocokan sanksi, PEP, atau entitas yang dikaitkan. Faktor yang *tercantum* adalah aliran dana di balik penilaian tersebut. `summary` menyatakan hal ini secara eksplisit, jadi perlakukan alamat ini sebagai "tinjau alirannya", bukan sebagai temuan yang terkonfirmasi. `risk_factors` dibatasi pada lima pendorong terkuat. `source_of_funds` dan `destination_of_funds` selalu memuat rincian lengkap.
>
> **`risk_factors` adalah kolom tingkat teratas, bukan kolom bersarang.** Hasil yang diskrining sebelum kolom ini ada tidak menyertakan kunci tersebut sama sekali. Baca sebagai daftar kosong, jangan mengasumsikan penjelasannya kosong.

### Rincian paparan

Setiap entri dalam `source_of_funds` / `destination_of_funds` menggambarkan satu entitas yang bertukar dana dengan alamat tersebut:

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `category` | string | Kategori risiko yang telah dinormalisasi (`exchange_licensed`, `dex`, `defi`, `mixer`, `sanctioned`, `darknet_market`, `stolen_funds`, …). |
| `entity_name` | string \| null | Entitas yang diatribusikan, misalnya bursa, mixer, atau kelompok yang terkena sanksi. Contoh di halaman ini menggunakan placeholder. |
| `entity_type` | string \| null | Tipe entitas dari penyedia (`Exchange`, `DeFi`, `Sanctions`). |
| `entity_subtype` | string \| null | Subtipe yang lebih rinci (`Mandatory KYC and AML`, `OFAC`). |
| `description` | string \| null | `entity_type / entity_subtype`, sebagaimana penyedia memberi label pada entitas. |
| `exposure_direction` | string | `incoming`, `outgoing`, atau `connected`. |
| `exposure_type` | string | `direct` (1 hop) atau `indirect` (multi-hop). |
| `is_direct` | boolean | `true` ketika `exposure_type` bernilai `direct`. |
| `amount_usd` | number \| null | Nilai USD yang diatribusikan ke entitas. |
| `percentage` | number | Bagian dari total paparan pada arah tersebut (0–100). |
| `hops` | integer \| null | Jumlah hop ke entitas (`1` untuk pihak lawan langsung), jika penyedia melaporkannya. Selalu `null` untuk Merkle Science, yang hanya melaporkan apakah paparan bersifat langsung atau tidak langsung: gunakan `exposure_type`. |
| `country` | string \| null | Kode negara ISO 3166-1 alpha-2 utama dari entitas. Kosong atau `null` ketika penyedia tidak mengetahuinya. |
| `provider_entity_id`, `provider_entity_type_id`, `provider_entity_subtype_id` | string \| null | Identifier milik penyedia untuk entitas dan tipenya. |
| `raw_amount`, `raw_currency` | number \| null, string \| null | Jumlah dalam satuan aset itu sendiri, jika penyedia melaporkannya. |

### Koneksi pihak lawan

`counterparty_connections` mencantumkan entitas yang diatribusikan penyedia ke alamat yang diskrining. Untuk Merkle Science, entitas ini berasal dari tag pemilik dan tag pengguna milik alamat itu sendiri, sehingga entitas yang sama bisa muncul dua kali. Entitas ini juga tidak membawa aliran dana: `received_usd`, `sent_usd`, `received_hops`, dan `sent_hops` bernilai `null`, serta `percentage` bernilai `0.0`. Baca aliran dana dari `source_of_funds` dan `destination_of_funds`.

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `entity_name` | string \| null | Entitas yang diatribusikan. |
| `entity_type` | string \| null | Tipe entitas dari penyedia. |
| `entity_subtype` | string \| null | Subtipe yang lebih rinci. |
| `categories` | array | Kategori risiko yang telah dinormalisasi dari entitas. |
| `risk_level` | string | Menggunakan huruf kecil dan bergantung pada penyedia. Untuk Merkle Science, ini adalah grade risiko 0-5 milik alamat itu sendiri (`no_risk`, `low`, `medium_low`, `medium`, `high`, `critical`), dinaikkan menjadi `high` ketika kategori entitas berisiko tinggi. Ini bukan grade terpisah untuk entitas. |
| `is_direct` | boolean | Selalu `true` untuk Merkle Science, karena koneksinya berupa atribusi, bukan pihak lawan. |
| `received_usd`, `sent_usd` | number \| null | USD yang diterima dari dan dikirim ke entitas, jika penyedia melaporkannya. |
| `received_hops`, `sent_hops` | integer \| null | Hop ke entitas di setiap arah, jika penyedia melaporkannya. |
| `percentage` | number | Bagian dari paparan alamat, jika penyedia melaporkannya; jika tidak, `0.0`. |
| `country` | string \| null | Negara entitas, jika diketahui. |
| `provider_entity_id` | string \| null | Identifier milik penyedia untuk entitas. |

> [!WARNING]
>
> Jangan menentukan perutean berdasarkan `counterparty_connections[].risk_level` atau `counterparty_connections[].is_direct`: untuk Merkle Science, yang pertama mengulang grade risiko alamat itu sendiri (baca `risk_score`) dan yang kedua selalu `true`. Gunakan `sanctions_hit`, `dominant_risk_category`, dan `risk_factors[].is_high_risk` untuk keputusan, serta `exposure_type` di `source_of_funds` / `destination_of_funds` untuk mengetahui apakah paparan bersifat langsung.

### Contoh

Respons nyata untuk alamat dalam daftar sanksi OFAC, yang diskrining dengan Merkle Science. Hanya `raw_response` yang dipersingkat dan `report_signature` diganti:

```json theme={null}
{
  "provider": "merklescience",
  "screening_type": "WALLET_SCREENING",
  "risk_score": 95,
  "severity": "CRITICAL",
  "status": "SCREENED",
  "summary": "Merkle Science risk: Critical (5/5). SANCTIONS HIT. Dominant risk: sanctioned. Driven by: the address is attributed to Sanctions / OFAC (Example Sanctions)",
  "wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
  "transaction_hash": null,
  "blockchain": "ETH",
  "block_timestamp": null,
  "total_value_usd": null,
  "fee_usd": null,
  "sender_rows": [],
  "receiver_rows": [],
  "transaction_flows": [],
  "transaction_flows_status": null,
  "transaction_flows_error": null,
  "source_of_funds": [
    {
      "category": "sanctioned",
      "percentage": 100.0,
      "amount_usd": 9813695.0,
      "entity_name": "Example Sanctions",
      "entity_type": "Sanctions",
      "entity_subtype": "OFAC",
      "hops": null,
      "description": "Sanctions / OFAC",
      "is_direct": true,
      "exposure_direction": "incoming",
      "exposure_type": "direct",
      "provider_entity_id": "118885",
      "provider_entity_type_id": "30",
      "provider_entity_subtype_id": "125",
      "country": "",
      "raw_amount": null,
      "raw_currency": null
    }
  ],
  "destination_of_funds": [
    {
      "category": "defi",
      "percentage": 84.824453,
      "amount_usd": 7783414.38,
      "entity_name": "Example DeFi 7",
      "entity_type": "DeFi",
      "entity_subtype": "Bridges",
      "hops": null,
      "description": "DeFi / Bridges",
      "is_direct": false,
      "exposure_direction": "outgoing",
      "exposure_type": "indirect",
      "provider_entity_id": "118459",
      "provider_entity_type_id": "33",
      "provider_entity_subtype_id": "143",
      "country": "",
      "raw_amount": null,
      "raw_currency": null
    },
    {
      "category": "defi",
      "percentage": 15.175547,
      "amount_usd": 1392494.37,
      "entity_name": "Example DeFi 2",
      "entity_type": "DeFi",
      "entity_subtype": "Yield Aggregator",
      "hops": null,
      "description": "DeFi / Yield Aggregator",
      "is_direct": false,
      "exposure_direction": "outgoing",
      "exposure_type": "indirect",
      "provider_entity_id": "90192",
      "provider_entity_type_id": "33",
      "provider_entity_subtype_id": "142",
      "country": "",
      "raw_amount": null,
      "raw_currency": null
    }
  ],
  "counterparty_connections": [
    {
      "entity_name": "Example Sanctions",
      "entity_type": "Sanctions",
      "entity_subtype": "OFAC",
      "risk_level": "critical",
      "categories": [
        "sanctioned"
      ],
      "received_usd": null,
      "sent_usd": null,
      "received_hops": null,
      "sent_hops": null,
      "percentage": 0.0,
      "is_direct": true,
      "country": null,
      "provider_entity_id": null
    },
    {
      "entity_name": "Example Sanctions",
      "entity_type": "Sanctions",
      "entity_subtype": "OFAC",
      "risk_level": "critical",
      "categories": [
        "sanctioned"
      ],
      "received_usd": null,
      "sent_usd": null,
      "received_hops": null,
      "sent_hops": null,
      "percentage": 0.0,
      "is_direct": true,
      "country": null,
      "provider_entity_id": null
    }
  ],
  "network_nodes": [],
  "network_edges": [],
  "sanctions_hit": true,
  "pep_counterparty": null,
  "dominant_risk_category": "sanctioned",
  "risk_factors": [
    {
      "source": "attribution",
      "category": "sanctioned",
      "label": "Sanctions / OFAC",
      "entity_name": "Example Sanctions",
      "direction": "attribution",
      "exposure_type": "attribution",
      "amount_usd": null,
      "percentage": 0.0,
      "is_high_risk": true,
      "description": "the address is attributed to Sanctions / OFAC (Example Sanctions)"
    },
    {
      "source": "exposure",
      "category": "sanctioned",
      "label": "Sanctions / OFAC",
      "entity_name": "Example Sanctions",
      "direction": "incoming",
      "exposure_type": "direct",
      "amount_usd": 9813695.0,
      "percentage": 51.679304,
      "is_high_risk": true,
      "description": "51.6793% direct incoming exposure to Sanctions / OFAC (Example Sanctions)"
    },
    {
      "source": "exposure",
      "category": "defi",
      "label": "DeFi / Bridges",
      "entity_name": "Example DeFi 7",
      "direction": "outgoing",
      "exposure_type": "indirect",
      "amount_usd": 7783414.38,
      "percentage": 40.987766,
      "is_high_risk": false,
      "description": "40.9878% indirect outgoing exposure to DeFi / Bridges (Example DeFi 7)"
    },
    {
      "source": "exposure",
      "category": "defi",
      "label": "DeFi / Yield Aggregator",
      "entity_name": "Example DeFi 2",
      "direction": "outgoing",
      "exposure_type": "indirect",
      "amount_usd": 1392494.37,
      "percentage": 7.33293,
      "is_high_risk": false,
      "description": "7.33293% indirect outgoing exposure to DeFi / Yield Aggregator (Example DeFi 2)"
    }
  ],
  "raw_response": {
    "...": "provider-specific details"
  },
  "report_signature": "<hmac-sha256 over the result, scoped to your application>"
}
```

Contoh ini menggambarkan bentuk respons, bukan keputusan yang dijamin untuk alamat nyata.
Skor risiko dan paparan sanksi bergantung pada jaringan yang dipilih, intelijen terkini, dan kebijakan risiko yang dikonfigurasi.
Atribusi ke bursa tidak berarti skor risikonya nol: dompet bursa dapat memiliki paparan sanksi melalui aliran dananya.
`sanctions_hit: true` dapat menunjukkan bahwa dompet itu sendiri terkena sanksi, atau hanya bahwa dananya memiliki paparan sanksi. Dengan sendirinya, nilai ini tidak berarti pemilik dompet yang diskrining terkena sanksi.
Ketika skrining yang sama dijalankan pada transaksi yang tercatat, aturan juga dapat membaca `custom_values.wallet_sanctioned`, yang bernilai `true` hanya jika penyedia mengatribusikan dompet itu sendiri ke entitas yang terkena sanksi, serta `custom_values.aml_sanctions_exposure_pct`.
Lihat [Kolom skrining untuk aturan](https://docs.didit.me/id/transaction-monitoring/aml-screening.md#kolom-skrining-untuk-aturan).
Baca `risk_factors`, `source_of_funds`, dan `destination_of_funds` untuk membedakan atribusi dari paparan.
Lihat [Skrining Kripto & Dompet](https://docs.didit.me/id/transaction-monitoring/aml-screening.md#hasil-skrining) untuk panduan lengkapnya.

## Laporan PDF

Untuk mendapatkan PDF hasil skrining dengan branding Didit, kirim ulang badan respons yang persis sama, termasuk `report_signature`, ke `POST /v3/wallet-screening/pdf/`. Proses ini tidak menyimpan status: tidak ada panggilan ke penyedia, tidak ada penagihan tambahan, dan tidak ada yang disimpan. Mengubah kolom yang ditandatangani (`risk_score`, `severity`, `sanctions_hit`, …) sebelum mengirim ulang akan gagal dengan `400`.

```bash theme={null}
RESULT=$(curl -s -X POST https://verification.didit.me/v3/wallet-screening/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a", "blockchain": "ETH"}')

curl -X POST https://verification.didit.me/v3/wallet-screening/pdf/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$RESULT" \
  -o wallet_screening_report.pdf
```

Lihat [Skrining Dompet PDF](https://docs.didit.me/id/management-api/transactions/screen-wallet-pdf.md) untuk skema permintaan dan respons lengkap serta bentuk kesalahan.

## Penagihan

Satu penggunaan pemantauan AML ditagihkan per skrining yang berhasil, dengan tarif yang sama seperti skrining kripto yang terkait transaksi. Lihat [harga](https://docs.didit.me/id/transaction-monitoring/aml-screening.md#penyedia-yang-didukung) untuk tarif terkelola dan tarif kunci terhubung. Aplikasi sandbox tidak ditagih. Galat validasi (`400`) dan galat penyedia yang belum dikonfigurasi (`409`) tidak pernah ditagih.

## Galat

| Status | Arti |
| - | - |
| `400` | Format alamat dompet tidak valid, `wallet_address` tidak ada, atau `blockchain` tidak didukung. |
| `401` | `x-api-key` tidak ada atau tidak valid. |
| `409` | Tidak ada penyedia AML yang dikonfigurasi untuk aplikasi. Konfigurasikan pemantauan transaksi terlebih dahulu. |
| `409` | Penyedia menolak kunci API yang Anda hubungkan (`wallet_screening_provider_credentials_rejected`) - perbarui kunci pada koneksi Marketplace, atau di pengaturan pemantauan transaksi untuk kunci yang dikonfigurasi di sana. Mencoba lagi dengan kunci yang sama tidak membantu. |
| `409` | Penyedia AML yang dikonfigurasi belum mendukung skrining dompet (`wallet_screening_provider_unavailable`). |
| `422` | Alamat `0x` dikirim tanpa `blockchain` (`wallet_screening_chain_undetermined`). Isi respons mencantumkan `candidate_chains`; kirim ulang permintaan dengan salah satunya. Tidak ada yang diskrining atau ditagih. |
| `502` | Penyedia tidak dapat menyelesaikan skrining; coba lagi nanti. |

## Langkah selanjutnya

> [card] [Referensi API](https://docs.didit.me/id/management-api/transactions/screen-wallet.md)
>
> Skema lengkap permintaan dan respons untuk endpoint Screen Wallet.

> [card] [PDF Screen Wallet](https://docs.didit.me/id/management-api/transactions/screen-wallet-pdf.md)
>
> Buat PDF dengan merek Didit dari hasil skrining.

> [card] [Skrining kripto & dompet](https://docs.didit.me/id/transaction-monitoring/aml-screening.md)
>
> Skrining otomatis saat pembuatan transaksi dan model hasilnya.


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