> ## 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 API: AML Kripto Sesuai Permintaan

> Didit menyaring satu alamat dompet kripto untuk risiko AML tanpa membuat transaksi. Sumber dana, paparan sanksi, skor risiko. Bayar per panggilan mulai $0.02.



Prompt API Skrining Dompet
        Salin prompt ke papan klip



      
      

\<pre>

\`Screen a single crypto wallet address for AML risk through the Didit Management API, without creating a transaction.

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

Authentication:
Use the x-api-key header with my Didit API key.

Goal:
\- Run on-demand AML screening on one crypto address and return a normalised risk result (risk_score, severity, sanctions_hit, source/destination of funds, counterparty connections). Nothing is written to the transactions table.

When to call:
\- Before onboarding a customer's deposit/withdrawal wallet, to pre-check exposure.
\- Any time you need a standalone risk read on an address and do NOT have (or do not want to record) a transaction.
\- For transaction-coupled monitoring instead, use POST /v3/transactions/ with currency_kind = "crypto".

Prerequisites:
\- Transaction monitoring must be configured for the application with a managed provider or an existing provider key. Otherwise the call returns 409.

Request body (application/json):
\{
"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",  // required; alias: address
"blockchain": "ETH",   // required; one of BTC, ETH, LTC, XRP, BCH, DOGE, TRX, SOL, MATIC, BNB, BASE, OP, ARB, AVAX, ADA, XLM, HBAR, USDT, USDC, or a common network name such as POLYGON or BSC; alias: currency
"direction": "inbound" // optional; inbound | outbound | deposit | withdrawal
}

Example call:
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"}'

What to read from the response:
\- risk_score (0-100, higher = riskier) and severity (UNKNOWN | LOW | MEDIUM | HIGH | CRITICAL).
\- sanctions_hit (boolean) and dominant_risk_category.
\- source_of_funds / destination_of_funds / counterparty_connections for the exposure breakdown.

Billing:
\- One AML monitoring usage is billed per successful screening. Sandbox applications are not billed.

Failure modes:
\- 400 - malformed wallet address, missing wallet_address, or unsupported blockchain.
\- 401 - missing or malformed x-api-key.
\- 409 - no AML provider configured for the application; configure transaction monitoring first.
\- 502 - provider could not complete the screening; retry later.

For automatic, transaction-coupled crypto screening, see /transaction-monitoring/aml-screening.`

\</pre>



      
      

Tempel ke



## OpenAPI

