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

# Recherche d'annuaire VASP : API Travel Rule

> Recherchez dans l'annuaire Travel Rule des VASP et le réseau Didit, avec filtres et routes vers chaque VASP de votre application.



Invite pour l'API de recherche dans l'annuaire des VASP
        Copier le prompt dans le presse-papiers



      
      

\<pre>

\`Search the VASP directory Didit routes outbound Travel Rule transfers with: the shared directory entries plus the members of the Didit network, each with the routes my application has to it today.

Endpoint:
GET https://verification.didit.me/v3/travel-rule/vasps/?search=<term>

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

Query parameters (all optional):
\- search - a name or alias fragment, an exact LEI, or a domain (example.com or a URL on it).
\- network - GTR, TRUST, VERIFYVASP, SYGNA or TRISA: only entries that network's member directory currently lists.
\- jurisdiction - ISO 3166 alpha-2 or alpha-3 country code.
\- reachable - true: only VASPs my application has an available route to; false: only entries it cannot reach today.
\- kind - directory (shared entries) or didit (Didit network members).
\- risk - LOW, MEDIUM or HIGH: only directory entries whose risk_level is that band.
\- responsiveness - RESPONSIVE, UNRESPONSIVE or UNKNOWN: only directory entries with that responsiveness.status.
Didit network members are not scored, so risk and responsiveness return directory entries only.
\- limit (default 50) / offset - pagination; count/next/previous describe the page window.
An unknown network, country code, risk band or responsiveness status answers 400 naming the field.

What to read from each result:
\- id - use it with GET /v3/travel-rule/vasps/{vasp_id}/.
\- kind, name, lei, jurisdiction, domains, aliases - who the VASP is and the other names it is found by.
\- routes[] - {rail, status, reason, via} in the order dispatch tries them. status is available or unavailable; an unavailable network route carries reason no_membership or network_switched_off and is never a way to reach the VASP. reachable is true when at least one route is available. On a sandbox application every route is unavailable with reason sandbox_application (sandbox sends only to the Didit Test VASP), every row has reachable false, and reachable=true returns no rows.
\- networks[] - the network member directories that list the VASP, with its code there. A TRISA listing is never a route: Didit has no TRISA rail.
\- umbrella / entities[] - a brand and the regulated entities that receive its transfers. A transfer naming the brand goes to the entity in the jurisdiction it states (beneficiary_data.counterparty_vasp_jurisdiction); two entities that fit equally are never guessed between, so without a route of the brand's own it is COUNTERPARTY_VASP_NOT_FOUND.
\- contacts[] - compliance contacts the EMAIL rail writes to: scope platform (curated by Didit or learned from an answered request) or application (private to my application).
\- dd_score (0-100, higher is safer: dd_score_semantic is always higher_is_safer) and risk_level (LOW at 70 or more, MEDIUM 40-69, HIGH below 40) - the shared due-diligence assessment of a directory entry. Didit network members are not scored: dd_score is null and risk_level empty.
\- dd_score_breakdown - {component: {points, max, reason, detail}} for jurisdiction, verification, protocol, lei, history, essentials and responsiveness.
\- responsiveness - {status, answered, total, computed_at}: RESPONSIVE, UNRESPONSIVE (answered less than 10 percent of at least 5 decided requests in the last 90 days) or UNKNOWN.
\- essential_checks - {level, checked_at, checks[{id, status, reason, detail}], passed, failed, unknown, total} for registration, licence, domain and lei. Empty until first checked.
\- decision, entity_screening, questionnaires[] - my application's own decision (APPROVED, RESTRICTED or BLOCKED), latest sanctions screening and due-diligence questionnaires on the VASP. Private to my application: no other customer sees them.

Didit network members are other Didit customers with a live application, Travel Rule on, a discoverable profile with a legal name and a confirmed compliance email, reached on the INTERNAL rail. Network routes need a membership: mine (connected in the Marketplace) or Didit's, and Didit's own memberships are not live yet.

My own VASP profile never appears in my own results.

Full guide: /transaction-monitoring/travel-rule#directory.`

\</pre>



      
      

Coller dans



## OpenAPI

