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

# VASP-Verzeichniseintrag abrufen: Travel-Rule-Routen

> Einen VASP aus dem Travel-Rule-Verzeichnis oder dem Didit-Netzwerk per ID abrufen, inklusive der Routen zu Ihrer Anwendung.

Prompt für die API zum Abrufen eines VASP-Verzeichniseintrags
Prompt in die Zwischenablage kopieren

<pre>
  \`Read one VASP of the Travel Rule directory by the id GET /v3/travel-rule/vasps/ returned.

  Endpoint:
  GET [https://verification.didit.me/v3/travel-rule/vasps/\{vasp\_id}/](https://verification.didit.me/v3/travel-rule/vasps/\{vasp_id}/)

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

  The response is the same object as one row of the search: kind, name, lei, jurisdiction, domains, reachable, aliases, networks, routes, umbrella, entities, contacts and the due-diligence fields. Read routes\[] for what my application can use today: an unavailable network route carries its reason (no\_membership or network\_switched\_off). On a sandbox application every route is unavailable with reason sandbox\_application, because sandbox sends only to the Didit Test VASP.

  Due diligence on the same id:

  * dd\_score (0-100, higher is safer), risk\_level, dd\_score\_breakdown, responsiveness and essential\_checks - the shared assessment. Didit network members are not scored.
  * decision, entity\_screening, questionnaires - my application's own records, private to it. Manage them with GET/PUT/DELETE /v3/travel-rule/vasps/{vasp_id}/decision/, GET/POST /v3/travel-rule/vasps/{vasp_id}/screening/ and GET/POST /v3/travel-rule/vasps/{vasp_id}/questionnaires/.
  * My Travel Rule transfers with this VASP: GET /v3/travel-rule/transfers/?counterparty={vasp_id}.

  Failure modes:

  * 404 - no directory entry or listed Didit network member has this id.

  Full guide: /transaction-monitoring/travel-rule#directory.\`
</pre>

Einfügen in


## OpenAPI

````yaml de/openapi-25.json GET /v3/travel-rule/vasps/{vasp_id}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/vasps/{vasp_id}/:
    get:
      tags:
        - Travel Rule
      summary: Eintrag aus dem VASP-Verzeichnis abrufen
      description: >-
        Ein Verzeichniseintrag oder Didit-Netzwerkmitglied anhand der von der
        Suche zurückgegebenen ID, mit denselben Feldern und den Routen, über die
        Ihre Anwendung darauf zugreifen kann.
      operationId: getTravelRuleVasp
      parameters:
        - name: vasp_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Die ID einer Zeile aus der Antwort von GET /v3/travel-rule/vasps/.
      responses:
        '200':
          description: Der Eintrag.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaspDirectoryEntry'
        '404':
          description: >-
            Kein Eintrag und kein gelistetes Didit-Netzwerkmitglied besitzt
            diese ID.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: No directory entry has this id.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/ \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.retrieve_vasp(
                "11111111-2222-3333-4444-555555555555",
            )
            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.retrieveVasp("11111111-2222-3333-4444-555555555555");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RetrieveVASP(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().retrieveVasp("11111111-2222-3333-4444-555555555555");

            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->retrieveVasp('11111111-2222-3333-4444-555555555555');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.travel_rule.retrieve_vasp("11111111-2222-3333-4444-555555555555")

            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.RetrieveVaspAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    VaspDirectoryEntry:
      type: object
      description: >-
        Ein VASP des Verzeichnisses oder ein Mitglied des Didit-Netzwerks mit
        den Routen, über die Ihre Anwendung ihn erreicht. Ein Kunde ist nur dann
        Mitglied des Didit-Netzwerks, solange seine Anwendung live ist, seine
        Travel Rule aktiviert ist, sein Profil auffindbar ist, er einen
        juristischen Namen und eine bestätigte Compliance-E-Mail hat und Didit
        die Anwendung nicht als Test-, Demo- oder interne Anwendung markiert
        hat. Jede Zeile enthält außerdem die geteilte Due-Diligence-Bewertung
        (dd_score, risk_level, responsiveness, essential_checks) sowie die
        eigene Entscheidung, das Entity-Screening und die Fragebögen Ihrer
        Anwendung, die kein anderer Kunde sieht.
      properties:
        id:
          type: string
          format: uuid
          description: Die ID des Eintrags, für GET /v3/travel-rule/vasps/{vasp_id}/.
        kind:
          type: string
          enum:
            - directory
            - didit
          description: >-
            directory für einen Eintrag des gemeinsamen Verzeichnisses; didit
            für ein Mitglied des Didit-Netzwerks.
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          description: ISO 3166-Ländercode, wie von der Quelle bereitgestellt.
        domains:
          type: array
          items:
            type: string
          description: Die Web-Domains des VASPs. Für Didit-Netzwerkmitglieder immer leer.
        reachable:
          type: boolean
          description: >-
            Gibt an, ob Ihre Anwendung über eine verfügbare Route zu diesem VASP
            oder zu einer seiner Einheiten für eine Marke verfügt. Bei
            Mitgliedern des Didit-Netzwerks immer true, außer bei einer
            Sandbox-Anwendung, bei der jede Zeile false ist.
        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 (aus dem globalen
                  LEI-Register), network_name (der Name in einem
                  Travel-Rule-Netzwerk), attribution (der Entitätsname, den die
                  Blockchain-Analyse den Wallets des VASP zuweist), merged (der
                  Name eines Duplikateintrags, der mit diesem zusammengeführt
                  wurde) oder staff.
          description: Andere Namen, unter denen der VASP geführt wird.
        networks:
          type: array
          items:
            type: object
            description: >-
              Ein aktueller Eintrag dieses VASP im Mitgliederverzeichnis eines
              Travel Rule-Netzwerks. Ein TRISA-Eintrag gibt an, wer der VASP auf
              TRISA ist; Didit hat keinen TRISA-Kanal, daher ist dies niemals
              eine Route.
            properties:
              network:
                type: string
                enum:
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - TRISA
              code:
                type: string
                description: Die Kennung des VASPs in diesem Netzwerk.
              listed_name:
                type: string
                description: Der Name, unter dem das Netzwerk den VASP führt.
              country:
                type: string
                description: Das Land, das das Netzwerk auflistet, sofern angegeben.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Wann Didit-Mitarbeiter den Eintrag verifiziert haben. Null für
                  Einträge, die aus einem öffentlichen Verzeichnis gelesen
                  wurden.
              last_seen_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Wann die Quelle den Eintrag zuletzt aufgeführt hat. Ein
                  Eintrag, den die Quelle drei Wochen lang nicht aufgeführt hat,
                  wird entfernt.
              source:
                type: string
                enum:
                  - trisa_directory
                  - staff
                description: >-
                  Woher der Eintrag stammt: aus dem öffentlichen
                  TRISA-Verzeichnis oder von Didit-Mitarbeitern.
        routes:
          type: array
          items:
            type: object
            description: >-
              Eine Möglichkeit, wie Ihre Anwendung Travel-Rule-Daten an diesen
              VASP übermitteln kann, in der Reihenfolge, in der sie vom Versand
              ausprobiert werden. Eine Netzwerkroute erfordert eine
              Mitgliedschaft in diesem Netzwerk: Ihre eigene (im Marketplace
              verknüpft) oder die von Didit, sobald Didit eine besitzt. Ohne
              diese wird die Route mit dem Grund als nicht verfügbar aufgeführt
              und niemals als Möglichkeit, den VASP zu erreichen.
            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: >-
                  Warum eine nicht verfügbare Route nicht verwendet werden kann:
                  no_membership (weder Sie noch Didit besitzen eine
                  Mitgliedschaft in diesem Netzwerk), network_switched_off (Sie
                  haben dieses Netzwerk in Ihren Einstellungen deaktiviert) oder
                  sandbox_application (eine Sandbox-Anwendung sendet nur an den
                  Didit Test VASP, daher ist keine Route für sie verfügbar).
                  Leer, wenn die Route verfügbar ist.
              via:
                type: string
                enum:
                  - ''
                  - own_membership
                  - didit_membership
                  - directory
                  - contact
                  - didit_network
                description: >-
                  Wie eine verfügbare Route erreicht wird: own_membership oder
                  didit_membership für ein Netzwerk-Rail, directory für einen
                  vom Verzeichnis verifizierten TRP-Endpoint, contact für das
                  EMAIL-Rail, didit_network für ein Didit-Netzwerkmitglied.
                  Leer, wenn die Route nicht verfügbar ist.
        umbrella:
          type: object
          nullable: true
          description: >-
            Die Marke, deren reguliertes Unternehmen dieser Eintrag ist. Null,
            wenn er nicht Teil einer solchen ist.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        entities:
          type: array
          items:
            type: object
            description: >-
              Eine regulierte Einheit einer Marke: die juristische Person, die
              einen Transfer empfängt.
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              lei:
                type: string
              jurisdiction:
                type: string
              reachable:
                type: boolean
                description: >-
                  Gibt an, ob Ihre Anwendung über eine verfügbare Route dorthin
                  verfügt.
          description: >-
            Für eine Marke: die regulierten Entitäten, die ihre Überweisungen
            empfangen. Eine Überweisung, die die Marke benennt, geht an die
            erreichbare Entität in der von ihr angegebenen Jurisdiktion
            (beneficiary_data.counterparty_vasp_jurisdiction), andernfalls an
            die Entität, die laut Blockchain-Analytics-Attribution mit der
            Ziel-Wallet verknüpft ist, andernfalls an die einzige erreichbare
            Entität, wenn keine Jurisdiktion angegeben ist. Zwischen zwei
            gleichermaßen passenden Entitäten wird niemals geraten.
        contacts:
          type: array
          items:
            type: object
            description: Ein Compliance-Kontakt, an den der EMAIL-Kanal schreiben kann.
            properties:
              id:
                type: string
                format: uuid
              email:
                type: string
                format: email
              name:
                type: string
              source:
                type: string
                enum:
                  - staff
                  - application
                  - learned
                description: >-
                  staff: Von Didit kuratiert; application: Von Ihrer Anwendung
                  hinzugefügt; learned: Eine Adresse, die eine
                  Travel-Rule-Anfrage über ihren Antwort-Link beantwortet hat.
              scope:
                type: string
                enum:
                  - platform
                  - application
                description: >-
                  Plattform-Kontakte werden für die Überweisungen aller
                  Didit-Kunden verwendet; Anwendungs-Kontakte sind privat für
                  Ihre Anwendung, die nur ihre eigenen sieht.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Wann jemand an dieser Adresse eine Anfrage beantwortet hat.
                  Null, wenn dies noch nicht geschehen ist.
          description: >-
            Die Kontakte der Plattform für diesen VASP und die Ihrer eigenen
            Anwendung.
        dd_status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
            - REJECTED
          description: >-
            Didits Verifizierungsstatus des Eintrags, bewertet durch die
            Verifizierungskomponente von dd_score. Immer COMPLETED für ein
            Mitglied des Didit-Netzwerks.
        dd_score:
          type: integer
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Der geteilte Due-Diligence-Score eines Verzeichniseintrags, 0 bis
            100, wobei ein höherer Wert sicherer ist (siehe dd_score_semantic):
            die Summe der Punkte in dd_score_breakdown. Null für ein
            Didit-Netzwerkmitglied, das nicht bewertet wird. Ein Eintrag, der
            noch nicht bewertet wurde (dd_assessed_at null), zeigt 0 mit einem
            leeren risk_level; lesen Sie daher risk_level statt des Roh-Scores
            aus.
        reachable_rails:
          type: array
          items:
            type: string
            enum:
              - INTERNAL
              - TRP
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - EMAIL
          description: >-
            Auf dem Eintrag erfasste Zahlungswege. Lesen Sie Routen, um zu
            sehen, was Ihre Anwendung aktuell nutzen kann.
        is_didit_customer:
          type: boolean
          description: >-
            true für ein Mitglied des Didit-Netzwerks (dd_status ist für diese
            immer COMPLETED, dd_score null und risk_level leer) und für einen
            Verzeichniseintrag, der mit einem Didit-Kunden verknüpft ist.
        dd_score_breakdown:
          type: object
          description: >-
            Ein Objekt pro Komponente von dd_score. Komponenten, ihre Gewichtung
            (max.) und ihre Ursachencodes: 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). Leer für ein
            Mitglied des Didit-Netzwerks.
          additionalProperties:
            type: object
            properties:
              points:
                type: number
                description: >-
                  Punkte, die die Komponente beiträgt, gerundet auf eine
                  Dezimalstelle.
              max:
                type: integer
                description: >-
                  Das Gewicht der Komponente: die Punkte, die sie im besten Fall
                  beiträgt.
              reason:
                type: string
                description: Maschinenlesbarer Code der Entscheidung der Komponente.
              detail:
                type: string
                description: Einzeilige englische Erklärung.
        dd_assessed_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Wann dd_score, risk_level und responsiveness zuletzt berechnet
            wurden: nachdem ein Austausch mit dem Eintrag abgeschlossen, beendet
            oder abgelaufen ist, keine Übereinstimmung ergibt oder abgelehnt
            wird, wenn Didit den Eintrag aktualisiert oder kuratiert, und bei
            der wöchentlichen Verzeichnisaktualisierung. Null für ein Mitglied
            des Didit-Netzwerks.
        dd_score_semantic:
          type: string
          enum:
            - higher_is_safer
          description: 'In welche Richtung dd_score verläuft: immer higher_is_safer.'
        risk_level:
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - ''
          description: >-
            Das Band, in das dd_score fällt: LOW (70 oder mehr), MEDIUM (40 bis
            69) oder HIGH (unter 40). Leer bei einem Didit-Netzwerkmitglied und
            bei einem Eintrag, der noch nicht bewertet wurde. Filtern Sie danach
            mit risk. Ihr eigenes als auffällig markiertes Screening ändert
            diesen gemeinsamen Wert niemals: Es setzt stattdessen
            counterparty_risk_level in Ihren Regeln auf HIGH.
        responsiveness:
          type: object
          description: >-
            Gibt an, ob der VASP Travel-Rule-Anfragen beantwortet: der Anteil
            der von Didit-Kunden in den letzten 90 Tagen an ihn gestellten
            Anfragen, die er beantwortet hat. Es zählen nur Anfragen, die über
            eine Netzwerk- oder Protokollschiene oder per E-Mail an eine
            geteilte Adresse (die Compliance-Adresse des Eintrags oder einen
            Plattformkontakt) gesendet wurden; eine Anfrage an eine von einem
            Kunden eingegebene Adresse oder an den privaten Kontakt eines Kunden
            zählt niemals. Eine abgelaufene Anfrage gilt als unbeantwortet; ein
            abgeschlossener Austausch, eine Ablehnung oder ein Datenkonflikt
            gilt als Antwort; eine stornierte Anfrage oder eine nicht
            erreichbare Schiene ist keines von beidem. Für ein
            Didit-Netzwerkmitglied immer UNKNOWN mit Zählerständen von null.
          properties:
            status:
              type: string
              enum:
                - RESPONSIVE
                - UNRESPONSIVE
                - UNKNOWN
              description: >-
                UNKNOWN bei weniger als 5 entschiedenen Anfragen im Zeitfenster;
                UNRESPONSIVE, wenn weniger als 10 Prozent davon beantwortet
                wurden; andernfalls RESPONSIVE.
            answered:
              type: integer
              description: >-
                Entschiedene Anfragen im Zeitfenster, die der VASP beantwortet
                hat.
            total:
              type: integer
              description: >-
                Entschiedene Anfragen im Zeitfenster: beantwortet plus
                abgelaufen.
            computed_at:
              type: string
              format: date-time
              nullable: true
        essential_checks:
          type: object
          description: >-
            Der Bericht über die grundlegenden Prüfungen eines
            Verzeichniseintrags, der ausschließlich aus den verifizierten
            Quellen der Plattform erstellt wird: Registrierung (ein offizielles
            Register führt den VASP: das vorläufige MiCA-Register der EU, das
            öffentliche TRISA-Verzeichnis oder das weltweite LEI-Register),
            Lizenz (eine MiCA-Genehmigung liegt vor und ist aktuell), Domain
            (die Domain des Eintrags stimmt mit seinem TRP-Endpoint oder der
            Website aus seinem Register überein) und LEI (sein LEI-Eintrag ist
            aktiv, ausgestellt und stimmt mit den Namen und dem Land des
            Eintrags überein). Die Essentials-Komponente von dd_score ist der
            Anteil der entschiedenen Prüfungen, die bestanden werden. Leer, bis
            die wöchentliche Verzeichnisaktualisierung den Eintrag erstmals
            prüft, und für ein Didit-Netzwerkmitglied immer leer.
          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, wenn keine hinterlegte Quelle die Prüfung
                      entscheiden kann.
                  reason:
                    type: string
                    description: Maschinenlesbarer Code der Entscheidung.
                  detail:
                    type: string
                    description: Einzeilige englische Erklärung.
            passed:
              type: integer
            failed:
              type: integer
            unknown:
              type: integer
            total:
              type: integer
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            Die Entscheidung Ihrer Anwendung über diesen VASP oder bei einer
            Entität ohne eigene Entscheidung die ihrer Marke (inherited_from
            benennt die Marke). Null, wenn keine vorhanden ist. Nur für Ihre
            Anwendung sichtbar.
        entity_screening:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
          nullable: true
          description: >-
            Das neueste Screening auf Sanktionen und negative Medienberichte
            dieses VASP durch Ihre Anwendung. Null, wenn Sie es nie überprüft
            haben. Nur für Ihre Anwendung sichtbar.
        questionnaires:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleCounterpartyQuestionnaire'
          description: >-
            Die Due-Diligence-Fragebögen Ihrer Anwendung mit diesem VASP,
            neueste zuerst. Nur für Ihre Anwendung sichtbar.
      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: >-
        Die Entscheidung Ihrer Anwendung über einen Gegenpartei-VASP. Nur für
        Ihre Anwendung sichtbar: Sie ändert niemals den gemeinsam genutzten
        Verzeichniseintrag und ein anderer Kunde sieht sie nie. Sie wirkt sich
        nur über Ihre Transaktionsregeln aus (das Regelfeld
        counterparty_dd_status sowie die Voreinstellungen
        travel-rule-counterparty-blocked und
        travel-rule-counterparty-restricted); sie ändert niemals, wie ein
        Transfer weitergeleitet wird.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED: Ihr Team hat die Gegenpartei freigegeben. RESTRICTED:
            Überweisungen an sie können nach Prüfung fortgesetzt werden.
            BLOCKED: Ihr Team hat sie abgelehnt.
        reason:
          type: string
          maxLength: 255
          description: >-
            Freitext-Begründung, die Sie angegeben haben; leer, wenn keine
            vorhanden ist.
        decided_by:
          type: string
          description: >-
            Der Konsolenbenutzer, der die Entscheidung getroffen oder zuletzt
            geändert hat. Leer, wenn sie durch einen API-Schlüssel getroffen
            wurde.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            Die Marke, deren Entscheidung dieses Unternehmen folgt, da Sie für
            das Unternehmen selbst keine getroffen haben. Null, wenn die
            Entscheidung von der Gegenpartei selbst stammt.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
    TravelRuleCounterpartyScreening:
      type: object
      description: >-
        Ein Screening auf Sanktionen und negative Medienberichte der
        Gegenpartei-Entität, für Ihre Anwendung durchgeführt und ihr in Rechnung
        gestellt. Nur für Ihre Anwendung sichtbar: Ein anderer Kunde sieht dies
        niemals.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Genehmigt: Kein möglicher Treffer erfordert Aufmerksamkeit. In
            Prüfung oder Abgelehnt: Ein möglicher Treffer bei Sanktionen oder
            negativen Medienberichten.
        total_hits:
          type: integer
          description: Wie viele mögliche Treffer das Screening zurückgegeben hat.
        score:
          type: number
          nullable: true
          description: >-
            Der höchste Risiko-Score unter den möglichen Übereinstimmungen.
            Null, wenn nichts übereinstimmte.
        screened_at:
          type: string
          format: date-time
        fresh:
          type: boolean
          description: >-
            Gibt an, ob das Screening neuer als fresh_days (30 Tage) ist. Ein
            frisches Screening wird wiederverwendet, anstatt erneut abgerechnet
            zu werden.
        flagged:
          type: boolean
          description: >-
            true, solange das Screening aktuell ist und sein Status In Review
            oder Declined lautet. Solange Ihr neuestes Screening markiert ist
            und das Gegenpartei-Screening aktiv bleibt, ist
            counterparty_risk_level in Ihren Regeln HIGH.
    TravelRuleCounterpartyQuestionnaire:
      type: object
      description: >-
        Ein Due-Diligence-Fragebogen, den Ihre Anwendung an die Gegenpartei
        gesendet hat: Didits Standard-Fragebogen, per E-Mail an eine hinterlegte
        Compliance-Adresse mit einem einmaligen Link zur Beantwortung gesendet.
        Nur für Ihre Anwendung sichtbar.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - SENT
            - ANSWERED
            - EXPIRED
          description: >-
            SENT: Warten auf Antworten. ANSWERED: Die Gegenpartei hat jede Frage
            beantwortet. EXPIRED: Der Antwortlink wurde unbeantwortet
            geschlossen (die Frist ist abgelaufen oder ein neuerer Fragebogen
            hat ihn ersetzt), oder die Antworten haben valid_until
            überschritten.
        form_version:
          type: string
          description: >-
            Version des Standardfragebogens von Didit, zu dem die Antworten
            gehören. Derzeit 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: >-
            Die Frist für die Beantwortung, 30 Tage nach dem Versenden. Danach
            funktioniert der Link nicht mehr.
        answered_at:
          type: string
          format: date-time
          nullable: true
        valid_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            Wie lange die Antworten aktuell bleiben: 365 Tage nach Beantwortung.
            Null bis zur Beantwortung.
        current:
          type: boolean
          description: >-
            true, solange der Fragebogen ANSWERED ist und valid_until noch nicht
            überschritten wurde.
        answers:
          type: object
          additionalProperties:
            type: string
          description: >-
            Die Antworten, geschlüsselt nach Fragen-ID: legal_name, licensing,
            jurisdictions, aml_program, compliance_officer, sanctions_screening,
            transaction_monitoring, travel_rule, custody, ownership,
            record_keeping, data_protection. Jede Antwort umfasst bis zu 2.000
            Zeichen. Leer, bis sie beantwortet wurden.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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