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

# Creare una voce VASP privata per la Travel Rule

> Aggiungi una controparte mancante alla directory Travel Rule privata di Didit, salva il contatto di compliance e invia un invito.

L'API di Didit per la creazione di VASP aggiunge privatamente una controparte alla directory della tua applicazione e, facoltativamente, invia un invito all'indirizzo email di conformità della controparte.

Invia `name` e `email`. Puoi inoltre fornire `lei` (20 caratteri alfanumerici), `jurisdiction` (un codice paese ISO alpha-2 o alpha-3) e `invite` (il valore predefinito è `false`). I valori vuoti facoltativi di LEI e giurisdizione sono accettati. L'API richiede l'accesso in scrittura alle transazioni.

La risposta `201` è una voce della directory con `source: added_by_you`. Il contatto di conformità è privato e visibile solo alla tua applicazione. Aggiungere una voce non certifica la sua identità né la rende un membro della rete Didit.

Una corrispondenza con un nome visibile o un LEI restituisce `409` con `vasp_id`; in questo caso seleziona la voce esistente. I campi non validi restituiscono `400`.

Usa [Cerca nella directory VASP](https://docs.didit.me/it/management-api/travel-rule/search-vasps.md) per trovare la voce e le rotte disponibili. Usa il suo `id` con l'azione `beneficiary_vasp` in [Aggiorna un trasferimento](https://docs.didit.me/it/management-api/travel-rule/update-transfer.md). Consulta la [guida alla directory](https://docs.didit.me/it/transaction-monitoring/travel-rule.md#directory-dei-vasp) per l'instradamento e l'adeguata verifica.


## OpenAPI

````yaml it/openapi-25.json POST /v3/travel-rule/vasps/
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/travel-rule/vasps/:
    post:
      tags:
        - Travel Rule
      summary: Crea una voce privata nella directory VASP
      description: >-
        Aggiungi un VASP in privato alla tua applicazione e, facoltativamente,
        invitalo. Richiede accesso in scrittura alle transazioni. La risposta
        usa source=added_by_you. Un nome o un LEI visibili che corrispondono
        restituiscono 409 con il vasp_id esistente. Vedi [Cerca nella
        directory](/it/management-api/travel-rule/search-vasps).
      operationId: createTravelRuleVasp
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleVaspCreateRequest'
            example:
              name: Example VASP
              email: compliance@example.com
              jurisdiction: DE
              invite: false
      responses:
        '201':
          description: Risposta riuscita.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaspDirectoryEntry'
              example:
                id: 11111111-2222-3333-4444-555555555555
                kind: directory
                name: Example VASP
                lei: ''
                jurisdiction: DE
                source: added_by_you
                contacts:
                  - id: 22222222-3333-4444-5555-666666666666
                    email: compliance@example.com
                    name: ''
                    source: application
                    scope: application
                    verified_at: null
        '400':
          description: Campi della richiesta non validi.
        '403':
          description: Autorizzazione mancante per scrivere transazioni.
        '409':
          description: >-
            Una voce visibile corrisponde già al nome o al LEI. Seleziona il
            vasp_id esistente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Spiegazione del conflitto.
                  vasp_id:
                    type: string
                    description: Identificatore del VASP esistente.
                    format: uuid
                required:
                  - detail
                  - vasp_id
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST 'https://verification.didit.me/v3/travel-rule/vasps/' \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"name": "Example VASP", "email": "compliance@example.com", "jurisdiction": "DE", "invite": false}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.create_vasp(
                name="Example VASP",
                email="compliance@example.com",
                jurisdiction="DE",
                invite=False,
            )
            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.travelRule.createVasp({
              name: "Example VASP",
              email: "compliance@example.com",
              jurisdiction: "DE",
              invite: false,
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.CreateVASP(ctx, didit.TravelRuleVASPCreateRequest{\n\tName:         \"Example VASP\",\n\tEmail:        \"compliance@example.com\",\n\tJurisdiction: didit.String(\"DE\"),\n\tInvite:       didit.Bool(false),\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.TravelRuleVaspCreateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().createVasp(TravelRuleVaspCreateRequest.builder()
                    .name("Example VASP")
                    .email("compliance@example.com")
                    .jurisdiction("DE")
                    .invite(false)
                    .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->travelRule->createVasp([
                'name' => 'Example VASP',
                'email' => 'compliance@example.com',
                'jurisdiction' => 'DE',
                'invite' => false,
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.travel_rule.create_vasp(
              name: "Example VASP",
              email: "compliance@example.com",
              jurisdiction: "DE",
              invite: false
            )
            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.TravelRule.CreateVaspAsync(new
            TravelRuleVaspCreateRequest

            {
                Name = "Example VASP",
                Email = "compliance@example.com",
                Jurisdiction = "DE",
                Invite = false,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleVaspCreateRequest:
      type: object
      properties:
        name:
          type: string
          description: Nome del VASP, senza spazi iniziali e finali; non può essere vuoto.
          minLength: 1
          maxLength: 255
        email:
          type: string
          description: >-
            Email di conformità salvata come contatto privato dell'applicazione
            e usata per un invito facoltativo.
          format: email
          maxLength: 254
        lei:
          type: string
          description: LEI facoltativo, normalizzato in maiuscolo.
          pattern: ^([A-Za-z0-9]{20})?$
          default: ''
        jurisdiction:
          type: string
          description: >-
            Codice paese ISO 3166 alpha-2 o alpha-3 facoltativo, normalizzato in
            maiuscolo.
          maxLength: 3
          default: ''
        invite:
          type: boolean
          default: false
          description: Invia un invito all'email indicata.
      required:
        - name
        - email
    VaspDirectoryEntry:
      type: object
      description: >-
        Un VASP della directory o un membro della rete Didit, con i percorsi a
        disposizione della tua applicazione per raggiungerlo. Un cliente è
        membro della rete Didit solo finché la sua applicazione è in produzione,
        la sua Travel Rule è attiva, il suo profilo è individuabile, possiede
        una ragione sociale e un'email di compliance confermata, e Didit non ha
        contrassegnato l'applicazione come test, demo o interna. Ogni riga
        include inoltre la valutazione condivisa di due diligence (dd_score,
        risk_level, responsiveness, essential_checks) e la decisione, lo
        screening dell'entità e i questionari specifici della tua applicazione,
        che nessun altro cliente può visualizzare.
      properties:
        id:
          type: string
          format: uuid
          description: L'ID della voce, per GET /v3/travel-rule/vasps/{vasp_id}/.
        kind:
          type: string
          enum:
            - directory
            - didit
          description: >-
            directory per una voce di directory condivisa o privata
            dell'applicazione; didit per un membro della rete Didit.
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          description: Codice paese ISO 3166, così come fornito dalla fonte.
        domains:
          type: array
          items:
            type: string
          description: I domini web del VASP. Sempre vuoto per i membri della rete Didit.
        reachable:
          type: boolean
          description: >-
            Indica se la tua applicazione dispone di una route disponibile verso
            questo VASP o verso una delle sue entità per un brand. Sempre true
            per un membro della rete Didit, tranne su un'applicazione sandbox,
            dove ogni riga è false.
        aliases:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              kind:
                type: string
                enum:
                  - trading_name
                  - other_legal_name
                  - network_name
                  - attribution
                  - merged
                  - staff
                description: >-
                  trading_name, other_legal_name (dal registro LEI globale),
                  network_name (il nome su una rete Travel Rule), attribution
                  (il nome dell'entità attribuito ai wallet del VASP dalle
                  analisi blockchain), merged (il nome di una voce duplicata
                  unita a questa) o staff.
          description: Altri nomi con cui viene individuato il VASP.
        networks:
          type: array
          items:
            type: object
            description: >-
              Un elenco corrente di questo VASP nella directory dei membri di
              una rete Travel Rule. Un elenco TRISA indica chi sia il VASP su
              TRISA; Didit non dispone di una via TRISA, quindi non costituisce
              mai un percorso.
            properties:
              network:
                type: string
                enum:
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - TRISA
              code:
                type: string
                description: L'identificatore del VASP su tale rete.
              listed_name:
                type: string
                description: Il nome con cui la rete elenca il VASP.
              country:
                type: string
                description: Il paese indicato dalla rete, se disponibile.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando il personale di Didit ha verificato la voce. Null per
                  le voci lette da un elenco pubblico.
              last_seen_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando la fonte ha mostrato la voce per l'ultima volta. Una
                  voce che la fonte non mostra per tre settimane viene rimossa.
              source:
                type: string
                enum:
                  - trisa_directory
                  - staff
                description: >-
                  L'origine dell'elenco: la directory pubblica TRISA o il
                  personale di Didit.
        routes:
          type: array
          items:
            type: object
            description: >-
              Una modalità con cui la tua applicazione può recapitare i dati
              della Travel Rule a questo VASP, nell'ordine in cui vengono
              provati dal dispatch. Un percorso di rete richiede un'adesione a
              tale rete: la tua (connessa nel Marketplace) o quella di Didit una
              volta che Didit ne dispone. Senza di essa, il percorso è indicato
              come non disponibile con la relativa motivazione, mai come
              modalità per raggiungere il VASP.
            properties:
              rail:
                type: string
                enum:
                  - INTERNAL
                  - TRP
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - EMAIL
              status:
                type: string
                enum:
                  - available
                  - unavailable
              reason:
                type: string
                enum:
                  - ''
                  - no_membership
                  - network_switched_off
                  - sandbox_application
                description: >-
                  Il motivo per cui una rotta non disponibile non può essere
                  utilizzata: no_membership (né tu né Didit avete un'adesione a
                  quella rete), network_switched_off (hai disattivato quella
                  rete nelle tue impostazioni) o sandbox_application
                  (un'applicazione sandbox invia solo al VASP di test di Didit,
                  pertanto non è disponibile alcuna rotta verso di essa). Vuoto
                  quando la rotta è disponibile.
              via:
                type: string
                enum:
                  - ''
                  - own_membership
                  - didit_membership
                  - directory
                  - contact
                  - didit_network
                description: >-
                  Come viene raggiunto un percorso disponibile: own_membership o
                  didit_membership per un canale di rete, directory per un
                  endpoint TRP verificato dalla directory, contact per il canale
                  EMAIL, didit_network per un membro della rete Didit. Vuoto
                  quando il percorso non è disponibile.
        umbrella:
          type: object
          nullable: true
          description: >-
            Il brand di cui questa voce è un'entità regolamentata. Null quando
            non ne fa parte.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        entities:
          type: array
          items:
            type: object
            description: >-
              Un'entità regolamentata di un brand: la persona giuridica che
              riceve un trasferimento.
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              lei:
                type: string
              jurisdiction:
                type: string
              reachable:
                type: boolean
                description: >-
                  Indica se la tua applicazione dispone di una route disponibile
                  verso di essa.
          description: >-
            Per un brand, le entità regolamentate che ricevono i suoi
            trasferimenti. Un trasferimento che menziona il brand va all'entità
            raggiungibile nella giurisdizione dichiarata
            (beneficiary_data.counterparty_vasp_jurisdiction), altrimenti
            all'entità collegata al wallet di destinazione tramite
            l'attribuzione di analisi blockchain, altrimenti all'unica entità
            raggiungibile quando non è dichiarata alcuna giurisdizione. In caso
            di due entità ugualmente compatibili, non viene mai fatta un'ipotesi
            arbitraria.
        contacts:
          type: array
          items:
            type: object
            description: Un contatto di compliance a cui la via EMAIL può scrivere.
            properties:
              id:
                type: string
                format: uuid
              email:
                type: string
                format: email
              name:
                type: string
              source:
                type: string
                enum:
                  - staff
                  - application
                  - learned
                description: >-
                  staff: curato da Didit; application: aggiunto dalla tua
                  applicazione; learned: un indirizzo che ha risposto a una
                  richiesta Travel Rule tramite il relativo link di risposta.
              scope:
                type: string
                enum:
                  - platform
                  - application
                description: >-
                  I contatti della piattaforma sono utilizzati per i
                  trasferimenti di ogni cliente Didit; i contatti
                  dell'applicazione sono privati per la tua applicazione, che
                  vede solo i propri.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando qualcuno a questo indirizzo ha risposto a una
                  richiesta. Null se non è ancora successo.
          description: >-
            I contatti della piattaforma per questo VASP e quelli della tua
            applicazione.
        dd_status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
            - REJECTED
          description: >-
            Stato di verifica della voce secondo Didit, valutato dalla
            componente di verifica di dd_score. Sempre COMPLETED per un membro
            della rete Didit.
        dd_score:
          type: integer
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Il punteggio di due diligence condiviso di una voce dell'elenco, da
            0 a 100, dove un valore più alto è più sicuro (vedi
            dd_score_semantic): la somma dei punti in dd_score_breakdown. Null
            per un membro della rete Didit, che non viene valutato. Una voce non
            ancora valutata (dd_assessed_at null) mostra 0 con un risk_level
            vuoto, quindi leggi risk_level anziché il punteggio grezzo.
        reachable_rails:
          type: array
          items:
            type: string
            enum:
              - INTERNAL
              - TRP
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - EMAIL
          description: >-
            Circuiti registrati nella voce. Consulta le route per sapere cosa
            può utilizzare oggi la tua applicazione.
        is_didit_customer:
          type: boolean
          description: >-
            true per un membro della rete Didit (per questi dd_status è sempre
            COMPLETED, dd_score è null e risk_level è vuoto) e per una voce
            della directory collegata a un cliente Didit.
        dd_score_breakdown:
          type: object
          description: >-
            Un oggetto per componente di dd_score. Componenti, il loro peso
            (max) e i relativi codici motivo: jurisdiction, 25
            (jurisdiction_not_high_risk, jurisdiction_high_risk,
            jurisdiction_unknown); verification, 15 (dd_status_completed,
            dd_status_in_progress, dd_status_not_started, dd_status_rejected);
            protocol, 15 (native_rail, email_only, no_rail); lei, 10 (lei_valid,
            lei_missing); history, 10 (history, no_history); essentials, 15
            (essential_checks, no_essential_checks); responsiveness, 10
            (responsive, unresponsive, responsiveness_unknown). Vuoto per un
            membro della rete Didit.
          additionalProperties:
            type: object
            properties:
              points:
                type: number
                description: >-
                  Punti con cui il componente contribuisce, arrotondati a un
                  decimale.
              max:
                type: integer
                description: 'Il peso del componente: i punti massimi con cui contribuisce.'
              reason:
                type: string
                description: Codice leggibile dalla macchina dell'esito del componente.
              detail:
                type: string
                description: Spiegazione su una riga in lingua inglese.
        dd_assessed_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Data e ora dell'ultimo calcolo di dd_score, risk_level e
            responsiveness: dopo che uno scambio con la voce viene completato,
            termina, scade, non corrisponde o viene rifiutato, quando Didit
            aggiorna o gestisce la voce e durante l'aggiornamento settimanale
            della directory. Null per un membro della rete Didit.
        dd_score_semantic:
          type: string
          enum:
            - higher_is_safer
          description: 'In quale direzione punta dd_score: sempre higher_is_safer.'
        risk_level:
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - ''
          description: >-
            La fascia in cui ricade dd_score: LOW (70 o superiore), MEDIUM (da
            40 a 69) o HIGH (inferiore a 40). Vuoto per un membro della rete
            Didit e per una voce non ancora valutata. Puoi filtrarlo con risk.
            Uno screening contrassegnato da te non modifica mai questo valore
            condiviso: imposta invece counterparty_risk_level su HIGH nelle tue
            regole.
        responsiveness:
          type: object
          description: >-
            Indica se il VASP risponde alle richieste Travel Rule: la quota
            delle richieste avviate dai clienti Didit verso di esso negli ultimi
            90 giorni a cui ha risposto. Contano solo le richieste inviate
            tramite un canale di rete o di protocollo, oppure via email a un
            indirizzo condiviso (l'indirizzo di compliance della voce o un
            contatto della piattaforma); una richiesta inviata a un indirizzo
            digitato da un cliente, o al contatto privato di un cliente, non
            conta mai. Una richiesta scaduta è considerata senza risposta; uno
            scambio completato, un rifiuto o una mancata corrispondenza dei dati
            costituiscono una risposta; una richiesta annullata o un canale
            irraggiungibile non sono né l'uno né l'altro. Sempre UNKNOWN con
            conteggi a zero per un membro della rete Didit.
          properties:
            status:
              type: string
              enum:
                - RESPONSIVE
                - UNRESPONSIVE
                - UNKNOWN
              description: >-
                UNKNOWN con meno di 5 richieste decise nella finestra temporale;
                UNRESPONSIVE quando è stata data risposta a meno del 10 percento
                di esse; RESPONSIVE altrimenti.
            answered:
              type: integer
              description: Richieste decise nella finestra a cui il VASP ha risposto.
            total:
              type: integer
              description: 'Richieste decise nella finestra: con risposta più scadute.'
            computed_at:
              type: string
              format: date-time
              nullable: true
        essential_checks:
          type: object
          description: >-
            Il report dei controlli essenziali di una voce della directory,
            generato esclusivamente dalle fonti verificate della piattaforma:
            registrazione (un registro ufficiale include il VASP: il registro
            provvisorio MiCA dell'UE, la directory pubblica TRISA o il registro
            globale LEI), licenza (un'autorizzazione MiCA è registrata e in
            corso di validità), dominio (il dominio della voce corrisponde al
            relativo endpoint TRP o al sito web indicato nel registro) e lei (il
            record LEI è attivo, emesso e coerente con i nomi e il paese della
            voce). La componente essentials di dd_score rappresenta la
            percentuale dei controlli valutati che sono stati superati. Rimane
            vuoto finché l'aggiornamento settimanale della directory non
            controlla per la prima volta la voce, ed è sempre vuoto per i membri
            della rete Didit.
          properties:
            level:
              type: string
              enum:
                - essential
            checked_at:
              type: string
              format: date-time
            checks:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    enum:
                      - registration
                      - licence
                      - domain
                      - lei
                  status:
                    type: string
                    enum:
                      - pass
                      - fail
                      - unknown
                    description: >-
                      unknown quando nessuna fonte registrata è in grado di
                      determinare il controllo.
                  reason:
                    type: string
                    description: Codice leggibile dalla macchina dell'esito.
                  detail:
                    type: string
                    description: Spiegazione su una riga in lingua inglese.
            passed:
              type: integer
            failed:
              type: integer
            unknown:
              type: integer
            total:
              type: integer
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            La decisione della tua applicazione su questo VASP oppure, per
            un'entità senza una propria decisione, quella del rispettivo brand
            (inherited_from indica il brand). Null se assente. Privata per la
            tua applicazione.
        entity_screening:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
          nullable: true
          description: >-
            Lo screening delle sanzioni e notizie negative più recente eseguito
            dalla tua applicazione su questo VASP. Null se non è mai stato
            sottoposto a screening. Privato per la tua applicazione.
        questionnaires:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleCounterpartyQuestionnaire'
          description: >-
            I questionari di due diligence della tua applicazione con questo
            VASP, dal più recente al meno recente. Privati per la tua
            applicazione.
        source:
          type: string
          description: >-
            directory per una voce di directory condivisa, added_by_you per una
            voce privata della tua applicazione, oppure didit_network per una
            voce di directory collegata a un cliente Didit. I risultati di
            membri separati con kind=didit possono non includere questo campo;
            usa kind per identificarli.
          enum:
            - didit_network
            - directory
            - added_by_you
      example:
        id: 0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91
        kind: directory
        name: Example Counterparty VASP
        lei: 529900EXAMPLECPTY001
        jurisdiction: DE
        domains:
          - counterparty.example
        reachable: true
        aliases:
          - name: Example Counterparty
            kind: trading_name
        networks:
          - network: GTR
            code: EXAMPLE01
            listed_name: Example Counterparty VASP
            country: DE
            verified_at: '2026-10-12T09:30:00Z'
            last_seen_at: '2026-10-12T09:30:00Z'
            source: staff
        routes:
          - rail: GTR
            status: unavailable
            reason: no_membership
            via: ''
          - rail: EMAIL
            status: available
            reason: ''
            via: contact
        umbrella: null
        entities: []
        contacts:
          - id: 6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b
            email: travelrule@counterparty.example
            name: Travel Rule desk
            source: staff
            scope: platform
            verified_at: null
        dd_status: NOT_STARTED
        dd_score: 62
        dd_score_breakdown:
          jurisdiction:
            points: 25
            max: 25
            reason: jurisdiction_not_high_risk
            detail: DEU is not on the high-risk jurisdiction list
          verification:
            points: 3.8
            max: 15
            reason: dd_status_not_started
            detail: due diligence status NOT_STARTED
          protocol:
            points: 6
            max: 15
            reason: email_only
            detail: reachable over the email fallback only
          lei:
            points: 10
            max: 10
            reason: lei_valid
            detail: valid LEI on record
          history:
            points: 5
            max: 10
            reason: no_history
            detail: no exchange history
          essentials:
            points: 7.5
            max: 15
            reason: no_essential_checks
            detail: no decided essential check yet
          responsiveness:
            points: 5
            max: 10
            reason: responsiveness_unknown
            detail: 0 decided recent requests, too few to judge
        dd_assessed_at: '2026-10-12T09:30:00Z'
        dd_score_semantic: higher_is_safer
        risk_level: MEDIUM
        responsiveness:
          status: UNKNOWN
          answered: 0
          total: 0
          computed_at: '2026-10-12T09:30:00Z'
        essential_checks: {}
        reachable_rails:
          - GTR
          - EMAIL
        is_didit_customer: false
        decision:
          decision: APPROVED
          reason: Licensed in DE, questionnaire reviewed
          decided_by: ''
          updated_at: '2026-10-14T10:05:00Z'
          inherited_from: null
        entity_screening:
          id: 7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d
          status: Approved
          total_hits: 0
          score: null
          screened_at: '2026-10-14T09:58:00Z'
          fresh: true
          flagged: false
        questionnaires:
          - id: 8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d
            status: ANSWERED
            form_version: '1'
            sent_to: travelrule@counterparty.example
            sent_at: '2026-09-02T08:00:00Z'
            expires_at: '2026-10-02T08:00:00Z'
            answered_at: '2026-09-04T15:20:00Z'
            valid_until: '2027-09-04T15:20:00Z'
            current: true
            answers:
              legal_name: >-
                Example Counterparty VASP, incorporated in the example
                jurisdiction.
              licensing: >-
                Crypto-asset service provider authorised under MiCA by its
                national regulator, licence active.
              jurisdictions: EU and EEA. We do not serve the United States.
              aml_program: >-
                Written AML/CFT policy, annual independent review, last
                completed in March 2026.
              compliance_officer: >-
                Head of Compliance, reachable at
                compliance@counterparty.example.
              sanctions_screening: >-
                Customers at onboarding and daily; counterparties on every
                transfer.
              transaction_monitoring: >-
                Rule-based monitoring with analyst review; suspicious activity
                reports filed with the FIU.
              travel_rule: TRP and email; we answer requests within one business day.
              custody: >-
                Segregated customer wallets held with a qualified custodian,
                insured.
              ownership: >-
                No shareholder holds 25 percent or more; parent company Example
                Holding Group.
              record_keeping: >-
                Five-year record-keeping for Travel Rule and transaction data,
                as our regulator requires.
              data_protection: Encrypted at rest and in transit, stored in the EU.
        source: directory
    TravelRuleCounterpartyDecision:
      type: object
      description: >-
        La decisione della tua applicazione su un VASP di controparte. Privata
        per la tua applicazione: non modifica mai la voce condivisa della
        directory e gli altri clienti non la vedono mai. Agisce solo tramite le
        tue regole di transazione (il campo regola counterparty_dd_status e i
        preset travel-rule-counterparty-blocked e
        travel-rule-counterparty-restricted); non modifica mai la modalità di
        instradamento di un trasferimento.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED: il tuo team ha approvato la controparte. RESTRICTED: i
            trasferimenti verso di essa possono procedere previa revisione.
            BLOCKED: il tuo team l'ha rifiutata.
        reason:
          type: string
          maxLength: 255
          description: >-
            Motivo in formato testo libero fornito da te, vuoto se non
            specificato.
        decided_by:
          type: string
          description: >-
            L'utente della console che ha preso o modificato per ultimo la
            decisione. Vuoto se è stata presa tramite chiave API.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            Il brand di cui questa entità segue la decisione perché non ne è
            stata presa alcuna sull'entità stessa. Null quando la decisione
            appartiene alla controparte stessa.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
    TravelRuleCounterpartyScreening:
      type: object
      description: >-
        Uno screening per sanzioni e notizie negative dell'entità della
        controparte, eseguito e fatturato per la tua applicazione. Riservato
        alla tua applicazione: nessun altro cliente potrà mai vederlo.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Approvata: nessuna possibile corrispondenza richiede attenzione. In
            revisione o Rifiutata: una possibile corrispondenza con liste di
            sanzioni o notizie negative.
        total_hits:
          type: integer
          description: Quante corrispondenze potenziali ha restituito lo screening.
        score:
          type: number
          nullable: true
          description: >-
            Il punteggio di rischio più elevato tra le possibili corrispondenze.
            Null quando non c'è stata alcuna corrispondenza.
        screened_at:
          type: string
          format: date-time
        fresh:
          type: boolean
          description: >-
            Indica se lo screening è più recente di fresh_days (30 giorni). Uno
            screening recente viene riutilizzato anziché fatturato nuovamente.
        flagged:
          type: boolean
          description: >-
            true mentre lo screening è recente e il suo stato è In Review o
            Declined. Quando l'ultimo screening è segnalato e lo screening della
            controparte rimane attivo, counterparty_risk_level è HIGH nelle tue
            regole.
    TravelRuleCounterpartyQuestionnaire:
      type: object
      description: >-
        Un questionario di due diligence inviato dalla tua applicazione alla
        controparte: il questionario standard di Didit, inviato via email a un
        indirizzo di compliance registrato con un link di risposta monouso.
        Riservato alla tua applicazione.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - SENT
            - ANSWERED
            - EXPIRED
          description: >-
            SENT: in attesa di risposte. ANSWERED: la controparte ha risposto a
            tutte le domande. EXPIRED: il link di risposta è stato chiuso senza
            risposta (il termine è scaduto oppure è stato sostituito da un
            questionario più recente), oppure le risposte hanno superato
            valid_until.
        form_version:
          type: string
          description: >-
            Versione del questionario standard di Didit a cui appartengono le
            risposte. Attualmente 1.
        sent_to:
          type: string
          format: email
        sent_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            La scadenza per la risposta, 30 giorni dopo l'invio. Il link smette
            di funzionare dopo tale termine.
        answered_at:
          type: string
          format: date-time
          nullable: true
        valid_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            Periodo di validità delle risposte: 365 giorni dopo la risposta.
            Null fino a quando non viene fornita una risposta.
        current:
          type: boolean
          description: >-
            true mentre il questionario è ANSWERED e valid_until non è
            trascorso.
        answers:
          type: object
          additionalProperties:
            type: string
          description: >-
            Le risposte associate all'ID della domanda: legal_name, licensing,
            jurisdictions, aml_program, compliance_officer, sanctions_screening,
            transaction_monitoring, travel_rule, custody, ownership,
            record_keeping, data_protection. Ciascuna risposta può contenere
            fino a 2.000 caratteri. Vuote finché non viene fornita una risposta.
  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.