> ## 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 im privaten Travel-Rule-Verzeichnis anlegen

> Mit Didit fehlende Gegenpartei im privaten Travel-Rule-Verzeichnis Ihrer Anwendung anlegen, Compliance-Kontakt speichern und optional einladen.

Didit's VASP-Erstellungs-API fügt eine Gegenpartei privat dem Verzeichnis Ihrer Anwendung hinzu und sendet optional eine Einladung an deren Compliance-E-Mail-Adresse.

Senden Sie `name` und `email`. Sie können außerdem `lei` (20 alphanumerische Zeichen), `jurisdiction` (ein ISO-Ländercode im Alpha-2- oder Alpha-3-Format) und `invite` (Standardwert: `false`) angeben. Leere optionale Werte für LEI und jurisdiction werden akzeptiert. Die API benötigt Schreibzugriff auf Transaktionen.

Die Antwort `201` ist ein Verzeichniseintrag mit `source: added_by_you`. Der Compliance-Kontakt ist nur für Ihre Anwendung sichtbar. Das Hinzufügen eines Eintrags bestätigt seine Identität nicht und macht ihn nicht zu einem Mitglied des Didit-Netzwerks.

Bei einer Übereinstimmung des sichtbaren Namens oder der LEI gibt die API `409` mit `vasp_id` zurück. Wählen Sie in diesem Fall stattdessen den bestehenden Eintrag aus. Ungültige Felder führen zu `400`.

Verwenden Sie [VASP-Verzeichnis durchsuchen](https://docs.didit.me/de/management-api/travel-rule/search-vasps.md), um den Eintrag und seine verfügbaren Routen zu finden. Verwenden Sie dessen `id` mit der Aktion `beneficiary_vasp` in [Eine Übertragung aktualisieren](https://docs.didit.me/de/management-api/travel-rule/update-transfer.md). Hinweise zu Routing und Sorgfaltspflicht finden Sie im [Leitfaden zum Verzeichnis](https://docs.didit.me/de/transaction-monitoring/travel-rule.md#verzeichnis).


## OpenAPI

````yaml de/openapi-25.json POST /v3/travel-rule/vasps/
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/:
    post:
      tags:
        - Travel Rule
      summary: Einen privaten VASP-Verzeichniseintrag erstellen
      description: >-
        Fügen Sie einen VASP privat zu Ihrer Anwendung hinzu und laden Sie ihn
        optional ein. Erfordert Schreibzugriff auf Transaktionen. Die Antwort
        verwendet source=added_by_you. Ein übereinstimmender sichtbarer Name
        oder eine LEI gibt 409 mit der bestehenden vasp_id zurück. Siehe
        [Verzeichnis durchsuchen](/de/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: Erfolgreiche Antwort.
          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: Ungültige Anfragefelder.
        '403':
          description: Fehlende Berechtigung zum Schreiben von Transaktionen.
        '409':
          description: >-
            Ein sichtbarer Eintrag entspricht bereits dem Namen oder der LEI.
            Wählen Sie die bestehende vasp_id aus.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Erläuterung des Konflikts.
                  vasp_id:
                    type: string
                    description: Vorhandene VASP-Kennung.
                    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: >-
            Name des VASP, von führenden und nachfolgenden Leerzeichen
            bereinigt; darf nicht leer sein.
          minLength: 1
          maxLength: 255
        email:
          type: string
          description: >-
            E-Mail-Adresse für Compliance, die als anwendungsprivater Kontakt
            gespeichert und für eine optionale Einladung verwendet wird.
          format: email
          maxLength: 254
        lei:
          type: string
          description: Optionale LEI, in Großbuchstaben normalisiert.
          pattern: ^([A-Za-z0-9]{20})?$
          default: ''
        jurisdiction:
          type: string
          description: >-
            Optionaler ISO-3166-Ländercode mit Alpha-2 oder Alpha-3, in
            Großbuchstaben normalisiert.
          maxLength: 3
          default: ''
        invite:
          type: boolean
          default: false
          description: Sendet eine Einladung an die angegebene E-Mail-Adresse.
      required:
        - name
        - email
    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 gemeinsam genutzten oder anwendungsinternen
            Verzeichniseintrag; 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.
        source:
          type: string
          description: >-
            directory für einen gemeinsam genutzten Verzeichniseintrag,
            added_by_you für Ihren anwendungsinternen Eintrag oder didit_network
            für einen Verzeichniseintrag, der mit einem Didit-Kunden verknüpft
            ist. Gesonderte Mitgliedsergebnisse mit kind=didit können dieses
            Feld auslassen; verwenden Sie kind, um sie zu identifizieren.
          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: >-
        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.