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

# Filtrage des portefeuilles crypto : API AML à la demande

> Filtrez une adresse de portefeuille crypto avec Didit : risque AML, sanctions, origine des fonds. Sans transaction. Dès $0.02 par appel.



Prompt de l'API Screen Wallet
        Copier le prompt dans le presse-papiers



      
      

\<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>



      
      

Coller dans



## OpenAPI

````yaml fr/openapi-25.json POST /v3/wallet-screening/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/wallet-screening/:
    post:
      tags:
        - Transactions
      summary: Filtrer une adresse
      description: >-
        Exécuter un filtrage AML à la demande pour un portefeuille/adresse
        crypto unique sans créer de transaction. Résout le fournisseur d'analyse
        blockchain configuré de votre application, filtre l'adresse de manière
        synchrone et renvoie le résultat de risque normalisé. LIGHTNING est
        disponible uniquement avec une connexion BYOK Elliptic ou Chainalysis
        ajoutée via le Marketplace. Rien n'est écrit dans la table des
        transactions. Une utilisation de surveillance AML est facturée par
        filtrage réussi (les applications en sandbox ne sont pas facturées).
      operationId: screenWallet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - wallet_address
              properties:
                wallet_address:
                  type: string
                  description: "L'adresse crypto ou l'identifiant réseau à soumettre au filtrage. Doit correspondre au réseau sélectionné (par ex. une adresse de 40 caractères hexadécimaux préfixée par `0x` pour les chaînes EVM). Alias\_: `address`."
                  example: '0x94f1b9b64e2932f6a2db338f616844400cd58e8a'
                blockchain:
                  type: string
                  description: >-
                    Identifiant de réseau optionnel. En cas d'omission, le
                    réseau est déduit du format de l'adresse : les adresses
                    `bc1`, `1` et `3` correspondent à Bitcoin (BTC), les
                    adresses `T` à Tron (TRX) et les clés publiques en base58 à
                    Solana (SOL). Une adresse `0x` est valide sur tous les
                    réseaux EVM ; omettre `blockchain` pour celle-ci renvoie une
                    réponse 422 avec les réseaux candidats dans
                    `candidate_chains`. Le filtrage géré prend en charge 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) et HBAR (Hedera). USDT et USDC
                    sont des alias Ethereum historiques, et non des recherches
                    multiréseaux. La couverture des fournisseurs connectés
                    varie. LIGHTNING nécessite un fournisseur connecté pris en
                    charge. CELO (Celo), MODE (Mode) et PLUME (Plume) font
                    l'objet d'un filtrage via un compte TRM Labs connecté ; le
                    filtrage géré renvoie une réponse 400 pour ceux-ci. 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: >-
                    Facultatif. Indique si l'adresse est filtrée en tant que
                    contrepartie entrante (dépôt) ou sortante (retrait). Accepte
                    `inbound`, `outbound`, `deposit` ou `withdrawal`. Par
                    défaut, un filtrage pré-transfert neutre est appliqué en cas
                    d'omission. Cette valeur est transmise au fournisseur
                    uniquement à titre de contexte ; elle ne modifie pas les
                    valeurs retournées `risk_score`, `severity`, ni la
                    ventilation `source_of_funds`/`destination_of_funds`, qui
                    sont toujours retournées toutes les deux, quelle que soit la
                    valeur de `direction`. Modifier ou omettre `direction` ne
                    nécessite donc pas de refiltrer une adresse.
                  enum:
                    - inbound
                    - outbound
                    - deposit
                    - withdrawal
            example:
              wallet_address: '0x94f1b9b64e2932f6a2db338f616844400cd58e8a'
              blockchain: ETH
      responses:
        '200':
          description: Le résultat normalisé du filtrage des portefeuilles.
          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: >-
            Erreur de validation — adresse de portefeuille mal formée,
            `wallet_address` manquant, `blockchain` non prise en charge,
            `blockchain` omise pour une adresse dont le format n'indique aucun
            réseau, ou LIGHTNING sans connexion BYOK Marketplace à Elliptic ou
            Chainalysis.
        '401':
          description: '`x-api-key` manquant ou invalide.'
        '409':
          description: >-
            Aucun fournisseur AML n'est configuré pour l'application, ou le
            fournisseur configuré ne prend pas encore en charge le filtrage des
            portefeuilles. Configurez d'abord la surveillance des transactions.
        '422':
          description: >-
            `blockchain` est omis pour une adresse en `0x`, que tous les réseaux
            EVM partagent. Rien n'est filtré ni facturé ; renvoyez la requête
            avec `blockchain` défini sur l'une des valeurs de
            `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: >-
            Le fournisseur AML n'a pas pu effectuer le filtrage. Réessayez plus
            tard.
      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: >-
            Fournisseur ayant effectué le filtrage (par ex. `merklescience`,
            `crystal`).
        screening_type:
          type: string
          enum:
            - WALLET_SCREENING
          description: Toujours `WALLET_SCREENING` pour cet endpoint.
        risk_score:
          type: integer
          description: >-
            Score de risque normalisé de 0 à 100. Une valeur plus élevée indique
            une plus forte exposition à des entités à risque. Merkle Science
            note une adresse de 0 à 5, ce qui correspond à 0, 15, 35, 55, 75 ou
            95.
        severity:
          type: string
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Tranche de risque dérivée de `risk_score` : `0-9` UNKNOWN, `10-39`
            LOW, `40-69` MEDIUM, `70-89` HIGH, `90-100` CRITICAL. `UNKNOWN` est
            la tranche la plus basse, pas un état distinct d'absence de données
            : un `risk_score` de 0 (le cas courant d'une adresse propre) indique
            l'absence d'évaluation défavorable, tandis qu'un score non nul dans
            la plage 1-9 est un signal réel mais inférieur à LOW - lisez le
            `risk_score`, pas seulement la tranche. Ne traitez jamais `UNKNOWN`
            comme une évaluation confirmée de faible risque ou sans risque ; ne
            l'affichez pas comme une validation.
        status:
          type: string
          enum:
            - SCREENED
            - PENDING
            - ERROR
          description: Statut du résultat du filtrage.
        summary:
          type: string
          description: Résumé lisible par l'utilisateur du résultat de filtrage.
        wallet_address:
          type: string
          description: L'adresse filtrée, renvoyée en écho.
        transaction_hash:
          type: string
          nullable: true
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Vaut toujours `null` sur un résultat de Filtrage des
            portefeuilles.
        blockchain:
          type: string
          description: La blockchain qui a été filtrée.
        block_timestamp:
          type: string
          nullable: true
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Vaut toujours `null` sur un résultat de Filtrage des
            portefeuilles.
        total_value_usd:
          type: number
          nullable: true
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Vaut toujours `null` sur un résultat de Filtrage des
            portefeuilles.
        fee_usd:
          type: number
          nullable: true
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Vaut toujours `null` sur un résultat de Filtrage des
            portefeuilles.
        sender_rows:
          type: array
          items:
            type: object
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Toujours vide sur un résultat de Filtrage des
            portefeuilles.
        receiver_rows:
          type: array
          items:
            type: object
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Toujours vide sur un résultat de Filtrage des
            portefeuilles.
        transaction_flows:
          type: array
          items:
            type: object
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Toujours vide sur un résultat de Filtrage des
            portefeuilles.
        transaction_flows_status:
          type: string
          nullable: true
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Vaut toujours `null` sur un résultat de Filtrage des
            portefeuilles.
        transaction_flows_error:
          type: string
          nullable: true
          description: >-
            Champ de filtrage de transaction, partagé avec la structure du
            résultat. Vaut toujours `null` sur un résultat de Filtrage des
            portefeuilles.
        source_of_funds:
          type: array
          description: >-
            Provenance des fonds reçus par l'adresse, attribués par entité.
            Chaque entrée est une ventilation de l'exposition.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Catégorie de risque normalisée, par exemple
                  `exchange_licensed`, `dex`, `defi`, `payment_processor`,
                  `mixer`, `darknet_market`, `sanctioned`, `stolen_funds`,
                  `high_risk_exchange`.
              percentage:
                type: number
                description: Part de l'exposition totale du sens concerné, de 0 à 100.
              amount_usd:
                type: number
                nullable: true
                description: Valeur en USD attribuée à cette entité.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nom de l'entité attribuée, par exemple une plateforme
                  d'échange, un mixeur ou un groupe sous sanctions.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Type d'entité du fournisseur (par ex. `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Sous-type plus granulaire (par ex. `Mandatory KYC and AML`,
                  `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Nombre de sauts jusqu'à l'entité (1 pour une contrepartie
                  directe), lorsque le fournisseur en signale un. Toujours
                  `null` pour Merkle Science, qui indique uniquement si
                  l'exposition est directe ou indirecte : utilisez
                  `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, selon la façon dont le
                  fournisseur qualifie l'entité.
              is_direct:
                type: boolean
                description: Vrai lorsque `exposure_type` est `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Indique si les fonds proviennent de (`incoming`) ou ont été
                  envoyés vers (`outgoing`) cette entité.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: Exposition `direct` (1 saut) ou `indirect` (multisauts).
              provider_entity_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour l'entité.
              provider_entity_type_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  Pays principal ISO 3166-1 alpha-2 de l'entité. Vide ou `null`
                  lorsque le fournisseur ne le connaît pas.
              raw_amount:
                type: number
                nullable: true
                description: >-
                  Montant dans l'unité propre de l'actif, lorsque le fournisseur
                  le transmet.
              raw_currency:
                type: string
                nullable: true
                description: Unité de `raw_amount`, lorsque le fournisseur l'indique.
        destination_of_funds:
          type: array
          description: >-
            Destination des fonds envoyés par l'adresse, attribués par entité.
            Même structure d'élément que `source_of_funds` avec
            `exposure_direction` = `outgoing`.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Catégorie de risque normalisée, par exemple
                  `exchange_licensed`, `dex`, `defi`, `payment_processor`,
                  `mixer`, `darknet_market`, `sanctioned`, `stolen_funds`,
                  `high_risk_exchange`.
              percentage:
                type: number
                description: Part de l'exposition totale du sens concerné, de 0 à 100.
              amount_usd:
                type: number
                nullable: true
                description: Valeur en USD attribuée à cette entité.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nom de l'entité attribuée, par exemple une plateforme
                  d'échange, un mixeur ou un groupe sous sanctions.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Type d'entité du fournisseur (par ex. `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Sous-type plus granulaire (par ex. `Mandatory KYC and AML`,
                  `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Nombre de sauts jusqu'à l'entité (1 pour une contrepartie
                  directe), lorsque le fournisseur en signale un. Toujours
                  `null` pour Merkle Science, qui indique uniquement si
                  l'exposition est directe ou indirecte : utilisez
                  `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, selon la façon dont le
                  fournisseur qualifie l'entité.
              is_direct:
                type: boolean
                description: Vrai lorsque `exposure_type` est `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Indique si les fonds proviennent de (`incoming`) ou ont été
                  envoyés vers (`outgoing`) cette entité.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: Exposition `direct` (1 saut) ou `indirect` (multisauts).
              provider_entity_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour l'entité.
              provider_entity_type_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  Pays principal ISO 3166-1 alpha-2 de l'entité. Vide ou `null`
                  lorsque le fournisseur ne le connaît pas.
              raw_amount:
                type: number
                nullable: true
                description: >-
                  Montant dans l'unité propre de l'actif, lorsque le fournisseur
                  le transmet.
              raw_currency:
                type: string
                nullable: true
                description: Unité de `raw_amount`, lorsque le fournisseur l'indique.
        counterparty_connections:
          type: array
          description: >-
            Entités auxquelles le fournisseur attribue l'adresse filtrée. Pour
            Merkle Science, celles-ci proviennent des propres tags de
            propriétaire et d'utilisateur de l'adresse, la même entité peut donc
            apparaître deux fois, et elles ne comportent aucun flux de fonds :
            `received_usd`, `sent_usd`, `received_hops` et `sent_hops` sont
            `null` et `percentage` est 0. N'effectuez pas de routage sur
            `risk_level` ou `is_direct` ici : utilisez `sanctions_hit`,
            `dominant_risk_category` et `risk_factors[].is_high_risk` pour le
            verdict, et `exposure_type` dans
            `source_of_funds`/`destination_of_funds` pour le caractère direct.
          items:
            type: object
            properties:
              entity_name:
                type: string
                nullable: true
                description: Nom de l'entité attribuée.
              entity_type:
                type: string
                nullable: true
                description: Type d'entité du fournisseur.
              entity_subtype:
                type: string
                nullable: true
                description: Sous-type d'entité du fournisseur.
              risk_level:
                type: string
                description: >-
                  En minuscules et dépendant du fournisseur. Pour Merkle
                  Science, il s'agit du niveau de risque propre à l'adresse de 0
                  à 5 (`no_risk`, `low`, `medium_low`, `medium`, `high`,
                  `critical`), relevé à `high` lorsque la catégorie de l'entité
                  est à haut risque ; il ne s'agit pas d'un niveau distinct
                  propre à l'entité.
              categories:
                type: array
                items:
                  type: string
                description: Catégories de risque normalisées de l'entité.
              received_usd:
                type: number
                nullable: true
                description: >-
                  Montant en USD reçu de l'entité, lorsque le fournisseur le
                  signale.
              sent_usd:
                type: number
                nullable: true
                description: >-
                  Montant en USD envoyé à l'entité, lorsque le fournisseur le
                  signale.
              received_hops:
                type: integer
                nullable: true
                description: >-
                  Sauts jusqu'à l'entité du côté récepteur, lorsque le
                  fournisseur les signale.
              sent_hops:
                type: integer
                nullable: true
                description: >-
                  Sauts jusqu'à l'entité du côté émetteur, lorsque le
                  fournisseur les signale.
              percentage:
                type: number
                description: >-
                  Part de l'exposition de l'adresse, lorsque le fournisseur la
                  signale ; sinon 0.
              is_direct:
                type: boolean
                description: >-
                  Toujours `true` pour Merkle Science, dont les connexions sont
                  des attributions plutôt que des contreparties.
              country:
                type: string
                nullable: true
                description: Pays de l'entité, lorsqu'il est connu.
              provider_entity_id:
                type: string
                nullable: true
                description: L'identifiant propre au fournisseur pour l'entité.
        network_nodes:
          type: array
          items:
            type: object
          description: >-
            Nœuds du graphe d'exposition pour le filtrage des transactions. Vide
            pour un résultat de filtrage des portefeuilles.
        network_edges:
          type: array
          items:
            type: object
          description: >-
            Arêtes du graphe d'exposition pour le filtrage des transactions.
            Vide pour un résultat de filtrage des portefeuilles.
        sanctions_hit:
          type: boolean
          description: >-
            Vrai si l'adresse a une exposition directe ou indirecte à des
            sanctions.
        pep_counterparty:
          type: boolean
          description: >-
            Exposition à une personne politiquement exposée. `null` lorsqu'aucun
            résultat PEP n'est disponible, ce qui est le cas de tous les
            résultats actuels car aucun fournisseur n'en signale ; `false`
            uniquement pour un résultat de filtrage explicitement négatif. Ne
            considérez pas `null` comme une vérification PEP terminée.
          nullable: true
        dominant_risk_category:
          type: string
          nullable: true
          description: >-
            Catégorie à haut risque ayant le poids le plus élevé, ou `null` si
            aucune n'est dominante (par exemple `sanctioned`, `mixer`,
            `stolen_funds`).
        risk_factors:
          type: array
          description: >-
            Explication classée de `risk_score` : ce qui a produit ce verdict.
            Les fournisseurs évaluent une adresse selon leur propre modèle et ne
            renvoient qu'un verdict (Merkle Science renvoie un entier de 0 à 5),
            de sorte que le score seul n'est pas exploitable. Les éléments sont
            classés par niveau de risque décroissant, puis selon la valeur ayant
            transité par chaque facteur déterminant, plafonnés aux cinq plus
            importants ; `source_of_funds` et `destination_of_funds` contiennent
            toujours la ventilation complète. Un `risk_score` élevé sans entrée
            `is_high_risk` signifie que le fournisseur n'a signalé aucune
            correspondance avec des sanctions ou une entité attribuée et a
            évalué l'adresse uniquement d'après son propre modèle d'exposition -
            `summary` l'indique explicitement.
          items:
            type: object
            properties:
              source:
                type: string
                enum:
                  - attribution
                  - exposure
                description: >-
                  `attribution` correspond à ce que le fournisseur indique être
                  l'adresse elle-même (son propre tag ou cluster) ; `exposure`
                  indique où ses fonds ont réellement transité.
              category:
                type: string
                description: >-
                  Catégorie de risque normalisée, même vocabulaire que la
                  répartition de l'exposition.
              label:
                type: string
                description: >-
                  La formulation propre au fournisseur pour le motif (par ex.
                  `Gambling / Crypto only`), correspondant à ce que vous verriez
                  également dans la console du fournisseur.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Entité attribuée à l'origine du facteur, par exemple un site
                  de jeux d'argent ou une plateforme d'échange.
              direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                  - unknown
                  - attribution
                description: >-
                  Direction du flux de fonds, `attribution` lorsque le facteur
                  déclenchant est l'étiquette propre à l'adresse, ou `unknown`
                  lorsque le fournisseur n'a pas indiqué de direction.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                  - unknown
                  - attribution
                description: >-
                  `direct` (1 saut) ou `indirect` (multisauts), `attribution`
                  pour le tag propre de l'adresse, ou `unknown` lorsque le
                  fournisseur n'a pas indiqué à combien de sauts se trouve la
                  contrepartie. Traitez `unknown` comme non classifié, et non
                  comme `direct`.
              amount_usd:
                type: number
                format: float
                nullable: true
                description: Valeur en USD attribuée à ce facteur.
              percentage:
                type: number
                format: float
                description: >-
                  Part du volume TOTAL filtré de l'adresse, les deux sens
                  combinés - contrairement au `percentage` dans
                  `source_of_funds`/`destination_of_funds`, qui est normalisé
                  par sens. Comparable et cumulable sur l'ensemble de la liste.
              is_high_risk:
                type: boolean
                description: >-
                  Indique si la catégorie fait partie de celles que Didit
                  considère comme à haut risque (`sanctioned`, `mixer`,
                  `stolen_funds`, `ransomware`, `scam`, `darknet_market`,
                  `terrorist_financing`, `child_exploitation`,
                  `hacked_exchange`, `high_risk_exchange`, `seized_funds`).
              description:
                type: string
                description: >-
                  Rendu sur une seule ligne de l'élément déterminant, par ex.
                  `9.01% indirect outgoing exposure to Gambling / Crypto only
                  (Example Gambling)`.
        raw_response:
          type: object
          additionalProperties: true
          description: >-
            Le payload propre au fournisseur. Sa structure est spécifique au
            fournisseur et peut changer sans préavis : lisez les champs
            normalisés plutôt que de le parser.
        report_signature:
          type: string
          description: >-
            Signature HMAC-SHA256 opaque sur ce résultat exact, restreinte à
            votre application. Non significative en elle-même — republiez
            l'intégralité du corps de la réponse, sans modification et en
            incluant ce champ, vers `POST /v3/wallet-screening/pdf/` pour en
            faire le rendu sous forme de PDF. L'endpoint PDF rejette la requête
            avec `400` si `report_signature` est manquant ou si un champ signé
            (par exemple `risk_score`, `severity`, `sanctions_hit`) a été
            modifié avant la republication.
      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: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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