````yaml fr/openapi-25.json GET /v3/travel-rule/vasps/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/vasps/:
    get:
      tags:
        - Travel Rule
      summary: Rechercher dans l'annuaire VASP
      description: >-
        Recherche paginée et triée par nom dans l'annuaire des VASP : les
        entrées du répertoire partagé, que Didit établit à partir du registre
        intermédiaire MiCA de l'ESMA, du répertoire public TRISA, du registre
        mondial LEI et de sa propre sélection, ainsi que les membres du réseau
        Didit. Chaque ligne indique les routes dont dispose votre application
        vers ce VASP à ce jour. Le profil de votre propre application n'est
        jamais répertorié. Les lignes comportent également l'évaluation partagée
        de diligence raisonnable ainsi que la propre décision de votre
        application, le filtrage de l'entité et les questionnaires.
      operationId: listTravelRuleVasps
      parameters:
        - name: search
          in: query
          schema:
            type: string
            maxLength: 255
          description: >-
            Un fragment de nom ou d'alias (insensible à la casse), un LEI exact
            ou un domaine (example.com ou une URL sur celui-ci). Les membres du
            réseau Didit correspondent selon leur dénomination sociale, leur LEI
            ou le domaine de leur e-mail de conformité.
        - name: network
          in: query
          schema:
            type: string
            enum:
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - TRISA
          description: >-
            Uniquement les entrées de l'annuaire actuellement répertoriées dans
            l'annuaire des membres d'un réseau.
        - name: jurisdiction
          in: query
          schema:
            type: string
          description: Code pays ISO 3166 alpha-2 ou alpha-3. 400 pour toute autre valeur.
        - name: reachable
          in: query
          schema:
            type: boolean
          description: >-
            true : uniquement les VASP vers lesquels votre application dispose
            d'un itinéraire disponible (membres du réseau Didit inclus). false :
            uniquement les entrées de l'annuaire qu'elle ne peut pas joindre
            aujourd'hui.
        - name: kind
          in: query
          schema:
            type: string
            enum:
              - directory
              - didit
          description: >-
            Uniquement les entrées de l'annuaire, ou uniquement les membres du
            réseau Didit.
        - name: risk
          in: query
          schema:
            type: string
            enum:
              - LOW
              - MEDIUM
              - HIGH
          description: >-
            Uniquement les entrées de l'annuaire dont le risk_level correspond à
            cette tranche. Les membres du réseau Didit, qui ne font pas l'objet
            d'une notation, ne correspondent jamais.
        - name: responsiveness
          in: query
          schema:
            type: string
            enum:
              - RESPONSIVE
              - UNRESPONSIVE
              - UNKNOWN
          description: >-
            Uniquement les entrées de l'annuaire dont responsiveness.status a
            cette valeur. Les membres du réseau Didit ne correspondent jamais.
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
      responses:
        '200':
          description: Résultats paginés de l'annuaire des VASP, triés par nom.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    nullable: true
                  previous:
                    type: string
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/VaspDirectoryEntry'
        '400':
          description: >-
            Un filtre n'est pas valide : le corps indique chaque champ, par
            exemple un réseau, un code pays, une tranche de risque ou un statut
            de réactivité inconnu.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
              example:
                jurisdiction:
                  - Use an ISO 3166 alpha-2 or alpha-3 country code.
                network:
                  - '"SWIFT" is not a valid choice.'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/travel-rule/vasps/?search=counterparty&reachable=true'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.travel_rule.list_vasps():
                print(item)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            for await (const item of didit.travelRule.listVasps()) {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.TravelRule.ListVASPsAutoPaging(ctx, didit.TravelRuleListVASPsParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;

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

            for (var item : client.travelRule().listVasps()) {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

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

            foreach ($didit->travelRule->listVasps() as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            didit.travel_rule.list_vasps.auto_paging_each do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            await foreach (var item in await client.TravelRule.ListVaspsAsync())
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    VaspDirectoryEntry:
      type: object
      description: >-
        Un VASP de l'annuaire ou un membre du réseau Didit, avec les routes dont
        dispose votre application vers celui-ci. Un client n'est membre du
        réseau Didit que si son application est en production, que sa Travel
        Rule est activée, que son profil est visible, qu'il dispose d'une raison
        sociale et d'un e-mail de conformité confirmé, et que Didit n'a pas
        marqué l'application comme étant un test, une démo ou une application
        interne. Chaque ligne comporte également l'évaluation partagée de
        diligence raisonnable (dd_score, risk_level, responsiveness,
        essential_checks) ainsi que la propre décision de votre application, le
        filtrage de l'entité et les questionnaires, qu'aucun autre client ne
        voit.
      properties:
        id:
          type: string
          format: uuid
          description: >-
            L'identifiant de l'entrée, pour GET
            /v3/travel-rule/vasps/{vasp_id}/.
        kind:
          type: string
          enum:
            - directory
            - didit
          description: "directory pour une entrée de l'annuaire partagé\_; didit pour un membre du réseau Didit."
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          description: Code pays ISO 3166, tel que fourni par la source.
        domains:
          type: array
          items:
            type: string
          description: >-
            Les domaines web du VASP. Toujours vide pour les membres du réseau
            Didit.
        reachable:
          type: boolean
          description: >-
            Indique si votre application dispose d'une route disponible vers ce
            VASP, ou vers l'une de ses entités pour une marque. Toujours true
            pour un membre du réseau Didit, sauf sur une application sandbox, où
            chaque ligne est 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 (issu du registre mondial LEI),
                  network_name (le nom sur un réseau Travel Rule), attribution
                  (le nom d'entité que l'analyse blockchain attribue aux
                  portefeuilles du VASP), merged (le nom d'une entrée en double
                  fusionnée dans celle-ci) ou staff.
          description: Autres noms sous lesquels le VASP est identifié.
        networks:
          type: array
          items:
            type: object
            description: "Une inscription actuelle de ce VASP dans l'annuaire des membres d'un réseau Travel Rule. Une inscription TRISA indique qui est le VASP sur TRISA\_; Didit ne dispose d'aucun canal TRISA, ce n'est donc jamais une route."
            properties:
              network:
                type: string
                enum:
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - TRISA
              code:
                type: string
                description: L'identifiant du VASP sur ce réseau.
              listed_name:
                type: string
                description: Le nom sous lequel le réseau répertorie le VASP.
              country:
                type: string
                description: Le pays indiqué par le réseau, lorsqu'il en fournit un.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Date et heure auxquelles le personnel de Didit a vérifié la
                  fiche. Null pour les fiches lues depuis un répertoire public.
              last_seen_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Moment où la source a affiché l'inscription pour la dernière
                  fois. Une inscription que la source n'a pas affichée pendant
                  trois semaines est supprimée.
              source:
                type: string
                enum:
                  - trisa_directory
                  - staff
                description: >-
                  Origine de l'entrée : l'annuaire public TRISA ou le personnel
                  Didit.
        routes:
          type: array
          items:
            type: object
            description: >-
              Un moyen par lequel votre application peut transmettre les données
              Travel Rule à ce VASP, dans l'ordre dans lequel l'envoi les tente.
              Un acheminement réseau nécessite une adhésion à ce réseau : la
              vôtre (connectée dans le Marketplace) ou celle de Didit dès lors
              que Didit en possède une. Sans elle, l'acheminement est indiqué
              comme non disponible avec le motif correspondant, jamais comme un
              moyen de joindre le 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: >-
                  Raison pour laquelle un itinéraire indisponible ne peut pas
                  être utilisé : no_membership (ni vous ni Didit n'êtes membre
                  de ce réseau), network_switched_off (vous avez désactivé ce
                  réseau dans vos paramètres) ou sandbox_application (une
                  application sandbox envoie uniquement au Test VASP de Didit,
                  donc aucun itinéraire ne lui est accessible). Vide lorsque
                  l'itinéraire est disponible.
              via:
                type: string
                enum:
                  - ''
                  - own_membership
                  - didit_membership
                  - directory
                  - contact
                  - didit_network
                description: >-
                  Manière dont un itinéraire disponible est atteint :
                  own_membership ou didit_membership pour un canal réseau,
                  directory pour un endpoint TRP vérifié par l'annuaire, contact
                  pour le canal EMAIL, didit_network pour un membre du réseau
                  Didit. Vide lorsque l'itinéraire est indisponible.
        umbrella:
          type: object
          nullable: true
          description: >-
            La marque dont cette entrée est une entité réglementée. Null
            lorsqu'elle ne fait pas partie d'une marque.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        entities:
          type: array
          items:
            type: object
            description: >-
              Une entité réglementée d'une marque : l'entité juridique qui
              reçoit un transfert.
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              lei:
                type: string
              jurisdiction:
                type: string
              reachable:
                type: boolean
                description: >-
                  Indique si votre application dispose d'une route disponible
                  vers celui-ci.
          description: >-
            Pour une marque, les entités réglementées qui reçoivent ses
            transferts. Un transfert mentionnant la marque est dirigé vers
            l'entité joignable dans la juridiction indiquée
            (beneficiary_data.counterparty_vasp_jurisdiction), sinon vers
            l'entité liée au portefeuille de destination par attribution
            d'analyse blockchain, sinon vers l'unique entité joignable
            lorsqu'aucune juridiction n'est indiquée. Deux entités qui
            correspondent aussi bien l'une que l'autre ne sont jamais
            départagées au hasard.
        contacts:
          type: array
          items:
            type: object
            description: Un contact de conformité auquel le canal EMAIL peut écrire.
            properties:
              id:
                type: string
                format: uuid
              email:
                type: string
                format: email
              name:
                type: string
              source:
                type: string
                enum:
                  - staff
                  - application
                  - learned
                description: >-
                  staff : sélectionné par Didit ; application : ajouté par votre
                  application ; learned : une adresse ayant répondu à une
                  requête Travel Rule via son lien de réponse.
              scope:
                type: string
                enum:
                  - platform
                  - application
                description: "Les contacts de la plateforme sont utilisés pour les transferts de chaque client de Didit\_; les contacts de l'application sont privés pour votre application, qui ne voit que les siens."
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Date et heure auxquelles quelqu'un à cette adresse a répondu à
                  une requête. Null s'il n'y a pas encore eu de réponse.
          description: >-
            Les contacts de la plateforme pour ce VASP ainsi que ceux de votre
            propre application.
        dd_status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
            - REJECTED
          description: >-
            Statut de vérification de l'entrée selon Didit, évalué par le
            composant de vérification de dd_score. Toujours COMPLETED pour un
            membre du réseau Didit.
        dd_score:
          type: integer
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Le score de diligence raisonnable partagé d'une entrée de
            l'annuaire, de 0 à 100, où une valeur plus élevée est plus sûre
            (voir dd_score_semantic) : la somme des points dans
            dd_score_breakdown. Vaut null pour un membre du réseau Didit, qui
            n'est pas noté. Une entrée qui n'a pas encore été évaluée
            (dd_assessed_at valant null) affiche 0 avec un risk_level vide ;
            consultez donc risk_level plutôt que le score brut.
        reachable_rails:
          type: array
          items:
            type: string
            enum:
              - INTERNAL
              - TRP
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - EMAIL
          description: >-
            Canaux enregistrés sur l'entrée. Consultez les routes pour savoir ce
            que votre application peut utiliser aujourd'hui.
        is_didit_customer:
          type: boolean
          description: >-
            true pour un membre du réseau Didit (dd_status est toujours
            COMPLETED, dd_score est null et risk_level est vide pour ceux-ci) et
            pour une entrée de l'annuaire liée à un client Didit.
        dd_score_breakdown:
          type: object
          description: >-
            Un objet par composant de dd_score. Composants, leur poids (max) et
            leurs codes de motif : 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). Vide pour un membre du réseau Didit.
          additionalProperties:
            type: object
            properties:
              points:
                type: number
                description: Points apportés par le composant, arrondis à une décimale.
              max:
                type: integer
                description: 'Le poids du composant : le maximum de points qu''il rapporte.'
              reason:
                type: string
                description: Code lisible par machine du verdict du composant.
              detail:
                type: string
                description: Explication en anglais sur une ligne.
        dd_assessed_at:
          type: string
          format: date-time
          nullable: true
          description: "Date et heure auxquelles dd_score, risk_level et responsiveness ont été calculés pour la dernière fois\_: après qu'un échange avec l'entrée se termine, s'achève, expire, présente une non-concordance ou est refusé, lorsque Didit actualise ou traite l'entrée, et lors de l'actualisation hebdomadaire de l'annuaire. Null pour un membre du réseau Didit."
        dd_score_semantic:
          type: string
          enum:
            - higher_is_safer
          description: 'Dans quel sens pointe dd_score : toujours higher_is_safer.'
        risk_level:
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - ''
          description: >-
            La tranche dans laquelle se situe dd_score : LOW (70 ou plus),
            MEDIUM (40 à 69) ou HIGH (moins de 40). Vide pour un membre du
            réseau Didit et pour une entrée non encore évaluée. Filtrez dessus
            avec risk. Votre propre filtrage signalé ne modifie jamais cette
            valeur partagée : il passe plutôt counterparty_risk_level à HIGH
            dans vos règles.
        responsiveness:
          type: object
          description: >-
            Indique si le VASP répond aux requêtes Travel Rule : la part des
            requêtes initiées par les clients Didit à son intention au cours des
            90 derniers jours auxquelles il a répondu. Seules les requêtes
            envoyées via un canal réseau ou protocolaire, ou par e-mail à une
            adresse partagée (l'adresse de conformité de l'entrée ou un contact
            de la plateforme), sont prises en compte ; une requête envoyée à une
            adresse saisie par un client ou au contact privé d'un client ne
            l'est jamais. Une requête expirée est considérée comme sans réponse
            ; un échange abouti, un refus ou une discordance de données
            constitue une réponse ; une requête annulée ou un canal inaccessible
            ne constituent ni l'un ni l'autre. Toujours UNKNOWN avec des
            compteurs à zéro pour un membre du réseau Didit.
          properties:
            status:
              type: string
              enum:
                - RESPONSIVE
                - UNRESPONSIVE
                - UNKNOWN
              description: >-
                UNKNOWN avec moins de 5 requêtes ayant fait l'objet d'une
                décision sur la période ; UNRESPONSIVE lorsque moins de 10 pour
                cent d'entre elles ont reçu une réponse ; RESPONSIVE sinon.
            answered:
              type: integer
              description: >-
                Requêtes ayant fait l'objet d'une décision dans la fenêtre
                auxquelles le VASP a répondu.
            total:
              type: integer
              description: "Requêtes ayant fait l'objet d'une décision dans la fenêtre\_: auxquelles il a été répondu, plus celles qui ont expiré."
            computed_at:
              type: string
              format: date-time
              nullable: true
        essential_checks:
          type: object
          description: >-
            Le rapport des vérifications essentielles d'une entrée de
            l'annuaire, généré uniquement à partir des sources vérifiées de la
            plateforme : immatriculation (un registre officiel répertorie le
            VASP : le registre intérimaire MiCA de l'UE, l'annuaire public TRISA
            ou le registre mondial des LEI), licence (une autorisation MiCA est
            enregistrée et en cours de validité), domaine (le domaine de
            l'entrée correspond à son endpoint TRP ou au site web indiqué par
            son registre) et LEI (son enregistrement LEI est actif, émis et
            conforme aux noms et au pays de l'entrée). La composante essentials
            de dd_score correspond à la proportion de vérifications évaluées qui
            ont réussi. Vide jusqu'à ce que l'actualisation hebdomadaire de
            l'annuaire vérifie l'entrée pour la première fois, et toujours vide
            pour un membre du réseau 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 lorsqu'aucune source enregistrée ne peut trancher
                      la vérification.
                  reason:
                    type: string
                    description: Code lisible par machine du verdict.
                  detail:
                    type: string
                    description: Explication en anglais sur une ligne.
            passed:
              type: integer
            failed:
              type: integer
            unknown:
              type: integer
            total:
              type: integer
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            La décision de votre application sur ce VASP, ou pour une entité
            sans décision propre, celle de sa marque (inherited_from indique la
            marque). Null lorsqu'il n'y en a aucune. Privée pour votre
            application.
        entity_screening:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
          nullable: true
          description: >-
            Le dernier filtrage des sanctions et de presse négative réalisé par
            votre application pour ce VASP. Null si vous ne l'avez jamais
            filtré. Privé pour votre application.
        questionnaires:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleCounterpartyQuestionnaire'
          description: >-
            Les questionnaires de due diligence de votre application avec ce
            VASP, du plus récent au plus ancien. Privés pour votre application.
      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.
    TravelRuleCounterpartyDecision:
      type: object
      description: >-
        La décision de votre application sur un VASP de la contrepartie. Privée
        pour votre application : elle ne modifie jamais l'entrée partagée de
        l'annuaire et aucun autre client ne la voit. Elle agit uniquement à
        travers vos règles de transaction (le champ de règle
        counterparty_dd_status et les préconfigurations
        travel-rule-counterparty-blocked et travel-rule-counterparty-restricted)
        ; elle ne modifie jamais la manière dont un transfert est acheminé.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED : votre équipe a validé la contrepartie. RESTRICTED : les
            transferts vers celle-ci peuvent être effectués après examen.
            BLOCKED : votre équipe l'a refusée.
        reason:
          type: string
          maxLength: 255
          description: >-
            Motif en texte libre que vous avez indiqué, vide s'il n'y en a
            aucun.
        decided_by:
          type: string
          description: >-
            L'utilisateur de la console qui a pris ou modifié pour la dernière
            fois la décision. Vide lorsqu'une clé API l'a prise.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            La marque dont cette entité suit la décision parce que vous n'en
            avez pris aucune sur l'entité elle-même. Null lorsque la décision
            est propre à la contrepartie.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
    TravelRuleCounterpartyScreening:
      type: object
      description: >-
        Un filtrage des sanctions et de la presse négative de l'entité
        contrepartie, exécuté pour votre application et facturé à celle-ci.
        Réservé à votre application : un autre client ne le verra jamais.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Approuvé : aucune correspondance possible ne nécessite d'attention.
            En cours d'examen ou refusé : une correspondance possible avec des
            sanctions ou de la presse négative.
        total_hits:
          type: integer
          description: Nombre de correspondances possibles renvoyées par le filtrage.
        score:
          type: number
          nullable: true
          description: >-
            Le score de risque le plus élevé parmi les correspondances
            possibles. Null si rien ne correspondait.
        screened_at:
          type: string
          format: date-time
        fresh:
          type: boolean
          description: >-
            Indique si le filtrage est plus récent que fresh_days (30 jours). Un
            filtrage récent est réutilisé au lieu d'être à nouveau facturé.
        flagged:
          type: boolean
          description: >-
            true tant que le filtrage est récent et que son statut est In Review
            ou Declined. Tant que votre dernier filtrage est signalé et que le
            filtrage de la contrepartie reste activé, counterparty_risk_level
            est HIGH dans vos règles.
    TravelRuleCounterpartyQuestionnaire:
      type: object
      description: >-
        Un questionnaire de vigilance envoyé par votre application à la
        contrepartie : le questionnaire standard de Didit, envoyé par e-mail à
        une adresse de conformité enregistrée avec un lien de réponse à usage
        unique. Réservé à votre application.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - SENT
            - ANSWERED
            - EXPIRED
          description: >-
            SENT : en attente de réponses. ANSWERED : la contrepartie a répondu
            à toutes les questions. EXPIRED : le lien de réponse s'est fermé
            sans réponse (son délai a expiré ou un questionnaire plus récent l'a
            remplacé), ou les réponses ont dépassé valid_until.
        form_version:
          type: string
          description: >-
            Version du questionnaire standard de Didit à laquelle les réponses
            appartiennent. Actuellement 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 date limite de réponse, 30 jours après l'envoi. Le lien cesse de
            fonctionner après cette échéance.
        answered_at:
          type: string
          format: date-time
          nullable: true
        valid_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            Durée pendant laquelle les réponses restent valides : 365 jours
            après avoir répondu. Null tant qu'aucune réponse n'a été apportée.
        current:
          type: boolean
          description: >-
            true tant que le questionnaire est ANSWERED et que valid_until n'est
            pas dépassé.
        answers:
          type: object
          additionalProperties:
            type: string
          description: >-
            Les réponses indexées par l'ID de question : legal_name, licensing,
            jurisdictions, aml_program, compliance_officer, sanctions_screening,
            transaction_monitoring, travel_rule, custody, ownership,
            record_keeping, data_protection. Chaque réponse contient jusqu'à 2
            000 caractères. Les réponses sont vides jusqu'à ce qu'une réponse
            soit apportée.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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