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

# Report PDF dello screening dei wallet: API

> Didit genera un PDF del risultato dello screening wallet ripostando il JSON dell'endpoint. Stateless, senza chiamate al provider né costi extra.



Prompt per Screen Wallet PDF
        Copia il prompt negli appunti



      
      

\<pre>

\`Render a previously returned on-demand wallet-screening result as a Didit-branded PDF, through the Didit Management API.

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

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

Goal:
\- Turn a wallet-screening JSON result into a downloadable PDF report. This is stateless: nothing is persisted, no provider is called again, and there is no additional billing.

Prerequisites:
\- You must already have the exact JSON body that POST /v3/wallet-screening/ returned, including its report_signature field. This endpoint does not accept a hand-built or edited payload.

Request body (application/json):
\- The full, unmodified response body from POST /v3/wallet-screening/ (or its console equivalent), including report_signature.

Example call:
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

Response:
\- Body is binary (application/pdf). DO NOT parse as JSON.
\- Content-Type: application/pdf
\- Content-Disposition: attachment; filename=wallet_screening_<address>.pdf

Failure modes:
\- 400 - the body is not a JSON object matching the wallet-screening result shape, or report_signature is missing or invalid (the result was edited, truncated, or hand-built instead of reposted verbatim).
\- 401 - missing or invalid x-api-key.

For the underlying screening call, see /management-api/transactions/screen-wallet.`

\</pre>



      
      

Incolla in

## Perché è senza statoLo screening autonomo dei wallet non scrive nulla nella tabella delle transazioni, quindi non esiste un record salvato da cui questo endpoint possa generare il report. Invece, ripubblichi il JSON esatto che `POST /v3/wallet-screening/` ti ha già restituito, e Didit trasforma quel payload in un PDF senza richiamare di nuovo un provider.## Il campo `report_signature`Ogni risposta di `POST /v3/wallet-screening/` ora include un campo `report_signature`: una firma opaca limitata alla tua applicazione. Questo endpoint la verifica prima di generare il PDF, così un chiamante non può modificare `risk_score`, `severity`, `sanctions_hit` o qualsiasi altro campo e ottenere un PDF dall'aspetto pulito, con il marchio Didit, per un risultato che Didit non ha mai prodotto.Ripubblica sempre il corpo completo della risposta **senza modifiche**, incluso `report_signature`. Riordinare le chiavi è consentito; modificare qualsiasi valore firmato no.```bash theme={null}
# 1. Run the screening and save the full response
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": "0x28c6c06298d514db089934071355e5743bf21d60", "blockchain": "ETH"}')

