> ## 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 أو إرساله بالبريد الإلكتروني

> في Didit، أنشئ رابط Travel Rule للمستخدم النهائي أو أرسله بالبريد الإلكتروني، مع انتهاء الصلاحية والإلغاء ونتيجة التسليم.

تتيح واجهة برمجة تطبيقات رابط المستخدم النهائي في Travel Rule من Didit إصدار رابط يُمكّن المستخدم من إكمال اختيار المحفظة أو الطرف المقابل، ويمكن إرساله إلى عنوان بريده الإلكتروني المسجل.

أرسل `{"channel": "link"}` لنسخ رابط، أو `{"channel": "email"}` لمحاولة إرساله أيضاً عبر البريد الإلكتروني. إذا حذفت `channel` فالقيمة الافتراضية هي `link`. يستخدم البريد الإلكتروني العنوان المسجل للمستخدم النهائي في Didit، ولغة جلسة التحقق عند توفرها. لا يمكنك تحديد مستلم عشوائي.

تتطلب الواجهة صلاحية الكتابة على المعاملات، وتحويلاً صادراً في حالة `AWAITING_COUNTERPARTY` أو `COUNTERPARTY_VASP_NOT_FOUND` أو `COUNTERPARTY_VASP_NOT_REACHABLE` أو `UNCONFIRMED_OWNERSHIP` أو `ON_HOLD`. تُرجع الحالات الأخرى الرمز `409`، ويُرجع المعاملة غير المعروفة أو التحويل المفقود الرمز `404`.

تحتوي الاستجابة على `end_user_link` و`expires_at` و`emailed_to` و`email_available`. يُلغي الرابط الجديد الروابط المفتوحة السابقة للمستخدم النهائي لذلك التحويل. شارك الرابط مع المستخدم النهائي المقصود فقط.

عندما لا يوجد بريد إلكتروني مسجل، يُرجع `channel: email` الرمز `409` مع `code: end_user_email_missing`؛ اطلب `channel: link` بدلاً من ذلك. إذا فشل الإرسال، تظل الواجهة تُرجع رابطاً صالحاً للاستخدام مع كون `emailed_to` فارغًا. تعني `email_available` وجود عنوان بريد إلكتروني، لا نجاح التسليم.

للاطلاع على الاختيار الصريح للمستخدم أثناء الإنشاء، راجع [إنشاء معاملة](https://docs.didit.me/ar/management-api/transactions/create.md) و[دليل Travel Rule](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md#اكتشاف-الطرف-المقابل). للإجراءات على التحويل، راجع [تحديث تحويل](https://docs.didit.me/ar/management-api/travel-rule/update-transfer.md).


## OpenAPI

````yaml ar/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 التحقق من الهوية. قم بالمصادقة باستخدام الرأس 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: أنشئ رابط Travel Rule للمستخدم النهائي أو أرسله بالبريد الإلكتروني
      description: >-
        إصدار رابط جديد وإبطال الروابط المفتوحة السابقة لهذا التحويل. يتطلب
        صلاحية الكتابة على المعاملات وتحويلًا صادرًا في الحالة
        AWAITING_COUNTERPARTY أو COUNTERPARTY_VASP_NOT_FOUND أو
        COUNTERPARTY_VASP_NOT_REACHABLE أو UNCONFIRMED_OWNERSHIP أو ON_HOLD. عند
        استخدام channel=email يُستخدم البريد الإلكتروني المسجل للمستخدم النهائي
        في Didit ولغة جلسة التحقق عند توفرهما. إذا فشل الإرسال يُعاد الرابط مع
        emailed_to فارغًا؛ وتشير email_available إلى توفر العنوان وليس إلى نجاح
        التسليم. راجع [روابط
        المستخدم](/ar/management-api/travel-rule/create-user-link).
      operationId: createTravelRuleUserLink
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: معرّف UUID الثابت للمعاملة من Didit التي تملك التحويل.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleUserLinkRequest'
            example:
              channel: link
      responses:
        '200':
          description: استجابة ناجحة.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleUserLinkResponse'
        '400':
          description: حقول الطلب غير صالحة.
        '403':
          description: الإذن بكتابة المعاملات مفقود.
        '404':
          description: المعاملة غير معروفة، أو لا توجد عملية نقل Travel Rule.
        '409':
          description: >-
            اتجاه الحوالة أو حالتها لا يسمح بالربط، أو أن channel=email لا يوجد
            له عنوان بريد للمستخدم النهائي. في الحالة الأخيرة يكون
            code=end_user_email_missing؛ أعد المحاولة مع channel=link.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: شرح التعارض.
                  code:
                    type: string
                    description: تظهر عندما يكون البريد الإلكتروني غير متاح.
                    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 تُرجع رابطًا جديدًا؛ والقيمة email تحاول أيضًا إرساله
            إلى البريد الإلكتروني المسجّل للمستخدم النهائي في سجل Didit.
          enum:
            - link
            - email
          default: link
    TravelRuleUserLinkResponse:
      type: object
      properties:
        end_user_link:
          type: string
          description: >-
            رابط جديد للمستخدم النهائي. تُلغى الروابط المفتوحة السابقة لهذا
            التحويل.
          format: uri
        expires_at:
          type: string
          description: انتهاء صلاحية الرابط.
          format: date-time
        emailed_to:
          type: string
          description: >-
            المستلم عند نجاح الإرسال، وإلا فسلسلة فارغة. ولا يزال يُرجع رابطاً
            قابلاً للاستخدام عند فشل البريد الإلكتروني.
        email_available:
          type: boolean
          description: هل يملك المستخدم النهائي بريداً إلكترونياً في سجله لدى Didit.
      required:
        - end_user_link
        - expires_at
        - emailed_to
        - email_available
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        مفتاح API الخاص بتطبيقك، من Developers -> API keys في Business Console.
        يمتلك المفتاح الأساسي وصولاً كاملاً. يمكن تحديد نطاق المفتاح المسمى: لا
        شيء، أو قراءة، أو كتابة لكل مورد، ومحدوداً ببعض مسارات العمل أو بالجلسات
        المقبولة، وبقائمة من عناوين IP، وبتاريخ انتهاء الصلاحية. يشير 401 إلى أن
        المفتاح غير صحيح أو ملغى أو منتهي الصلاحية؛ ويشير 403 إلى أنه لم يتم
        إرسال أي مفتاح، أو أن المفتاح ليس لديه حق الوصول إلى هذا المورد أو
        الإجراء، أو أن الطلب جاء من عنوان خارج قائمة عناوين IP الخاصة به؛ ويشير
        404 في مسار جلسة إلى أن الجلسة خارج مسارات العمل أو الحالات الخاصة
        بالمفتاح. يتلقى المفتاح الذي لا يمتلك حق الوصول إلى الوسائط عناوين URL
        للصور ومقاطع الفيديو وملفات PDF كـ null، ويتلقى المفتاح الذي لا يمتلك
        إذن كتابة للجلسات روابط الجلسة وtoken كـ null. راجع
        https://docs.didit.me/console/api-keys.

````

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