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

# Cribratge de carteres: API d'informe en PDF

> Genera un PDF amb la marca de Didit reenviant el JSON del cribratge de carteres. Sense estat, sense crida al proveïdor ni cost addicional.



Prompt de Screen Wallet PDF
        Copia el prompt al porta-retalls



      
      

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



      
      

Enganxa a

## Per què no té estatEl cribratge de carteres autònom no escriu res a la taula de transaccions, de manera que no hi ha cap registre emmagatzemat del qual aquest endpoint pugui generar el document. En canvi, tornes a enviar el JSON exacte que ja t'ha retornat `POST /v3/wallet-screening/`, i Didit converteix aquest payload en un PDF sense tornar a cridar cap proveïdor.## El camp `report_signature`Cada resposta de `POST /v3/wallet-screening/` inclou ara un camp `report_signature`: una signatura opaca limitada a la teva aplicació. Aquest endpoint la verifica abans de generar el document, de manera que un client no pot editar `risk_score`, `severity`, `sanctions_hit` ni cap altre camp i obtenir un PDF amb la marca de Didit i un aspecte correcte per a un resultat que Didit mai no va produir.Reenvia sempre el cos complet de la resposta **sense modificar**, inclòs `report_signature`. Canviar l'ordre de les claus és correcte; canviar qualsevol valor signat no ho és.```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
```## FacturacióNo es fa cap crida a un proveïdor i no es factura res: això només torna a generar un resultat que ja vas pagar quan vas cridar `POST /v3/wallet-screening/`.## Errors| Estat | Significat |
| - | - |
| `400` | El cos no és un objecte JSON que coincideixi amb l'estructura del resultat del cribratge de carteres, o `report_signature` falta o no coincideix amb els camps reenviats. |
| `401` | Falta `x-api-key` o no és vàlida. |## Següents passos> [card] [Cribratge de carteres](https://docs.didit.me/ca/management-api/transactions/screen-wallet.md)
>
> Executa el cribratge de carteres subjacent sota demanda i obtén el resultat en JSON per reenviar aquí.> [card] [Cribratge de carteres sota demanda](https://docs.didit.me/ca/transaction-monitoring/wallet-screening.md)
>
> Visió general de l'endpoint autònom de cribratge de carteres i del model de resultats.


## OpenAPI

````yaml ca/openapi-25.json POST /v3/wallet-screening/pdf/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/wallet-screening/pdf/:
    post:
      tags:
        - Transactions
      summary: Generar el resultat d'un cribratge de carteres en PDF
      description: >-
        Complement sense estat per a `POST /v3/wallet-screening/`: torna a
        enviar exactament el cos JSON que va retornar aquest endpoint
        —incloent-hi la `report_signature` que va afegir— i rep un PDF amb la
        marca de Didit del mateix resultat. No es crida a cap proveïdor i no es
        factura ni es desa res de manera persistent; això només torna a
        renderitzar un resultat que Didit ja havia generat. La signatura vincula
        el PDF a un resultat no modificat: editar `risk_score`, `severity`,
        `sanctions_hit` o qualsevol altre camp signat abans de tornar a enviar
        falla amb `400`.
      operationId: screenWalletPdf
      requestBody:
        required: true
        description: >-
          L'objecte JSON sense modificar retornat per `POST
          /v3/wallet-screening/`, incloent-hi `report_signature`.
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/WalletScreeningResult'
              required:
                - report_signature
              description: >-
                La mateixa estructura que la resposta de `POST
                /v3/wallet-screening/`; passa aquest cos de resposta
                literalment, incloent-hi `report_signature`.
      responses:
        '200':
          description: >-
            El document PDF renderitzat, retornat directament com a binari
            `application/pdf`: no hi ha cap contenidor JSON.
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename=wallet_screening_{address}.pdf`, derivat
                de `wallet_address` (o `transaction_hash`) en el resultat
                republicat.
              schema:
                type: string
                example: >-
                  attachment;
                  filename=wallet_screening_0x28c6c06298d514db0899.pdf
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          description: >-
            El cos no és un objecte JSON que coincideixi amb l'estructura del
            resultat del cribratge de carteres, o falta `report_signature` o no
            coincideix amb els camps reenviats (editat o truncat abans del
            reenviament).
          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: Falta l'`x-api-key` o no és vàlid.
      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: >-
            Proveïdor que ha dut a terme el cribratge (p. ex. `merklescience`,
            `crystal`).
        screening_type:
          type: string
          enum:
            - WALLET_SCREENING
          description: Sempre `WALLET_SCREENING` per a aquest endpoint.
        risk_score:
          type: integer
          description: >-
            Puntuació de risc normalitzada de 0 a 100. Un valor més alt indica
            una exposició més gran a entitats de risc. Merkle Science qualifica
            una adreça de 0 a 5, la qual cosa es correspon amb 0, 15, 35, 55, 75
            o 95.
        severity:
          type: string
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Grup de risc derivat de `risk_score`: `0-9` UNKNOWN, `10-39` LOW,
            `40-69` MEDIUM, `70-89` HIGH, `90-100` CRITICAL. `UNKNOWN` és la
            franja més baixa, no un estat independent sense dades: un
            `risk_score` de 0 (el cas habitual d'una adreça neta) significa
            sense avaluació adversa, mentre que una puntuació diferent de zero
            en l'interval 1-9 és un senyal real però inferior a LOW; llegeix el
            `risk_score`, no només la franja. No tractis mai `UNKNOWN` com una
            qualificació afirmativa de risc baix o neta; no la mostris com un
            aprovat.
        status:
          type: string
          enum:
            - SCREENED
            - PENDING
            - ERROR
          description: Estat del resultat del cribratge.
        summary:
          type: string
          description: Resum del resultat del cribratge, llegible per a humans.
        wallet_address:
          type: string
          description: L'adreça analitzada, que es retorna tal qual.
        transaction_hash:
          type: string
          nullable: true
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre és `null` en un resultat de cribratge de carteres.
        blockchain:
          type: string
          description: La blockchain que s'ha analitzat.
        block_timestamp:
          type: string
          nullable: true
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre és `null` en un resultat de cribratge de carteres.
        total_value_usd:
          type: number
          nullable: true
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre és `null` en un resultat de cribratge de carteres.
        fee_usd:
          type: number
          nullable: true
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre és `null` en un resultat de cribratge de carteres.
        sender_rows:
          type: array
          items:
            type: object
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre està buit en un resultat de cribratge de carteres.
        receiver_rows:
          type: array
          items:
            type: object
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre està buit en un resultat de cribratge de carteres.
        transaction_flows:
          type: array
          items:
            type: object
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre està buit en un resultat de cribratge de carteres.
        transaction_flows_status:
          type: string
          nullable: true
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre és `null` en un resultat de cribratge de carteres.
        transaction_flows_error:
          type: string
          nullable: true
          description: >-
            Camp de cribratge de transaccions, compartit amb l'estructura del
            resultat. Sempre és `null` en un resultat de cribratge de carteres.
        source_of_funds:
          type: array
          description: >-
            D'on ha rebut fons l'adreça, atribuït per entitat. Cada entrada és
            un desglossament de l'exposició.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Categoria de risc normalitzada, p. ex. `exchange_licensed`,
                  `dex`, `defi`, `payment_processor`, `mixer`, `darknet_market`,
                  `sanctioned`, `stolen_funds`, `high_risk_exchange`.
              percentage:
                type: number
                description: Proporció de l'exposició total de la direcció, 0-100.
              amount_usd:
                type: number
                nullable: true
                description: Valor en USD atribuït a aquesta entitat.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nom de l'entitat atribuïda, per exemple una plataforma
                  d'intercanvi, un mesclador o un grup sancionat.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Tipus d'entitat del proveïdor (p. ex. `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Subtipus més granular (p. ex., `Mandatory KYC and AML`,
                  `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Nombre de salts fins a l'entitat (1 per a una contrapart
                  directa), quan el proveïdor n'informa. Sempre és `null` per a
                  Merkle Science, que només informa de si l'exposició és directa
                  o indirecta: utilitza `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, tal com el proveïdor etiqueta
                  l'entitat.
              is_direct:
                type: boolean
                description: Cert quan `exposure_type` és `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Indica si els fons provenien d'aquesta entitat (`incoming`) o
                  hi anaven destinats (`outgoing`).
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: Exposició `direct` (1 salt) o `indirect` (múltiples salts).
              provider_entity_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a l'entitat.
              provider_entity_type_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  País principal ISO 3166-1 alfa-2 de l'entitat. Buit o `null`
                  si el proveïdor no el coneix.
              raw_amount:
                type: number
                nullable: true
                description: >-
                  Import en la unitat pròpia de l'actiu, quan el proveïdor ho
                  notifica.
              raw_currency:
                type: string
                nullable: true
                description: Unitat de `raw_amount`, quan el proveïdor la reporta.
        destination_of_funds:
          type: array
          description: >-
            Cap a on ha enviat fons l'adreça, atribuït per entitat. Té la
            mateixa estructura d'element que `source_of_funds` amb
            `exposure_direction` = `outgoing`.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  Categoria de risc normalitzada, p. ex. `exchange_licensed`,
                  `dex`, `defi`, `payment_processor`, `mixer`, `darknet_market`,
                  `sanctioned`, `stolen_funds`, `high_risk_exchange`.
              percentage:
                type: number
                description: Proporció de l'exposició total de la direcció, 0-100.
              amount_usd:
                type: number
                nullable: true
                description: Valor en USD atribuït a aquesta entitat.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Nom de l'entitat atribuïda, per exemple una plataforma
                  d'intercanvi, un mesclador o un grup sancionat.
              entity_type:
                type: string
                nullable: true
                description: >-
                  Tipus d'entitat del proveïdor (p. ex. `Exchange`, `DeFi`,
                  `Sanctions`, `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  Subtipus més granular (p. ex., `Mandatory KYC and AML`,
                  `OFAC`, `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  Nombre de salts fins a l'entitat (1 per a una contrapart
                  directa), quan el proveïdor n'informa. Sempre és `null` per a
                  Merkle Science, que només informa de si l'exposició és directa
                  o indirecta: utilitza `exposure_type`.
              description:
                type: string
                nullable: true
                description: >-
                  `entity_type / entity_subtype`, tal com el proveïdor etiqueta
                  l'entitat.
              is_direct:
                type: boolean
                description: Cert quan `exposure_type` és `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  Indica si els fons provenien d'aquesta entitat (`incoming`) o
                  hi anaven destinats (`outgoing`).
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: Exposició `direct` (1 salt) o `indirect` (múltiples salts).
              provider_entity_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a l'entitat.
              provider_entity_type_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  País principal ISO 3166-1 alfa-2 de l'entitat. Buit o `null`
                  si el proveïdor no el coneix.
              raw_amount:
                type: number
                nullable: true
                description: >-
                  Import en la unitat pròpia de l'actiu, quan el proveïdor ho
                  notifica.
              raw_currency:
                type: string
                nullable: true
                description: Unitat de `raw_amount`, quan el proveïdor la reporta.
        counterparty_connections:
          type: array
          description: >-
            Entitats a les quals el proveïdor atribueix l'adreça analitzada. En
            el cas de Merkle Science, provenen de les etiquetes de propietari i
            d'usuari de la mateixa adreça, de manera que la mateixa entitat pot
            aparèixer dues vegades, i no comporten fluxos de fons:
            `received_usd`, `sent_usd`, `received_hops` i `sent_hops` són `null`
            i `percentage` és 0. No facis encaminament segons `risk_level` o
            `is_direct` aquí: fes servir `sanctions_hit`,
            `dominant_risk_category` i `risk_factors[].is_high_risk` per al
            veredicte, i `exposure_type` a
            `source_of_funds`/`destination_of_funds` per determinar si són
            directes.
          items:
            type: object
            properties:
              entity_name:
                type: string
                nullable: true
                description: Nom de l'entitat atribuïda.
              entity_type:
                type: string
                nullable: true
                description: Tipus d'entitat del proveïdor.
              entity_subtype:
                type: string
                nullable: true
                description: Subtipus d'entitat del proveïdor.
              risk_level:
                type: string
                description: >-
                  En minúscules i depenent del proveïdor. Per a Merkle Science
                  és el grau de risc de 0 a 5 de la pròpia adreça (`no_risk`,
                  `low`, `medium_low`, `medium`, `high`, `critical`), augmentat
                  a `high` quan la categoria de l'entitat és d'alt risc; no és
                  un grau independent de l'entitat.
              categories:
                type: array
                items:
                  type: string
                description: Categories de risc normalitzades de l'entitat.
              received_usd:
                type: number
                nullable: true
                description: USD rebuts de l'entitat, quan el proveïdor ho informa.
              sent_usd:
                type: number
                nullable: true
                description: USD enviats a l'entitat, quan el proveïdor ho informa.
              received_hops:
                type: integer
                nullable: true
                description: >-
                  Salts fins a l'entitat de la part receptora, quan el proveïdor
                  els informa.
              sent_hops:
                type: integer
                nullable: true
                description: >-
                  Salts fins a l'entitat de la part emissora, quan el proveïdor
                  els informa.
              percentage:
                type: number
                description: >-
                  Proporció de l'exposició de l'adreça, quan el proveïdor ho
                  informa; en cas contrari, 0.
              is_direct:
                type: boolean
                description: >-
                  Sempre `true` per a Merkle Science, les connexions del qual
                  són atribucions en lloc de contraparts.
              country:
                type: string
                nullable: true
                description: País de l'entitat, quan es coneix.
              provider_entity_id:
                type: string
                nullable: true
                description: L'identificador propi del proveïdor per a l'entitat.
        network_nodes:
          type: array
          items:
            type: object
          description: >-
            Nodes del graf d'exposició per al cribratge de transaccions. Buit en
            un resultat de cribratge de carteres.
        network_edges:
          type: array
          items:
            type: object
          description: >-
            Arestes del graf d'exposició per al cribratge de transaccions. Buit
            en un resultat de cribratge de carteres.
        sanctions_hit:
          type: boolean
          description: Cert si l'adreça té exposició directa o indirecta a sancions.
        pep_counterparty:
          type: boolean
          description: >-
            Exposició com a persona políticament exposada. `null` quan no hi ha
            cap detecció de PEP disponible, que és el cas de tots els resultats
            actualment perquè cap proveïdor n'informa; `false` només per a un
            resultat de cribratge explícitament negatiu. No interpretis `null`
            com una comprovació de PEP completada.
          nullable: true
        dominant_risk_category:
          type: string
          nullable: true
          description: >-
            Categoria d'alt risc amb més pes, o `null` quan cap no és dominant
            (p. ex. `sanctioned`, `mixer`, `stolen_funds`).
        risk_factors:
          type: array
          description: >-
            Explicació classificada de `risk_score`: què ha produït aquest
            veredicte. Els proveïdors avaluen una adreça segons el seu propi
            model i només retornen un veredicte (Merkle Science retorna un enter
            del 0 al 5), de manera que la puntuació per si sola no permet
            prendre decisions. S'ordena primer per risc alt i després pel valor
            que ha passat per cada factor determinant, limitat als cinc més
            rellevants; `source_of_funds` i `destination_of_funds` sempre
            inclouen el desglossament complet. Un `risk_score` alt sense cap
            entrada `is_high_risk` significa que el proveïdor no ha detectat
            coincidències amb sancions ni entitats atribuïdes i ha avaluat
            l'adreça purament segons el seu propi model d'exposició; `summary`
            ho indica explícitament.
          items:
            type: object
            properties:
              source:
                type: string
                enum:
                  - attribution
                  - exposure
                description: >-
                  `attribution` és el que el proveïdor diu que és la pròpia
                  adreça (la seva pròpia etiqueta o clúster); `exposure` és cap
                  a on s'han mogut realment els seus fons.
              category:
                type: string
                description: >-
                  Categoria de risc normalitzada, mateix vocabulari que el
                  desglossament d'exposició.
              label:
                type: string
                description: >-
                  La redacció pròpia del proveïdor per al factor determinant
                  (per exemple, `Gambling / Crypto only`), que és el que també
                  veuries a la consola del proveïdor.
              entity_name:
                type: string
                nullable: true
                description: >-
                  Entitat atribuïda darrere del factor determinant, per exemple
                  un lloc web de jocs d'atzar o una plataforma d'intercanvi.
              direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                  - unknown
                  - attribution
                description: >-
                  Direcció del flux de fons, `attribution` quan el causant és
                  l'etiqueta pròpia de l'adreça, o `unknown` quan el proveïdor
                  no ha informat de cap direcció.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                  - unknown
                  - attribution
                description: >-
                  `direct` (1 salt) o `indirect` (múltiples salts),
                  `attribution` per a l'etiqueta pròpia de l'adreça, o `unknown`
                  quan el proveïdor no ha indicat a quants salts de distància és
                  la contrapart. Tracta `unknown` com a no classificat, no com a
                  `direct`.
              amount_usd:
                type: number
                format: float
                nullable: true
                description: Valor en USD atribuït a aquest factor determinant.
              percentage:
                type: number
                format: float
                description: >-
                  Proporció del volum TOTAL analitzat de l'adreça, combinant
                  ambdues direccions - a diferència de `percentage` dins de
                  `source_of_funds`/`destination_of_funds`, que està normalitzat
                  per direcció. Comparable i sumable a tota la llista.
              is_high_risk:
                type: boolean
                description: >-
                  Indica si la categoria és una de les que Didit tracta com
                  d'alt risc (`sanctioned`, `mixer`, `stolen_funds`,
                  `ransomware`, `scam`, `darknet_market`, `terrorist_financing`,
                  `child_exploitation`, `hacked_exchange`, `high_risk_exchange`,
                  `seized_funds`).
              description:
                type: string
                description: >-
                  Representació en una línia del factor determinant, p. ex.
                  `9.01% indirect outgoing exposure to Gambling / Crypto only
                  (Example Gambling)`.
        raw_response:
          type: object
          additionalProperties: true
          description: >-
            El payload propi del proveïdor. La seva estructura és específica del
            proveïdor i pot canviar sense previ avís: llegeix els camps
            normalitzats en lloc d'analitzar-lo directament.
        report_signature:
          type: string
          description: >-
            Signatura HMAC-SHA256 opaca sobre aquest resultat exacte, delimitada
            a la teva aplicació. No té sentit per si sola: torna a enviar el cos
            complet de la resposta, sense modificar i incloent aquest camp, a
            `POST /v3/wallet-screening/pdf/` per renderitzar-lo com a PDF.
            L'endpoint de PDF rebutja la sol·licitud amb `400` si falta
            `report_signature` o si s'ha editat algun camp signat (p. ex.,
            `risk_score`, `severity`, `sanctions_hit`) abans de tornar-lo a
            enviar.
      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 clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.

````

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