# 2. Repost it verbatim to render the PDF
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
```## FatturazioneNon viene effettuata alcuna chiamata al provider e non viene addebitato nulla: questo endpoint genera di nuovo il PDF di un risultato per cui hai già pagato quando hai chiamato `POST /v3/wallet-screening/`.## Errori| Stato | Significato |
| - | - |
| `400` | Il body non è un oggetto JSON conforme alla struttura del risultato di Screening dei wallet, oppure `report_signature` manca o non corrisponde ai campi ripubblicati. |
| `401` | `x-api-key` mancante o non valida. |## Passaggi successivi> [card] [Screening dei wallet](https://docs.didit.me/it/management-api/transactions/screen-wallet.md)
>
> Esegui lo Screening dei wallet su richiesta sottostante e ottieni il risultato JSON da ripubblicare qui.> [card] [Screening on-demand del wallet](https://docs.didit.me/it/transaction-monitoring/wallet-screening.md)
>
> Panoramica dell'endpoint autonomo di Screening dei wallet e del modello del risultato.


## OpenAPI

````yaml it/openapi-25.json POST /v3/wallet-screening/pdf/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/wallet-screening/pdf/:
    post:
      tags:
        - Transactions
      summary: Genera il risultato di uno screening dei wallet in formato PDF
      description: >-
        Complemento senza stato di `POST /v3/wallet-screening/`: invia
        nuovamente l'esatto corpo JSON restituito da quell'endpoint — compresa
        la `report_signature` aggiunta — e ricevi un PDF con marchio Didit dello
        stesso risultato. Nessun provider viene chiamato e nulla viene fatturato
        o memorizzato; questo esegue solo un nuovo rendering di un risultato già
        prodotto da Didit. La firma vincola il PDF a un risultato non
        modificato: la modifica di `risk_score`, `severity`, `sanctions_hit` o
        qualsiasi altro campo firmato prima del nuovo invio fallisce con `400`.
      operationId: screenWalletPdf
      requestBody:
        required: true
        description: >-
          L'oggetto JSON non modificato restituito da `POST
          /v3/wallet-screening/`, incluso `report_signature`.
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/WalletScreeningResult'
              required:
                - report_signature
              description: >-
                Stessa struttura della risposta di `POST /v3/wallet-screening/`
                — restituisci quel corpo della risposta esattamente così com'è,
                incluso `report_signature`.
      responses:
        '200':
          description: >-
            Il documento PDF renderizzato, restituito direttamente come binario
            `application/pdf` — non è presente alcun wrapper JSON.
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename=wallet_screening_{address}.pdf`, ricavato
                da `wallet_address` (o `transaction_hash`) nel risultato
                ripubblicato.
              schema:
                type: string
                example: >-
                  attachment;
                  filename=wallet_screening_0x28c6c06298d514db0899.pdf
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          description: >-
            Il body non è un oggetto JSON conforme alla struttura del risultato
            dello screening dei wallet, oppure `report_signature` è assente o
            non corrisponde ai campi ripubblicati (modificati o troncati prima
            della ripubblicazione).
          content:
            application/json:
              schema:
                type: object
              examples:
                Not an object:
                  value:
                    non_field_errors:
                      - >-
                        Expected a JSON object matching a wallet-screening
                        result.
                Missing or invalid signature:
                  value:
                    report_signature:
                      - >-
                        This wallet-screening result is missing or fails its
                        report signature - repost the exact JSON returned by the
                        wallet-screening endpoint, unmodified.
        '401':
          description: '`x-api-key` mancante o non valida.'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            # $RESULT is the saved JSON body from POST /v3/wallet-screening/

            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
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.wallet_screening.screen_pdf(
                provider="your-provider",
                screening_type="WALLET_SCREENING",
                risk_score=1,
                severity="UNKNOWN",
                status="SCREENED",
                summary="your-summary",
                wallet_address="your-wallet-address",
                blockchain="your-blockchain",
                source_of_funds=[{}],
                destination_of_funds=[{}],
                counterparty_connections=[{}],
                sanctions_hit=True,
                dominant_risk_category="your-dominant-risk-category",
                report_signature="your-report-signature",
            )
            with open("download.pdf", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await didit.walletScreening.screenPdf({
              provider: "your-provider",
              screening_type: "WALLET_SCREENING",
              risk_score: 1,
              severity: "UNKNOWN",
              status: "SCREENED",
              summary: "your-summary",
              wallet_address: "your-wallet-address",
              blockchain: "your-blockchain",
              source_of_funds: [{}],
              destination_of_funds: [{}],
              counterparty_connections: [{}],
              sanctions_hit: true,
              dominant_risk_category: "your-dominant-risk-category",
              report_signature: "your-report-signature",
            });

            await writeFile("download.pdf", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.WalletScreening.ScreenPDF(ctx, didit.WalletScreeningResultParam{\n\tProvider:                \"your-provider\",\n\tScreeningType:           \"WALLET_SCREENING\",\n\tRiskScore:               1,\n\tSeverity:                \"UNKNOWN\",\n\tStatus:                  \"SCREENED\",\n\tSummary:                 \"your-summary\",\n\tWalletAddress:           \"your-wallet-address\",\n\tBlockchain:              \"your-blockchain\",\n\tSourceOfFunds:           []didit.WalletScreeningResultParamSourceOfFunds{{}},\n\tDestinationOfFunds:      []didit.WalletScreeningResultParamDestinationOfFunds{{}},\n\tCounterpartyConnections: []didit.WalletScreeningResultParamCounterpartyConnections{{}},\n\tSanctionsHit:            true,\n\tDominantRiskCategory:    didit.String(\"your-dominant-risk-category\"),\n\tReportSignature:         \"your-report-signature\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import java.nio.file.Path;
            import java.util.List;
            import me.didit.Didit;
            import me.didit.types.WalletScreeningResult;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            client.walletScreening().screenPdf(WalletScreeningResult.builder()
                    .provider("your-provider")
                    .screeningType(WalletScreeningResult.ScreeningType.of("WALLET_SCREENING"))
                    .riskScore(1L)
                    .severity(WalletScreeningResult.Severity.of("UNKNOWN"))
                    .status(WalletScreeningResult.Status.of("SCREENED"))
                    .summary("your-summary")
                    .walletAddress("your-wallet-address")
                    .blockchain("your-blockchain")
                    .sourceOfFunds(List.of(WalletScreeningResult.SourceOfFunds.builder()
                            .build()))
                    .destinationOfFunds(List.of(WalletScreeningResult.DestinationOfFunds.builder()
                            .build()))
                    .counterpartyConnections(List.of(WalletScreeningResult.CounterpartyConnections.builder()
                            .build()))
                    .sanctionsHit(true)
                    .dominantRiskCategory("your-dominant-risk-category")
                    .reportSignature("your-report-signature")
                    .build())
                    .writeTo(Path.of("download.pdf"));
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

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

            $content = $didit->walletScreening->screenPdf([
                'provider' => 'your-provider',
                'screening_type' => 'WALLET_SCREENING',
                'risk_score' => 1,
                'severity' => 'UNKNOWN',
                'status' => 'SCREENED',
                'summary' => 'your-summary',
                'wallet_address' => 'your-wallet-address',
                'blockchain' => 'your-blockchain',
                'source_of_funds' => [[]],
                'destination_of_funds' => [[]],
                'counterparty_connections' => [[]],
                'sanctions_hit' => true,
                'dominant_risk_category' => 'your-dominant-risk-category',
                'report_signature' => 'your-report-signature',
            ]);
            $content->saveTo('download.pdf');
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            content = didit.wallet_screening.screen_pdf(
              provider: "your-provider",
              screening_type: "WALLET_SCREENING",
              risk_score: 1,
              severity: "UNKNOWN",
              status: "SCREENED",
              summary: "your-summary",
              wallet_address: "your-wallet-address",
              blockchain: "your-blockchain",
              source_of_funds: [{}],
              destination_of_funds: [{}],
              counterparty_connections: [{}],
              sanctions_hit: true,
              dominant_risk_category: "your-dominant-risk-category",
              report_signature: "your-report-signature"
            )
            File.binwrite("download.pdf", content)
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var content = await client.WalletScreening.ScreenPdfAsync(new
            WalletScreeningResult

            {
                Provider = "your-provider",
                ScreeningType = "WALLET_SCREENING",
                RiskScore = 1,
                Severity = "UNKNOWN",
                Status = "SCREENED",
                Summary = "your-summary",
                WalletAddress = "your-wallet-address",
                Blockchain = "your-blockchain",
                SourceOfFunds = new WalletScreeningResultSourceOfFunds[] { new() },
                DestinationOfFunds = new WalletScreeningResultDestinationOfFunds[] { new() },
                CounterpartyConnections = new WalletScreeningResultCounterpartyConnections[] { new() },
                SanctionsHit = true,
                DominantRiskCategory = "your-dominant-risk-category",
                ReportSignature = "your-report-signature",
            });

            await content.SaveToAsync("download.pdf");
components:
  schemas:
    WalletScreeningResult:
      type: object
      properties:
        provider:
          type: string
          description: >-
            Provider che ha eseguito lo screening (ad es. `merklescience`,
            `crystal`).
        screening_type:
          type: string
          enum:
            - WALLET_SCREENING
          description: Sempre `WALLET_SCREENING` per questo endpoint.
        risk_score:
          type: integer
          description: >-
            Punteggio di rischio normalizzato da 0 a 100. Un valore più alto
            indica una maggiore esposizione a entità a rischio. Merkle Science
            assegna a un indirizzo un punteggio da 0 a 5, mappato su 0, 15, 35,
            55, 75 o 95.
        severity:
          type: string
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Fascia di rischio derivata da `risk_score`: `0-9` UNKNOWN, `10-39`
            LOW, `40-69` MEDIUM, `70-89` HIGH, `90-100` CRITICAL. `UNKNOWN` è la
            fascia più bassa, non uno stato separato di assenza di dati: un
            `risk_score` pari a 0 (il caso comune di indirizzo pulito) indica
            l'assenza di valutazioni avverse, mentre un punteggio diverso da
            zero compreso tra 1 e 9 è un segnale reale ma inferiore a LOW: leggi
            il `risk_score`, non solo la fascia. Non considerare mai `UNKNOWN`
            come una valutazione affermativa di basso rischio o di esito
            positivo; non visualizzarlo come superato.
        status:
          type: string
          enum:
            - SCREENED
            - PENDING
            - ERROR
          description: Stato dell'esito dello screening.
        summary:
          type: string
          description: Riepilogo leggibile dall'utente del risultato dello screening.
        wallet_address:
          type: string
          description: L'indirizzo sottoposto a screening, restituito come conferma.
        transaction_hash:
          type: string
          nullable: true
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre `null` nel risultato dello screening dei
            wallet.
        blockchain:
          type: string
          description: La blockchain sottoposta a screening.
        block_timestamp:
          type: string
          nullable: true
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre `null` nel risultato dello screening dei
            wallet.
        total_value_usd:
          type: number
          nullable: true
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre `null` nel risultato dello screening dei
            wallet.
        fee_usd:
          type: number
          nullable: true
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre `null` nel risultato dello screening dei
            wallet.
        sender_rows:
          type: array
          items:
            type: object
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre vuoto nel risultato dello screening dei
            wallet.
        receiver_rows:
          type: array
          items:
            type: object
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre vuoto nel risultato dello screening dei
            wallet.
        transaction_flows:
          type: array
          items:
            type: object
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre vuoto nel risultato dello screening dei
            wallet.
        transaction_flows_status:
          type: string
          nullable: true
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre `null` nel risultato dello screening dei
            wallet.
        transaction_flows_error:
          type: string
          nullable: true
          description: >-
            Campo dello screening delle transazioni, condiviso con la struttura
            del risultato. Sempre `null` nel risultato dello screening dei
            wallet.
        source_of_funds:
          type: array
          description: >-
            Da dove l'indirizzo ha ricevuto fondi, attribuiti per entità. Ogni
            voce rappresenta una suddivisione dell'esposizione.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Categoria di rischio normalizzata, ad es. `exchange_licensed`,
                  `dex`, `defi`, `payment_processor`, `mixer`, `darknet_market`,
                  `sanctioned`, `stolen_funds`, `high_risk_exchange`.
              percentage:
                type: number
                description: Quota dell'esposizione totale della direzione, 0-100.
              amount_usd:
                type: number
                nullable: true
                description: Valore in USD attribuito a questa entità.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nome dell'entità attribuita, ad esempio un exchange, un mixer
                  o un gruppo sanzionato.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Tipo di entità del provider (ad es. `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Sottotipo più granulare (ad es. `Mandatory KYC and AML`,
                  `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Numero di passaggi (hop) verso l'entità (1 per una controparte
                  diretta), quando il provider ne segnala uno. Sempre `null` per
                  Merkle Science, che indica solo se l'esposizione è diretta o
                  indiretta: utilizza `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, come il provider etichetta
                  l'entità.
              is_direct:
                type: boolean
                description: True quando `exposure_type` è `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Indica se i fondi provenivano da (`incoming`) o sono andati a
                  (`outgoing`) questa entità.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: Esposizione `direct` (1 hop) o `indirect` (multi-hop).
              provider_entity_id:
                type: string
                nullable: true
                description: L'identificatore del provider per l'entità.
              provider_entity_type_id:
                type: string
                nullable: true
                description: L'identificatore del provider per `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: L'identificatore del provider per `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  Paese principale ISO 3166-1 alpha-2 dell'entità. Vuoto o
                  `null` se il fornitore non lo conosce.
              raw_amount:
                type: number
                nullable: true
                description: Importo nell'unità dell'asset, quando il fornitore lo riporta.
              raw_currency:
                type: string
                nullable: true
                description: Unità di `raw_amount`, quando segnalata dal provider.
        destination_of_funds:
          type: array
          description: >-
            A chi l'indirizzo ha inviato fondi, attribuiti per entità. Stessa
            struttura degli elementi di `source_of_funds` con
            `exposure_direction` = `outgoing`.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Categoria di rischio normalizzata, ad es. `exchange_licensed`,
                  `dex`, `defi`, `payment_processor`, `mixer`, `darknet_market`,
                  `sanctioned`, `stolen_funds`, `high_risk_exchange`.
              percentage:
                type: number
                description: Quota dell'esposizione totale della direzione, 0-100.
              amount_usd:
                type: number
                nullable: true
                description: Valore in USD attribuito a questa entità.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nome dell'entità attribuita, ad esempio un exchange, un mixer
                  o un gruppo sanzionato.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Tipo di entità del provider (ad es. `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Sottotipo più granulare (ad es. `Mandatory KYC and AML`,
                  `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Numero di passaggi (hop) verso l'entità (1 per una controparte
                  diretta), quando il provider ne segnala uno. Sempre `null` per
                  Merkle Science, che indica solo se l'esposizione è diretta o
                  indiretta: utilizza `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, come il provider etichetta
                  l'entità.
              is_direct:
                type: boolean
                description: True quando `exposure_type` è `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Indica se i fondi provenivano da (`incoming`) o sono andati a
                  (`outgoing`) questa entità.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: Esposizione `direct` (1 hop) o `indirect` (multi-hop).
              provider_entity_id:
                type: string
                nullable: true
                description: L'identificatore del provider per l'entità.
              provider_entity_type_id:
                type: string
                nullable: true
                description: L'identificatore del provider per `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: L'identificatore del provider per `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  Paese principale ISO 3166-1 alpha-2 dell'entità. Vuoto o
                  `null` se il fornitore non lo conosce.
              raw_amount:
                type: number
                nullable: true
                description: Importo nell'unità dell'asset, quando il fornitore lo riporta.
              raw_currency:
                type: string
                nullable: true
                description: Unità di `raw_amount`, quando segnalata dal provider.
        counterparty_connections:
          type: array
          description: >-
            Entità a cui il provider attribuisce l'indirizzo esaminato. Per
            Merkle Science queste provengono dai tag di proprietario e utente
            dell'indirizzo stesso, quindi la stessa entità può comparire due
            volte, e non riportano flussi di fondi: `received_usd`, `sent_usd`,
            `received_hops` e `sent_hops` sono `null` e `percentage` è 0. Non
            indirizzare qui in base a `risk_level` o `is_direct`: usa
            `sanctions_hit`, `dominant_risk_category` e
            `risk_factors[].is_high_risk` per l'esito, e `exposure_type` in
            `source_of_funds`/`destination_of_funds` per verificare se
            l'esposizione sia diretta.
          items:
            type: object
            properties:
              entity_name:
                type: string
                nullable: true
                description: Nome dell'entità attribuita.
              entity_type:
                type: string
                nullable: true
                description: Tipo di entità del provider.
              entity_subtype:
                type: string
                nullable: true
                description: Sottotipo di entità del provider.
              risk_level:
                type: string
                description: >-
                  In lettere minuscole e dipendente dal provider. Per Merkle
                  Science corrisponde al livello di rischio 0-5 dell'indirizzo
                  stesso (`no_risk`, `low`, `medium_low`, `medium`, `high`,
                  `critical`), innalzato ad `high` quando la categoria
                  dell'entità è ad alto rischio; non si tratta di una
                  valutazione separata dell'entità.
              categories:
                type: array
                items:
                  type: string
                description: Categorie di rischio normalizzate dell'entità.
              received_usd:
                type: number
                nullable: true
                description: USD ricevuti dall'entità, quando comunicati dal provider.
              sent_usd:
                type: number
                nullable: true
                description: USD inviati all'entità, quando comunicati dal provider.
              received_hops:
                type: integer
                nullable: true
                description: >-
                  Salti verso l'entità sul lato ricevente, quando il provider li
                  segnala.
              sent_hops:
                type: integer
                nullable: true
                description: >-
                  Salti verso l'entità sul lato mittente, quando il provider li
                  segnala.
              percentage:
                type: number
                description: >-
                  Quota dell'esposizione dell'indirizzo, quando riportata dal
                  fornitore; altrimenti 0.
              is_direct:
                type: boolean
                description: >-
                  Sempre `true` per Merkle Science, le cui connessioni sono
                  attribuzioni anziché controparti.
              country:
                type: string
                nullable: true
                description: Paese dell'entità, se noto.
              provider_entity_id:
                type: string
                nullable: true
                description: L'identificatore del provider per l'entità.
        network_nodes:
          type: array
          items:
            type: object
          description: >-
            Nodi del grafo di esposizione per lo screening delle transazioni.
            Vuoto nei risultati dello screening dei wallet.
        network_edges:
          type: array
          items:
            type: object
          description: >-
            Archi del grafo di esposizione per lo screening delle transazioni.
            Vuoto nel risultato dello screening dei wallet.
        sanctions_hit:
          type: boolean
          description: >-
            True se l'indirizzo ha un'esposizione diretta o indiretta a
            sanzioni.
        pep_counterparty:
          type: boolean
          description: >-
            Esposizione come persona politicamente esposta. `null` quando non è
            disponibile alcun riscontro PEP, il che corrisponde a ogni risultato
            attuale poiché nessun provider ne segnala uno; `false` solo per un
            risultato esplicito negativo dello screening. Non interpretare
            `null` come un controllo PEP completato.
          nullable: true
        dominant_risk_category:
          type: string
          nullable: true
          description: >-
            Categoria ad alto rischio con il peso maggiore, o `null` quando
            nessuna è dominante (ad es. `sanctioned`, `mixer`, `stolen_funds`).
        risk_factors:
          type: array
          description: >-
            Spiegazione ordinata di `risk_score`: cosa ha determinato questo
            verdetto. I fornitori valutano un indirizzo in base al proprio
            modello e restituiscono solo un verdetto (Merkle Science restituisce
            un numero intero da 0 a 5), quindi il punteggio da solo non è
            utilizzabile a livello operativo. Ordinata prima in base al rischio
            elevato, poi per il valore transitato attraverso ciascun fattore,
            limitata ai cinque più rilevanti; `source_of_funds` e
            `destination_of_funds` contengono sempre il dettaglio completo. Un
            valore elevato di `risk_score` senza alcuna voce `is_high_risk`
            significa che il fornitore non ha segnalato corrispondenze con
            sanzioni o entità associate e ha valutato l'indirizzo esclusivamente
            sul proprio modello di esposizione: `summary` lo indica
            esplicitamente.
          items:
            type: object
            properties:
              source:
                type: string
                enum:
                  - attribution
                  - exposure
                description: >-
                  `attribution` indica ciò che il provider afferma essere
                  l'indirizzo stesso (il suo tag o cluster); `exposure` indica
                  dove si sono effettivamente spostati i suoi fondi.
              category:
                type: string
                description: >-
                  Categoria di rischio normalizzata, stesso vocabolario del
                  dettaglio dell'esposizione.
              label:
                type: string
                description: >-
                  La dicitura originale del provider per il driver (ad es.
                  `Gambling / Crypto only`), che corrisponde a quanto
                  visualizzato anche nella console del provider.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Entità attribuita all'origine del driver, ad esempio un sito
                  di scommesse o un exchange.
              direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                  - unknown
                  - attribution
                description: >-
                  Direzione del flusso di fondi, `attribution` quando il fattore
                  determinante è il tag dell'indirizzo stesso, o `unknown`
                  quando il fornitore non ha riportato una direzione.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                  - unknown
                  - attribution
                description: >-
                  `direct` (1 hop) o `indirect` (multi-hop), `attribution` per
                  il tag dell'indirizzo stesso, oppure `unknown` quando il
                  provider non ha specificato a quanti hop di distanza si trova
                  la controparte. Considera `unknown` come non classificato, non
                  come `direct`.
              amount_usd:
                type: number
                format: float
                nullable: true
                description: Valore in USD attribuito a questo driver.
              percentage:
                type: number
                format: float
                description: >-
                  Quota del volume TOTALE analizzato dell'indirizzo, entrambe le
                  direzioni combinate - a differenza di `percentage` all'interno
                  di `source_of_funds`/`destination_of_funds`, che è
                  normalizzato per direzione. Confrontabile e sommabile
                  nell'intero elenco.
              is_high_risk:
                type: boolean
                description: >-
                  Indica se la categoria è tra quelle che Didit tratta come ad
                  alto rischio (`sanctioned`, `mixer`, `stolen_funds`,
                  `ransomware`, `scam`, `darknet_market`, `terrorist_financing`,
                  `child_exploitation`, `hacked_exchange`, `high_risk_exchange`,
                  `seized_funds`).
              description:
                type: string
                description: >-
                  Rappresentazione su una riga del driver, ad es. `9.01%
                  indirect outgoing exposure to Gambling / Crypto only (Example
                  Gambling)`.
        raw_response:
          type: object
          additionalProperties: true
          description: >-
            Il payload proprietario del provider. La sua struttura è specifica
            del provider e può cambiare senza preavviso: leggi i campi
            normalizzati invece di effettuarne il parsing.
        report_signature:
          type: string
          description: >-
            Firma HMAC-SHA256 opaca su questo risultato esatto, limitata alla
            tua applicazione. Non ha significato da sola: invia nuovamente il
            corpo completo della risposta, non modificato e includendo questo
            campo, a `POST /v3/wallet-screening/pdf/` per generarlo come PDF.
            L'endpoint PDF rifiuta la richiesta con `400` se `report_signature`
            manca o se qualsiasi campo firmato (ad es. `risk_score`, `severity`,
            `sanctions_hit`) è stato modificato prima del nuovo invio.
      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 chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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