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

# Buat atau Kirim Tautan Pengguna Akhir Travel Rule

> Terbitkan tautan Travel Rule baru atau kirim ke alamat terdaftar pengguna akhir dengan masa berlaku, pencabutan, dan hasil pengiriman dari Didit.

API tautan pengguna akhir Travel Rule dari Didit menerbitkan tautan agar pengguna dapat menyelesaikan pilihan dompet atau pihak lawan, dan dapat mengirimkannya ke alamat email yang tercatat.

Kirim `{"channel": "link"}` untuk menyalin tautan, atau `{"channel": "email"}` untuk sekaligus mencoba pengiriman email. Jika `channel` dihilangkan, nilai default-nya adalah `link`. Email menggunakan alamat pengguna akhir yang tercatat di Didit dan bahasa sesi verifikasi mereka jika tersedia. Anda tidak dapat menentukan penerima secara bebas.

API ini memerlukan akses tulis ke transaksi dan transfer keluar dengan status `AWAITING_COUNTERPARTY`, `COUNTERPARTY_VASP_NOT_FOUND`, `COUNTERPARTY_VASP_NOT_REACHABLE`, `UNCONFIRMED_OWNERSHIP` atau `ON_HOLD`. Status lain mengembalikan `409`; transaksi yang tidak dikenal atau transfer yang tidak ada mengembalikan `404`.

Respons berisi `end_user_link`, `expires_at`, `emailed_to` dan `email_available`. Tautan baru mencabut tautan pengguna akhir lain yang masih aktif untuk transfer tersebut. Bagikan hanya kepada pengguna akhir yang dituju.

Jika tidak ada email yang tercatat, `channel: email` mengembalikan `409` dengan `code: end_user_email_missing`; minta `channel: link` sebagai gantinya. Jika pengiriman gagal, API tetap mengembalikan tautan yang dapat digunakan dengan `emailed_to` kosong. `email_available` menunjukkan bahwa alamat ada, bukan bahwa pengiriman berhasil.

Untuk pilihan eksplisit oleh pengguna saat pembuatan, lihat [Buat transaksi](https://docs.didit.me/id/management-api/transactions/create.md) dan [panduan Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule.md#penemuan-pihak-lawan). Untuk tindakan pada transfer, lihat [Perbarui transfer](https://docs.didit.me/id/management-api/travel-rule/update-transfer.md).


## OpenAPI

````yaml id/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 Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/transactions/{transaction_id}/travel-rule/user-link/:
    post:
      tags:
        - Travel Rule
      summary: Buat atau kirim tautan pengguna akhir Travel Rule melalui email
      description: >-
        Terbitkan tautan baru dan cabut tautan terbuka sebelumnya untuk transfer
        ini. Memerlukan akses tulis ke transaksi dan transfer keluar dengan
        status AWAITING_COUNTERPARTY, COUNTERPARTY_VASP_NOT_FOUND,
        COUNTERPARTY_VASP_NOT_REACHABLE, UNCONFIRMED_OWNERSHIP atau ON_HOLD.
        channel=email menggunakan email rekaman Didit pengguna akhir dan bahasa
        sesi verifikasi jika tersedia. Jika pengiriman gagal, tautan
        dikembalikan dengan emailed_to kosong; email_available menunjukkan
        ketersediaan alamat, bukan status pengiriman. Lihat [Tautan
        pengguna](/id/management-api/travel-rule/create-user-link).
      operationId: createTravelRuleUserLink
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: >-
            UUID transaksi yang stabil dari Didit yang memiliki transfer
            tersebut.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleUserLinkRequest'
            example:
              channel: link
      responses:
        '200':
          description: Respons yang berhasil.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleUserLinkResponse'
        '400':
          description: Kolom permintaan tidak valid.
        '403':
          description: Tidak memiliki izin untuk menulis transaksi.
        '404':
          description: Transaksi tidak dikenal atau tidak ada transfer Travel Rule.
        '409':
          description: >-
            Arah atau status transfer tidak memungkinkan tautan, atau
            channel=email tidak memiliki alamat pengguna akhir. Untuk kasus yang
            terakhir, code=end_user_email_missing; coba lagi dengan
            channel=link.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Penjelasan konflik.
                  code:
                    type: string
                    description: Hadir ketika email tidak tersedia.
                    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 mengembalikan tautan baru; email juga mencoba mengirimkannya ke
            alamat email di catatan Didit pengguna akhir.
          enum:
            - link
            - email
          default: link
    TravelRuleUserLinkResponse:
      type: object
      properties:
        end_user_link:
          type: string
          description: >-
            Tautan end-user baru. Tautan terbuka sebelumnya untuk transfer ini
            dicabut.
          format: uri
        expires_at:
          type: string
          description: Waktu kedaluwarsa tautan.
          format: date-time
        emailed_to:
          type: string
          description: >-
            Penerima saat pengiriman berhasil, jika tidak maka string kosong.
            Kegagalan email tetap mengembalikan tautan yang dapat digunakan.
        email_available:
          type: boolean
          description: Apakah pengguna akhir memiliki email pada catatan Didit mereka.
      required:
        - end_user_link
        - expires_at
        - emailed_to
        - email_available
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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