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

# Travel-Rule-Verifizierungslink erstellen oder per E-Mail senden

> Mit Didit einen neuen Travel-Rule-Verifizierungslink erstellen oder an die hinterlegte E-Mail-Adresse senden – inkl. Ablauf, Widerruf und Zustellstatus.

Didit stellt über die Travel-Rule-API für Endbenutzer-Links einen Link bereit, mit dem der Endbenutzer seine Wallet- oder Gegenpartei-Auswahl abschließen kann. Der Link kann an die hinterlegte E-Mail-Adresse gesendet werden.

Senden Sie `{"channel": "link"}`, um einen Link zu kopieren, oder `{"channel": "email"}`, um zusätzlich einen E-Mail-Versand zu versuchen. Wenn Sie `channel` weglassen, ist der Standardwert `link`. Für den E-Mail-Versand werden die im Didit-Datensatz des Endbenutzers hinterlegte Adresse und, sofern verfügbar, die Sprache der Verifizierungssitzung verwendet. Sie können keinen beliebigen Empfänger angeben.

Die API erfordert Schreibzugriff auf Transaktionen sowie einen ausgehenden Transfer im Status `AWAITING_COUNTERPARTY`, `COUNTERPARTY_VASP_NOT_FOUND`, `COUNTERPARTY_VASP_NOT_REACHABLE`, `UNCONFIRMED_OWNERSHIP` oder `ON_HOLD`. Bei anderen Status gibt die API `409` zurück. Eine unbekannte Transaktion oder ein fehlender Transfer führt zu `404`.

Die Antwort enthält `end_user_link`, `expires_at`, `emailed_to` und `email_available`. Ein neuer Link widerruft alle zuvor erstellten, noch offenen Endbenutzer-Links für diesen Transfer. Geben Sie den Link nur an den vorgesehenen Endbenutzer weiter.

Wenn keine hinterlegte E-Mail-Adresse vorhanden ist, gibt `channel: email` den Fehler `409` mit `code: end_user_email_missing` zurück. Verwenden Sie in diesem Fall stattdessen `channel: link`. Schlägt der Versand fehl, gibt die API trotzdem einen verwendbaren Link zurück, und `emailed_to` ist leer. `email_available` bedeutet, dass eine Adresse vorhanden ist, nicht dass die Zustellung erfolgreich war.

Zur ausdrücklichen Auswahl des Benutzers bei der Erstellung finden Sie Informationen unter [Transaktion erstellen](https://docs.didit.me/de/management-api/transactions/create.md) und im [Travel-Rule-Leitfaden](https://docs.didit.me/de/transaction-monitoring/travel-rule.md#ermittlung-der-gegenpartei). Zu Transfer-Aktionen finden Sie Informationen unter [Transfer aktualisieren](https://docs.didit.me/de/management-api/travel-rule/update-transfer.md).


## OpenAPI

````yaml de/openapi-25.json POST /v3/transactions/{transaction_id}/travel-rule/user-link/
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/transactions/{transaction_id}/travel-rule/user-link/:
    post:
      tags:
        - Travel Rule
      summary: Travel-Rule-Link für Endbenutzer erstellen oder per E-Mail senden
      description: >-
        Stellt einen neuen Link aus und widerruft vorherige offene Links für
        diese Überweisung. Erfordert Schreibzugriff auf Transaktionen und eine
        ausgehende Überweisung im Status AWAITING_COUNTERPARTY,
        COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE,
        UNCONFIRMED_OWNERSHIP oder ON_HOLD. channel=email verwendet die
        E-Mail-Adresse aus dem Didit-Datensatz des Endbenutzers und die Sprache
        der Verifizierungssitzung, sofern verfügbar. Bei einem Versandfehler
        wird der Link mit leerem emailed_to zurückgegeben; email_available gibt
        die Verfügbarkeit der Adresse an, nicht die Zustellung. Siehe
        [Benutzerlinks](/de/management-api/travel-rule/create-user-link).
      operationId: createTravelRuleUserLink
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: Stabile Transaktions-UUID von Didit, zu der der Transfer gehört.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleUserLinkRequest'
            example:
              channel: link
      responses:
        '200':
          description: Erfolgreiche Antwort.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleUserLinkResponse'
        '400':
          description: Ungültige Anfragefelder.
        '403':
          description: Fehlende Berechtigung zum Schreiben von Transaktionen.
        '404':
          description: Unbekannte Transaktion oder keine Travel-Rule-Übertragung.
        '409':
          description: >-
            Die Transferrichtung oder der Transferstatus lässt keine Verknüpfung
            zu, oder channel=email hat keine Adresse des Endbenutzers. Für
            Letzteres gilt code=end_user_email_missing. Wiederholen Sie den
            Vorgang mit channel=link.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Erläuterung des Konflikts.
                  code:
                    type: string
                    description: Vorhanden, wenn email nicht verfügbar ist.
                    enum:
                      - end_user_email_missing
                required:
                  - detail
              example:
                detail: >-
                  This end user has no email on their Didit record. Copy the
                  link instead.
                code: end_user_email_missing
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/user-link/'
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"channel": "link"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.travel_rule.create_user_link(
                "11111111-2222-3333-4444-555555555555",
                channel="link",
            )
            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.transactions.travelRule.createUserLink("11111111-2222-3333-4444-555555555555",
            {
              channel: "link",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.CreateUserLink(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleUserLinkRequest{\n\tChannel: didit.Some(didit.TravelRuleUserLinkRequestChannel(\"link\")),\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.TravelRuleUserLinkRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.transactions().travelRule().createUserLink("11111111-2222-3333-4444-555555555555",
            TravelRuleUserLinkRequest.builder()
                    .channel(TravelRuleUserLinkRequest.Channel.of("link"))
                    .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->transactions->travelRule->createUserLink('11111111-2222-3333-4444-555555555555',
            [
                'channel' => 'link',
            ]);

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

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

            result = didit.transactions.travel_rule.create_user_link(
              "11111111-2222-3333-4444-555555555555",
              channel: "link"
            )
            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.Transactions.TravelRule.CreateUserLinkAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleUserLinkRequest

            {
                Channel = new TravelRuleUserLinkRequestChannel("link"),
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleUserLinkRequest:
      type: object
      properties:
        channel:
          type: string
          description: >-
            link gibt einen neuen Link zurück; email versucht außerdem, ihn an
            die E-Mail-Adresse des Endbenutzers im Didit-Datensatz zu senden.
          enum:
            - link
            - email
          default: link
    TravelRuleUserLinkResponse:
      type: object
      properties:
        end_user_link:
          type: string
          description: >-
            Neuer Link für Endbenutzer. Bisherige offene Links für diese
            Transaktion werden widerrufen.
          format: uri
        expires_at:
          type: string
          description: Ablaufdatum des Links.
          format: date-time
        emailed_to:
          type: string
          description: >-
            Empfänger, wenn der Versand erfolgreich war, andernfalls eine leere
            Zeichenfolge. Ein Fehler beim E-Mail-Versand liefert trotzdem einen
            verwendbaren Link.
        email_available:
          type: boolean
          description: >-
            Ob der Endbenutzer eine E-Mail-Adresse in seinem Didit-Datensatz
            hat.
      required:
        - end_user_link
        - expires_at
        - emailed_to
        - email_available
  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.