````yaml id/openapi-25.json POST /v3/wallet-screening/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/wallet-screening/:
    post:
      tags:
        - Transactions
      summary: Skrining alamat dompet
      description: >-
        Jalankan Skrining AML sesuai permintaan untuk satu dompet/alamat kripto
        tanpa membuat transaksi. Menentukan penyedia analitik blockchain yang
        dikonfigurasi untuk aplikasi Anda, melakukan skrining alamat secara
        sinkron, dan mengembalikan hasil risiko yang dinormalisasi. LIGHTNING
        hanya tersedia dengan koneksi BYOK Elliptic atau Chainalysis yang
        ditambahkan melalui Marketplace. Tidak ada yang ditulis ke tabel
        transaksi. Satu penggunaan pemantauan AML ditagih per skrining yang
        berhasil (aplikasi sandbox tidak ditagih).
      operationId: screenWallet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - wallet_address
              properties:
                wallet_address:
                  type: string
                  description: >-
                    Alamat kripto atau pengidentifikasi jaringan yang akan
                    diskrining. Harus cocok dengan jaringan yang dipilih
                    (misalnya alamat 40 karakter heksadesimal berawalan `0x`
                    untuk rantai EVM). Alias: `address`.
                  example: '0x94f1b9b64e2932f6a2db338f616844400cd58e8a'
                blockchain:
                  type: string
                  description: >-
                    Pengidentifikasi jaringan opsional. Jika diabaikan, jaringan
                    dibaca 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 mengabaikan `blockchain` untuk
                    alamat tersebut akan menghasilkan respons 422 dengan
                    kandidat jaringan di `candidate_chains`. Skrining terkelola
                    mendukung BTC, ETH, LTC, XRP, BCH, DOGE, TRX, SOL, MATIC,
                    BNB, BASE (Base), OP (Optimism), ARB (Arbitrum One), AVAX
                    (Avalanche C-Chain), ADA (Cardano), XLM (Stellar), dan HBAR
                    (Hedera). USDT dan USDC adalah alias lama Ethereum, bukan
                    pencarian multi-jaringan. Cakupan penyedia terhubung
                    bervariasi. LIGHTNING memerlukan penyedia terhubung yang
                    didukung. CELO (Celo), MODE (Mode), dan PLUME (Plume)
                    diskrining melalui akun TRM Labs yang terhubung; skrining
                    terkelola menghasilkan respons 400 untuk ketiganya. Alias:
                    `currency`.
                  enum:
                    - BTC
                    - LIGHTNING
                    - ETH
                    - LTC
                    - XRP
                    - BCH
                    - DOGE
                    - TRX
                    - SOL
                    - MATIC
                    - BNB
                    - USDT
                    - USDC
                    - BASE
                    - OP
                    - ARB
                    - AVAX
                    - ADA
                    - XLM
                    - HBAR
                    - CELO
                    - MODE
                    - PLUME
                  example: ETH
                direction:
                  type: string
                  description: >-
                    Opsional. Menentukan apakah alamat diskrining sebagai pihak
                    lawan masuk/inbound (deposit) atau keluar/outbound
                    (penarikan). Menerima `inbound`, `outbound`, `deposit`, atau
                    `withdrawal`. Defaultnya adalah skrining pra-transfer netral
                    jika dihilangkan. Nilai ini diteruskan ke penyedia hanya
                    sebagai konteks; tidak mengubah `risk_score`, `severity`,
                    atau rincian `source_of_funds`/`destination_of_funds` yang
                    dikembalikan, yang keduanya selalu dikembalikan terlepas
                    dari `direction`. Oleh karena itu, mengubah atau
                    menghilangkan `direction` tidak memerlukan skrining ulang
                    alamat.
                  enum:
                    - inbound
                    - outbound
                    - deposit
                    - withdrawal
            example:
              wallet_address: '0x94f1b9b64e2932f6a2db338f616844400cd58e8a'
              blockchain: ETH
      responses:
        '200':
          description: Hasil skrining dompet yang dinormalisasi.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletScreeningResult'
              example:
                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
                    amount_usd: 9813695
                    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
                    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
                    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
                    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
                    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>
        '400':
          description: >-
            Kesalahan validasi — alamat dompet salah format, `wallet_address`
            tidak ada, `blockchain` tidak didukung, `blockchain` dihilangkan
            untuk alamat yang formatnya tidak menyebutkan jaringan, atau
            LIGHTNING tanpa koneksi Marketplace BYOK Elliptic atau Chainalysis.
        '401':
          description: '`x-api-key` tidak ada atau tidak valid.'
        '409':
          description: >-
            Tidak ada penyedia AML yang dikonfigurasi untuk aplikasi, atau
            penyedia yang dikonfigurasi belum mendukung skrining dompet.
            Konfigurasikan pemantauan transaksi terlebih dahulu.
        '422':
          description: >-
            `blockchain` dihilangkan untuk alamat `0x`, yang digunakan bersama
            oleh setiap jaringan EVM. Tidak ada yang diskrining atau ditagih;
            kirim ulang dengan `blockchain` diatur ke salah satu dari
            `candidate_chains`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  blockchain:
                    type: array
                    items:
                      type: string
                    example:
                      - >-
                        A 0x address is valid on every EVM chain. Send
                        blockchain as one of: ETH, BNB, MATIC, BASE, ARB, OP,
                        CELO, MODE, PLUME.
                  candidate_chains:
                    type: array
                    items:
                      type: string
                    example:
                      - ETH
                      - BNB
                      - MATIC
                      - BASE
                      - ARB
                      - OP
                      - CELO
                      - MODE
                      - PLUME
        '502':
          description: Penyedia AML tidak dapat menyelesaikan skrining. Coba lagi nanti.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            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"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.wallet_screening.screen(
                wallet_address="0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
                blockchain="ETH",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.walletScreening.screen({
              wallet_address: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
              blockchain: "ETH",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.WalletScreening.Screen(ctx, didit.WalletScreeningScreenParams{\n\tWalletAddress: \"0x94f1b9b64e2932f6a2db338f616844400cd58e8a\",\n\tBlockchain:    didit.Some(didit.WalletScreeningScreenParamsBlockchain(\"ETH\")),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.WalletScreeningScreenParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.walletScreening().screen(WalletScreeningScreenParams.builder()
                    .walletAddress("0x94f1b9b64e2932f6a2db338f616844400cd58e8a")
                    .blockchain(WalletScreeningScreenParams.Blockchain.of("ETH"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->walletScreening->screen([
                'wallet_address' => '0x94f1b9b64e2932f6a2db338f616844400cd58e8a',
                'blockchain' => 'ETH',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.wallet_screening.screen(
              wallet_address: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
              blockchain: "ETH"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.WalletScreening.ScreenAsync(new
            WalletScreeningScreenParams

            {
                WalletAddress = "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
                Blockchain = new WalletScreeningScreenParamsBlockchain("ETH"),
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    WalletScreeningResult:
      type: object
      properties:
        provider:
          type: string
          description: >-
            Penyedia yang melakukan skrining (misalnya `merklescience`,
            `crystal`).
        screening_type:
          type: string
          enum:
            - WALLET_SCREENING
          description: Selalu `WALLET_SCREENING` untuk endpoint ini.
        risk_score:
          type: integer
          description: >-
            Skor risiko 0-100 yang dinormalisasi. Nilai lebih tinggi berarti
            paparan lebih besar terhadap entitas berisiko. Merkle Science
            menilai alamat 0-5, yang dipetakan ke 0, 15, 35, 55, 75, atau 95.
        severity:
          type: string
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Kelompok risiko diturunkan dari `risk_score`: `0-9` UNKNOWN, `10-39`
            LOW, `40-69` MEDIUM, `70-89` HIGH, `90-100` CRITICAL. `UNKNOWN`
            adalah rentang terendah, bukan status tanpa data yang terpisah:
            `risk_score` 0 (kasus alamat bersih yang umum) berarti tidak ada
            penilaian buruk, sedangkan skor bukan nol dalam rentang 1-9 adalah
            sinyal nyata tetapi di bawah LOW - baca `risk_score`, bukan hanya
            kelompoknya. Jangan pernah memperlakukan `UNKNOWN` sebagai indikasi
            afirmatif bahwa risikonya rendah atau penilaian bersih; jangan
            menampilkannya sebagai lolos.
        status:
          type: string
          enum:
            - SCREENED
            - PENDING
            - ERROR
          description: Status hasil skrining.
        summary:
          type: string
          description: Ringkasan hasil skrining yang dapat dibaca manusia.
        wallet_address:
          type: string
          description: Alamat yang diskrining, dikembalikan apa adanya.
        transaction_hash:
          type: string
          nullable: true
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            `null` pada hasil skrining dompet.
        blockchain:
          type: string
          description: Blockchain yang diskrining.
        block_timestamp:
          type: string
          nullable: true
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            `null` pada hasil skrining dompet.
        total_value_usd:
          type: number
          nullable: true
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            `null` pada hasil skrining dompet.
        fee_usd:
          type: number
          nullable: true
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            `null` pada hasil skrining dompet.
        sender_rows:
          type: array
          items:
            type: object
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            kosong pada hasil skrining dompet.
        receiver_rows:
          type: array
          items:
            type: object
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            kosong pada hasil skrining dompet.
        transaction_flows:
          type: array
          items:
            type: object
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            kosong pada hasil skrining dompet.
        transaction_flows_status:
          type: string
          nullable: true
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            `null` pada hasil skrining dompet.
        transaction_flows_error:
          type: string
          nullable: true
          description: >-
            Kolom skrining transaksi, digunakan bersama struktur hasil. Selalu
            `null` pada hasil skrining dompet.
        source_of_funds:
          type: array
          description: >-
            Dari mana alamat tersebut menerima dana, diatribusikan berdasarkan
            entitas. Setiap entri merupakan rincian eksposur.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Kategori risiko yang dinormalisasi, misalnya
                  `exchange_licensed`, `dex`, `defi`, `payment_processor`,
                  `mixer`, `darknet_market`, `sanctioned`, `stolen_funds`,
                  `high_risk_exchange`.
              percentage:
                type: number
                description: Porsi total paparan arah tersebut, 0-100.
              amount_usd:
                type: number
                nullable: true
                description: Nilai USD yang diatribusikan ke entitas ini.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nama entitas yang diatribusikan, misalnya bursa, mixer, atau
                  kelompok yang terkena sanksi.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Tipe entitas penyedia (misalnya `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Subtipe yang lebih terperinci (misalnya `Mandatory KYC and
                  AML`, `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Jumlah hop ke entitas (1 untuk pihak lawan langsung), jika
                  penyedia melaporkannya. Selalu `null` untuk Merkle Science,
                  yang hanya melaporkan apakah eksposur bersifat langsung atau
                  tidak langsung: gunakan `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, sebagaimana penyedia memberi
                  label pada entitas.
              is_direct:
                type: boolean
                description: True saat `exposure_type` bernilai `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Apakah dana berasal dari (`incoming`) atau dikirim ke
                  (`outgoing`) entitas ini.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: >-
                  Eksposur `direct` (1 lompatan) atau `indirect`
                  (multi-lompatan).
              provider_entity_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk entitas tersebut.
              provider_entity_type_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  Negara utama entitas berdasarkan ISO 3166-1 alpha-2. Kosong
                  atau `null` ketika penyedia tidak mengetahuinya.
              raw_amount:
                type: number
                nullable: true
                description: >-
                  Jumlah dalam unit aset itu sendiri, saat penyedia
                  melaporkannya.
              raw_currency:
                type: string
                nullable: true
                description: Satuan dari `raw_amount`, saat penyedia melaporkannya.
        destination_of_funds:
          type: array
          description: >-
            Ke mana alamat tersebut mengirim dana, diatribusikan berdasarkan
            entitas. Bentuk item sama seperti `source_of_funds` dengan
            `exposure_direction` = `outgoing`.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Kategori risiko yang dinormalisasi, misalnya
                  `exchange_licensed`, `dex`, `defi`, `payment_processor`,
                  `mixer`, `darknet_market`, `sanctioned`, `stolen_funds`,
                  `high_risk_exchange`.
              percentage:
                type: number
                description: Porsi total paparan arah tersebut, 0-100.
              amount_usd:
                type: number
                nullable: true
                description: Nilai USD yang diatribusikan ke entitas ini.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nama entitas yang diatribusikan, misalnya bursa, mixer, atau
                  kelompok yang terkena sanksi.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Tipe entitas penyedia (misalnya `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Subtipe yang lebih terperinci (misalnya `Mandatory KYC and
                  AML`, `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Jumlah hop ke entitas (1 untuk pihak lawan langsung), jika
                  penyedia melaporkannya. Selalu `null` untuk Merkle Science,
                  yang hanya melaporkan apakah eksposur bersifat langsung atau
                  tidak langsung: gunakan `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, sebagaimana penyedia memberi
                  label pada entitas.
              is_direct:
                type: boolean
                description: True saat `exposure_type` bernilai `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Apakah dana berasal dari (`incoming`) atau dikirim ke
                  (`outgoing`) entitas ini.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: >-
                  Eksposur `direct` (1 lompatan) atau `indirect`
                  (multi-lompatan).
              provider_entity_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk entitas tersebut.
              provider_entity_type_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  Negara utama entitas berdasarkan ISO 3166-1 alpha-2. Kosong
                  atau `null` ketika penyedia tidak mengetahuinya.
              raw_amount:
                type: number
                nullable: true
                description: >-
                  Jumlah dalam unit aset itu sendiri, saat penyedia
                  melaporkannya.
              raw_currency:
                type: string
                nullable: true
                description: Satuan dari `raw_amount`, saat penyedia melaporkannya.
        counterparty_connections:
          type: array
          description: >-
            Entitas yang diatribusikan penyedia ke alamat yang diskrining. Untuk
            Merkle Science, entitas ini berasal dari tag pemilik dan pengguna
            alamat itu sendiri, sehingga entitas yang sama dapat muncul dua
            kali, dan tidak membawa aliran dana: `received_usd`, `sent_usd`,
            `received_hops`, dan `sent_hops` bernilai `null` serta `percentage`
            adalah 0. Jangan menentukan rute berdasarkan `risk_level` atau
            `is_direct` di sini: gunakan `sanctions_hit`,
            `dominant_risk_category`, dan `risk_factors[].is_high_risk` untuk
            keputusan akhir, serta `exposure_type` di
            `source_of_funds`/`destination_of_funds` untuk menentukan apakah
            alirannya langsung.
          items:
            type: object
            properties:
              entity_name:
                type: string
                nullable: true
                description: Nama entitas yang diatribusikan.
              entity_type:
                type: string
                nullable: true
                description: Tipe entitas penyedia.
              entity_subtype:
                type: string
                nullable: true
                description: Subtipe entitas penyedia.
              risk_level:
                type: string
                description: >-
                  Huruf kecil dan bergantung pada penyedia. Untuk Merkle
                  Science, ini adalah tingkat risiko 0-5 milik alamat itu
                  sendiri (`no_risk`, `low`, `medium_low`, `medium`, `high`,
                  `critical`), dinaikkan ke `high` jika kategori entitas
                  berisiko tinggi; ini bukan penilaian terpisah dari entitas.
              categories:
                type: array
                items:
                  type: string
                description: Kategori risiko entitas yang dinormalisasi.
              received_usd:
                type: number
                nullable: true
                description: USD yang diterima dari entitas, jika dilaporkan oleh penyedia.
              sent_usd:
                type: number
                nullable: true
                description: USD yang dikirimkan ke entitas, jika dilaporkan oleh penyedia.
              received_hops:
                type: integer
                nullable: true
                description: Hop ke entitas di sisi penerima, jika penyedia melaporkannya.
              sent_hops:
                type: integer
                nullable: true
                description: Hop ke entitas di sisi pengirim, jika penyedia melaporkannya.
              percentage:
                type: number
                description: >-
                  Porsi paparan alamat tersebut, jika penyedia melaporkannya;
                  jika tidak, 0.
              is_direct:
                type: boolean
                description: >-
                  Selalu `true` untuk Merkle Science, yang koneksinya berupa
                  atribusi alih-alih pihak lawan.
              country:
                type: string
                nullable: true
                description: Negara entitas, jika diketahui.
              provider_entity_id:
                type: string
                nullable: true
                description: Pengenal milik penyedia sendiri untuk entitas tersebut.
        network_nodes:
          type: array
          items:
            type: object
          description: >-
            Node graf paparan untuk skrining transaksi. Kosong pada hasil
            skrining dompet.
        network_edges:
          type: array
          items:
            type: object
          description: >-
            Sisi graf paparan untuk skrining transaksi. Kosong pada hasil
            skrining dompet.
        sanctions_hit:
          type: boolean
          description: >-
            True jika alamat memiliki paparan sanksi langsung atau tidak
            langsung.
        pep_counterparty:
          type: boolean
          description: >-
            Paparan Politically Exposed Person (PEP). `null` jika tidak ada
            temuan PEP yang tersedia, yang merupakan semua hasil saat ini karena
            tidak ada penyedia yang melaporkannya; `false` hanya untuk hasil
            skrining negatif yang eksplisit. Jangan mengartikan `null` sebagai
            pemeriksaan PEP yang telah selesai.
          nullable: true
        dominant_risk_category:
          type: string
          nullable: true
          description: >-
            Kategori berisiko tinggi dengan bobot tertinggi, atau `null` jika
            tidak ada yang dominan (misalnya `sanctioned`, `mixer`,
            `stolen_funds`).
        risk_factors:
          type: array
          description: >-
            Penjelasan berperingkat untuk `risk_score`: faktor apa yang
            menghasilkan keputusan ini. Penyedia menilai alamat berdasarkan
            model mereka sendiri dan hanya mengembalikan keputusan (Merkle
            Science mengembalikan bilangan bulat 0-5), sehingga skor saja tidak
            dapat ditindaklanjuti. Diurutkan dari risiko tinggi terlebih dahulu,
            kemudian berdasarkan nilai yang melewati setiap faktor, dibatasi
            hingga lima yang terkuat; `source_of_funds` dan
            `destination_of_funds` selalu memuat rincian lengkap. `risk_score`
            yang tinggi tanpa entri `is_high_risk` berarti penyedia tidak
            melaporkan adanya kecocokan sanksi atau entitas yang diatribusikan
            dan menilai alamat murni berdasarkan model eksposurnya sendiri -
            `summary` menyatakan hal ini secara eksplisit.
          items:
            type: object
            properties:
              source:
                type: string
                enum:
                  - attribution
                  - exposure
                description: >-
                  `attribution` adalah keterangan penyedia mengenai alamat itu
                  sendiri (label atau clusternya sendiri); `exposure` adalah ke
                  mana dananya sebenarnya berpindah.
              category:
                type: string
                description: >-
                  Kategori risiko yang dinormalisasi, kosakata yang sama dengan
                  rincian paparan.
              label:
                type: string
                description: >-
                  Rumusan kata penyedia sendiri untuk faktor (misalnya `Gambling
                  / Crypto only`), yang juga akan Anda lihat di konsol penyedia.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Entitas yang diatribusikan di balik faktor pendorong, misalnya
                  situs judi atau bursa.
              direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                  - unknown
                  - attribution
                description: >-
                  Arah aliran dana, `attribution` saat pemicunya adalah tag
                  milik alamat itu sendiri, atau `unknown` saat penyedia tidak
                  melaporkan arah.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                  - unknown
                  - attribution
                description: >-
                  `direct` (1 hop) atau `indirect` (multi-hop), `attribution`
                  untuk tag alamat itu sendiri, atau `unknown` ketika penyedia
                  tidak menyatakan berapa hop jarak pihak lawan. Perlakukan
                  `unknown` sebagai tidak terklasifikasi, bukan sebagai
                  `direct`.
              amount_usd:
                type: number
                format: float
                nullable: true
                description: Nilai USD yang diatribusikan ke faktor pendorong ini.
              percentage:
                type: number
                format: float
                description: >-
                  Porsi dari TOTAL volume yang diskrining pada alamat tersebut,
                  gabungan kedua arah - tidak seperti `percentage` di dalam
                  `source_of_funds`/`destination_of_funds`, yang dinormalisasi
                  per arah. Dapat dibandingkan dan dijumlahkan di seluruh
                  daftar.
              is_high_risk:
                type: boolean
                description: >-
                  Apakah kategori ini termasuk yang diperlakukan Didit sebagai
                  berisiko tinggi (`sanctioned`, `mixer`, `stolen_funds`,
                  `ransomware`, `scam`, `darknet_market`, `terrorist_financing`,
                  `child_exploitation`, `hacked_exchange`, `high_risk_exchange`,
                  `seized_funds`).
              description:
                type: string
                description: >-
                  Representasi satu baris dari faktor pendorong, misalnya `9.01%
                  indirect outgoing exposure to Gambling / Crypto only (Example
                  Gambling)`.
        raw_response:
          type: object
          additionalProperties: true
          description: >-
            Payload milik penyedia sendiri. Formatnya spesifik untuk tiap
            penyedia dan dapat berubah tanpa pemberitahuan: baca kolom yang
            telah dinormalisasi daripada menguraikannya.
        report_signature:
          type: string
          description: >-
            Tanda tangan HMAC-SHA256 tidak transparan atas hasil persis ini,
            dengan cakupan ke aplikasi Anda. Tidak memiliki arti tersendiri —
            kirim ulang seluruh isi respons, tanpa diubah dan termasuk kolom
            ini, ke `POST /v3/wallet-screening/pdf/` untuk merendernya sebagai
            PDF. Endpoint PDF menolak permintaan dengan kode `400` jika
            `report_signature` tidak ada atau jika ada kolom bertanda tangan
            (misalnya `risk_score`, `severity`, `sanctions_hit`) yang diubah
            sebelum dikirim ulang.
      required:
        - provider
        - screening_type
        - risk_score
        - severity
        - status
        - summary
        - wallet_address
        - blockchain
        - sanctions_hit
        - dominant_risk_category
        - source_of_funds
        - destination_of_funds
        - counterparty_connections
        - report_signature
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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