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

# واجهة الحصول على المعاملة: تفاصيل KYT

> استرجع معاملة KYT من Didit: الأطراف المرتبطة، وطرق الدفع، والتنبيهات، ومطابقات القواعد، وفحوص Travel Rule، وروابط المعالجة، ولقطات الشبكة.



موجه API للحصول على المعاملة
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\`Fetch the full detail of a Didit monitored transaction through the Management API.

Endpoint:
GET https://verification.didit.me/v3/transactions/{transaction_id}/

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

Goal:
\- Retrieve every detail of a transaction — linked parties, payment methods, alerts, rule matches, travel-rule checks, remediation links, network snapshots, cost breakdown — so I can render a detail screen or feed a downstream decision.

Path parameter:
\- transaction_id - Didit's transaction uuid (the uuid returned by POST /v3/transactions/).
Your own txn_id is not accepted here and returns 404.

Example call:
curl -X GET "https://verification.didit.me/v3/transactions/{transaction_id}/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- uuid, transaction_number, txn_id — identifiers.
\- status, score, severity, decision_reason_code, decision_reason_label — current verdict.
\- direction, amount, currency, currency_type, action_type, payment_details, payment_txn_id - the submitted details as top-level fields (there is no transaction_details object, and currency_type carries the currency_kind you sent).
\- parties - party records with role APPLICANT (the subject) or COUNTERPARTY (the other side) and kind USER, BUSINESS or EXTERNAL, each with entity_type, vendor_data, full_name, address and device.
\- payment_methods - the linked payment methods, each with payment_method_type, account_id and role (for example SOURCE or DESTINATION).
\- cost_breakdown — provider-by-provider cost detail for this transaction.
\- rule_runs / alerts — which rules fired and their outcomes.
\- provider_results - crypto screening (blockchain analytics) results, when a screening ran.
\- travel_rule - the Travel Rule transfer (uuid, status, protocol, required, obligations_count, originator_data, beneficiary_data, metadata, direction, rail, counterparty_vasp, delivery, discovery, reason, next_actions), or null when the transaction has none.
For a COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer, reason says why it is stuck and next_actions what moves it on: email_undeliverable offers update_compliance_email then resend, delivery_failed offers resend, and a discovery reason (awaiting_end_user, directory_match_no_route, picked_member_without_proven_wallet, no_directory_match) offers select_counterparty_vasp, declare_self_hosted, add_vasp_hint and resend.
delivery is the newest message the transfer owes the other side (kind, status, rail, attempts, last_error, next_attempt_at, delivered_at), or null; discovery is the trace of where Didit looked for the counterparty.
On an inbound transfer, the counterparty's originator_data and beneficiary_data stay masked (data_masked: true) until wallet ownership is confirmed.
\- tags — Console tags (uuid, name, color).
\- assigned_to_name (the Console reviewer) is not part of this response; the list endpoint GET /v3/transactions/ returns it.

Use cases:
\- Render the Console-equivalent "Transaction detail" screen in your back-office.
\- Reconcile rule outcomes against your own ledger.
\- Poll after a transaction.status.updated webhook to fetch the fresh verdict.

Failure modes:
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401), or a key without permission for this action ({ "detail": "..." } envelope).
\- 404 - transaction not found in this application, including a transaction that belongs to another application (or deleted via the Console).
\- 429 — rate limited; back off and retry.

Side effects: none. This is a pure read.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

الصق في



## OpenAPI

````yaml ar/openapi-25.json GET /v3/transactions/{transaction_id}/
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}/:
    get:
      tags:
        - Transactions
      summary: الحصول على المعاملة
      description: >-
        استرجع سجل المراقبة الكامل لمعاملة واحدة: الأطراف، والدرجة/مستوى
        الخطورة، وتشغيلات القواعد، والتنبيهات، ونتيجة Travel Rule، وجلسة
        المعالجة.
      operationId: getTransaction
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: >-
            معرّف UUID الثابت للمعاملة من Didit (وهو `uuid` المُعاد من الإنشاء /
            القائمة، **وليس** `txn_id` الخاص بك).
          schema:
            type: string
            format: uuid
          example: abcdef12-3456-7890-abcd-ef1234567890
      responses:
        '200':
          description: تفاصيل المعاملة الكاملة.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
              examples:
                In review with an alert:
                  value:
                    uuid: abcdef12-3456-4890-abcd-ef1234567890
                    environment: live
                    transaction_number: 4123
                    txn_id: your-txn-2026-05-17-001
                    txn_date: '2026-05-17T08:42:00Z'
                    zone_id: Europe/Madrid
                    transaction_type: finance
                    action_type: withdrawal
                    direction: OUTBOUND
                    status: IN_REVIEW
                    source: LIVE
                    amount: '1500'
                    currency: EUR
                    currency_type: fiat
                    amount_in_default_currency: '1620.45'
                    default_currency_code: USD
                    preferred_currency_amount: '1620.45'
                    preferred_currency_code: USD
                    payment_details: Withdrawal to crypto wallet
                    payment_txn_id: null
                    score: 78
                    severity: HIGH
                    decision_reason_code: WALLET_HIGH_RISK
                    decision_reason_label: Destination wallet flagged as high risk
                    vendor_data: user-12345
                    metadata:
                      subject:
                        entity_type: individual
                        vendor_data: user-12345
                        full_name: Maria Garcia
                        address: {}
                        institution_details: {}
                        device_context: {}
                      counterparty: {}
                    props:
                      order_id: ord-9988
                    tags: []
                    parties:
                      - uuid: b1111111-2222-4333-8444-555555555555
                        role: APPLICANT
                        entity_type: individual
                        kind: USER
                        vendor_data: user-12345
                        full_name: Maria Garcia
                        first_name: null
                        last_name: null
                        country_code: null
                        dob: null
                        address: {}
                        institution_info: {}
                        device: {}
                        external_party_snapshot: null
                    payment_methods: []
                    documents: []
                    activities: []
                    alerts:
                      - uuid: a7b8c9d0-1234-4abc-9def-567890abcdef
                        title: Destination wallet flagged as high risk
                        description: Provider risk score exceeded the configured threshold.
                        severity: HIGH
                        status: OPEN
                        source: RULE
                        metadata: {}
                        created_at: '2026-05-17T08:42:12Z'
                        due_at: null
                    rule_runs: []
                    provider_results: []
                    travel_rule: null
                    network_snapshot: null
                    remediation: null
                    action_required: null
                    cost_breakdown: null
        '403':
          description: >-
            مفتاح API مفقود أو غير صالح أو ملغى، أو لا يمكن للمفتاح قراءة
            معاملات هذا التطبيق. يعيد المفتاح المفقود `403`؛ بينما يعيد المفتاح
            الخاطئ أو الملغى أو منتهي الصلاحية `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            لا توجد معاملة بمعرّف UUID هذا للتطبيق (محذوفة، أو لم يتم إنشاؤها
            مطلقاً، أو تتبع تطبيقاً آخر، أو أن مقطع المسار ليس معرّف UUID
            صالحاً).
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
        '429':
          description: >-
            تم تجاوز حد المعدل؛ تراجع مؤقتاً وأعد المحاولة بعد الفاصل الزمني
            الموضح في `Retry-After`.
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.retrieve(
                "abcdef12-3456-7890-abcd-ef1234567890",
            )
            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.retrieve("abcdef12-3456-7890-abcd-ef1234567890");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Retrieve(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\")\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.transactions().retrieve("abcdef12-3456-7890-abcd-ef1234567890");

            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->retrieve('abcdef12-3456-7890-abcd-ef1234567890');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.transactions.retrieve("abcdef12-3456-7890-abcd-ef1234567890")

            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.RetrieveAsync("abcdef12-3456-7890-abcd-ef1234567890");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TransactionDetail:
      type: object
      description: >-
        سجل المراقبة الكامل لمعاملة واحدة، كما يتم إرجاعه بواسطة `GET
        /v3/transactions/{transaction_id}/` و`POST /v3/transactions/`.
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            معرّف المعاملة الثابت من Didit. يُستخدم كـ `{transaction_id}`
            لعمليات الاستدعاء اللاحقة.
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            بيئة التطبيق الذي يملك المعاملة. يتم تخزين معاملة `sandbox` ولكن لا
            يتم تقييمها أو فحصها أو إرسال إشعارات بشأنها أو فوترتها مطلقاً، لذا
            فإن القيمة الفارغة لـ `rule_runs` تعني "لم يتم التقييم".
        transaction_number:
          type: integer
          description: >-
            رقم المعاملة التسلسلي بنطاق التطبيق المعروض في وحدة التحكم (مثل
            `4123`).
        txn_id:
          type: string
          description: >-
            معرّف `transaction_id` الذي أدخلته وقت الإنشاء (بحد أقصى 128 حرفاً).
            فريد لكل تطبيق.
        txn_date:
          type: string
          format: date-time
          description: >-
            وقت حدوث المعاملة (من `transaction_at`؛ القيمة الافتراضية هي وقت
            الإرسال).
        zone_id:
          type: string
          nullable: true
          description: معرّف المنطقة الزمنية لـ IANA المقدم في وقت الإنشاء.
        transaction_type:
          type: string
          description: >-
            الفئة ذات المستوى الأعلى كما تم تخزينها: `finance`، `kyc`،
            `travelRule`، `userPlatformEvent`، `gamblingBet`،
            `gamblingLimitChange`، `gamblingBonusChange`، `auditTrailEvent`.
            يُرجى ملاحظة أن القيم المتعددة الكلمات يتم إرجاعها بصيغة camelCase
            حتى لو تم إرسالها بصيغة snake_case.
        action_type:
          type: string
          description: >-
            النوع الفرعي ضمن الفئة (مثل `deposit`، `withdrawal`، `transfer`).
            يتم تعيينه افتراضياً إلى الفئة عند عدم تقديمه.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            الاتجاه بالنسبة إلى الشخص المعني. يُخزّن بأحرف كبيرة بصرف النظر عن
            حالة الأحرف المُرسلة (يُقبل `in`/`out`/`inbound`/`outbound` في
            المدخلات).
        status:
          type: string
          enum:
            - APPROVED
            - IN_REVIEW
            - DECLINED
            - AWAITING_USER
          description: >-
            قرار المراقبة الحالي. يتم إنشاء المعاملات بالحالة `APPROVED`؛ وقد
            تغيرها القواعد إلى `IN_REVIEW`/`DECLINED` بشكل متزامن.
        source:
          type: string
          enum:
            - LIVE
            - IMPORTED
          description: >-
            مصدر نشأة السجل: `LIVE` للمعاملات المرسلة عبر API أو SDK،
            و`IMPORTED` للمعاملات المحملة عبر الاستيراد من لوحة التحكم.
        amount:
          type: string
          description: >-
            مبلغ المعاملة كسلسلة عشرية مع تجريد الأصفار اللاحقة (على سبيل المثال
            `"1500"`، `"0.5"`، `"0.123456789012345678"`). حتى 18 منزلة عشرية.
        currency:
          type: string
          description: >-
            رمز العملة الخاص بـ `amount`. يُقبل أي رمز أبجدي وفق معيار ISO 4217
            (مثل `EUR`، و`USD`، و`NGN`)، وكذلك يُقبل رمز أصل مشفر (مثل `BTC`).
            يُفضل استخدام رمز متداول حالياً. ليس لكل رمز مقبول سعر صرف: عندما لا
            يتوفر سعر صرف للرمز (على سبيل المثال وحدة المحاسبة `XSU` وفق ISO، أو
            رمز عملة مشفرة لا تحدد Didit سعراً له)، يفشل التحويل التلقائي ويتم
            إرجاع `preferred_currency_amount` بقيمة فارغة (null) ما لم يقدّم
            الطلب قيمة محولة مسبقاً في `amount_in_default_currency`.
        currency_type:
          type: string
          nullable: true
          description: '`fiat` أو `crypto`، كما تم إرسالها في `currency_kind`.'
        amount_in_default_currency:
          type: string
          nullable: true
          description: >-
            المبلغ المحوّل مسبقاً الذي قدّمته، كسلسلة نصية عشرية مع إزالة
            الأصفار اللاحقة.
        default_currency_code:
          type: string
          nullable: true
        preferred_currency_amount:
          type: string
          nullable: true
          description: '`amount` محولاً إلى العملة المفضلة للتطبيق، عندما يكون متاحًا.'
        preferred_currency_code:
          type: string
          nullable: true
        payment_details:
          type: string
          nullable: true
          description: مرجع الدفع أو الملاحظة بنص حر من الإرسال.
        payment_txn_id:
          type: string
          nullable: true
          description: >-
            مرجع نظام الدفع الخارجي (مثل تجزئة معاملة البلوكتشين) من
            `payment_reference_id`.
        score:
          type: integer
          description: >-
            درجة المخاطر التراكمية الناتجة عن القواعد (عادة من 0 إلى 100).
            القيمة الأعلى = مخاطر أكبر.
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            شدة المخاطر المصنفة المحددة بواسطة القواعد/المزودين (`UNKNOWN`،
            `LOW`، `MEDIUM`، `HIGH`، `CRITICAL`). تكون `null` حتى يحددها إجراء
            ما.
        decision_reason_code:
          type: string
          nullable: true
          description: السبب المقروء آلياً للحالة الحالية `status`.
        decision_reason_label:
          type: string
          nullable: true
          description: تسمية سهلة القراءة لـ `decision_reason_code`.
        vendor_data:
          type: string
          nullable: true
          description: نسخة ميسّرة من `vendor_data` الخاصة بمقدم الطلب.
        metadata:
          type: object
          description: >-
            لقطة من payload لـ `subject` و`counterparty` كما تم إرسالها في وقت
            الإنشاء.
        props:
          type: object
          description: >-
            الخصائص `custom_properties` التي قدمتها وقت الإنشاء. يمكن الوصول إلى
            كل مفتاح في شروط القواعد عبر `custom_values.<key>`.
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
              description:
                type: string
                nullable: true
              source:
                type: string
                enum:
                  - didit
                  - custom
                description: ما إذا كان الوسم إعداداً مسبقاً من Didit أو وسماً مخصصاً.
          description: العلامات المرفقة بالمعاملة (يدوياً أو عبر القواعد).
        parties:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              role:
                type: string
                enum:
                  - APPLICANT
                  - REMITTER
                  - BENEFICIARY
                  - COUNTERPARTY
                description: >-
                  دور الطرف. يُعيّن endpoint الإنشاء كلاً من `APPLICANT`
                  (الموضوع) و`COUNTERPARTY`.
              entity_type:
                type: string
                enum:
                  - individual
                  - company
                  - external
                  - unhostedWallet
              kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
                description: >-
                  ترتبط أطراف `USER`/`BUSINESS` بكيان مملوك لـ Didit عبر
                  `vendor_data`. أما أطراف `EXTERNAL` فلا يوجد كيان Didit خلفها.
              vendor_data:
                type: string
                nullable: true
                description: معرّفك الداخلي للمستخدم/الشركة.
              full_name:
                type: string
                nullable: true
              first_name:
                type: string
                nullable: true
              last_name:
                type: string
                nullable: true
              country_code:
                type: string
                nullable: true
                description: >-
                  رمز الدولة من `address.country` المُرسل (عادة ISO 3166-1
                  alpha-3).
              dob:
                type: string
                format: date
                nullable: true
                description: تاريخ الميلاد من `date_of_birth` المُرسل.
              address:
                type: object
                description: كائن العنوان كما تم إرساله. يكون `{}` عند حذفه.
              institution_info:
                type: object
                description: تفاصيل المؤسسة كما تم إرسالها. `{}` عند عدم تقديمها.
              device:
                type: object
                description: >-
                  سياق الجهاز المعياري، بما في ذلك إثراء عنوان IP من جانب الخادم
                  ضمن network_context (الموقع الجغرافي، وإشارات VPN/مركز
                  البيانات) عند تقديم عنوان IP.
                properties:
                  fingerprint:
                    type: string
                    description: بصمة جهاز فريدة.
                  persistent_device_id:
                    type: string
                    description: معرّف جهاز ثابت عبر الجلسات (مخطط البصمة v2).
                  user_agent:
                    type: string
                    description: سلسلة وكيل المستخدم (user agent) للمتصفح أو التطبيق.
                  browser_family:
                    type: string
                    description: عائلة المتصفح (مثل Chrome، وFirefox، وSafari).
                  browser_version:
                    type: string
                    description: سلسلة إصدار المتصفح.
                  platform:
                    type: string
                    description: معرّف المنصة (web، ios، android، macos، windows، linux).
                  os_family:
                    type: string
                    description: عائلة نظام التشغيل (مثل iOS وAndroid وWindows).
                  os_version:
                    type: string
                    description: سلسلة إصدار نظام التشغيل.
                  accept_language:
                    type: string
                    description: قيمة ترويسة Accept-Language.
                  session_id:
                    type: string
                    description: معرّف الجلسة (المخزّن في البيانات الوصفية).
                  session_age_ms:
                    type: number
                    description: عمر الجلسة بالمللي ثانية.
                  network_context:
                    type: object
                    description: سياق الشبكة متضمناً عنوان IP والموقع الجغرافي.
                    properties:
                      ip_address:
                        type: string
                        description: عنوان IP الخاص بالعميل.
                      ip_country_code:
                        type: string
                        description: دولة عنوان IP المحددة جغرافياً (ISO 3166-1 alpha-3).
                      latitude:
                        type: number
                        description: خط العرض الجغرافي لعنوان IP.
                      longitude:
                        type: number
                        description: خط الطول الجغرافي لعنوان IP.
              external_party_snapshot:
                type: object
                nullable: true
                description: >-
                  نسخة مجمّدة من بيانات الطرف للأطراف من نوع `EXTERNAL`. تكون
                  `null` طالما أن الطرف مرتبط بمستخدم أو شركة في Didit.
          description: أطراف المعاملة (مقدم الطلب، الطرف المقابل).
        payment_methods:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              payment_method_type:
                type: string
                enum:
                  - bank_card
                  - bank_account
                  - e_wallet
                  - crypto_wallet
                  - unhosted_wallet
                  - other
              label:
                type: string
                nullable: true
              fingerprint:
                type: string
                nullable: true
                description: >-
                  تشفير SHA-256 لـ `type:account_id:issuing_country` — معرّف
                  ثابت لربط تكرار استخدام الأداة نفسها.
              account_id:
                type: string
                nullable: true
                description: معرّف الحساب (IBAN، عنوان، token البطاقة، …).
              issuing_country:
                type: string
                nullable: true
              owner_kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
              vendor_data:
                type: string
                nullable: true
                description: المعرّف الخاص بك للمستخدم/الشركة المالكة.
              owner_name:
                type: string
                nullable: true
              institution_info:
                type: object
              details:
                type: object
                description: كائن `payment_method` الخام كما تم إرساله.
              external_owner_snapshot:
                type: object
                nullable: true
              role:
                type: string
                enum:
                  - SOURCE
                  - DESTINATION
                  - FUNDING
                  - BENEFICIARY
                description: >-
                  كيفية استخدام هذه الطريقة في المعاملة. يحدد endpoint الإنشاء
                  القيمة `SOURCE`/`DESTINATION` بناءً على الاتجاه (الصادر:
                  الموضوع = SOURCE؛ الوارد: الموضوع = DESTINATION).
          description: طرق الدفع المرتبطة بالمعاملة.
        documents:
          type: array
          description: >-
            الملفات المرفقة بالمعاملة من لوحة التحكم. `[]` في حال عدم وجود أي
            ملفات.
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              label:
                type: string
                nullable: true
              note:
                type: string
                nullable: true
              uploaded_by:
                type: string
                nullable: true
              created_at:
                type: string
                format: date-time
              files:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        رابط URL موقّع قصير الأجل للتنزيل؛ اطلبه عند الحاجة
                        بدلاً من تخزينه.
                    original_filename:
                      type: string
                      nullable: true
                    file_size:
                      type: integer
                      nullable: true
        activities:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              activity_type:
                type: string
                description: >-
                  على سبيل المثال `TRANSACTION_CREATED`، أو
                  `TRANSACTION_NOTE_ADDED`، أو `TRANSACTION_STATUS_CHANGED`.
              source:
                type: string
              status:
                type: string
                nullable: true
              title:
                type: string
                nullable: true
              description:
                type: string
                nullable: true
              metadata:
                type: object
              occurred_at:
                type: string
                format: date-time
          description: >-
            مدخلات سجل الأنشطة (الإنشاء، الملاحظات، المراجعات اليدوية، تغييرات
            الحالة).
        alerts:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              title:
                type: string
              description:
                type: string
                nullable: true
              severity:
                type: string
                enum:
                  - UNKNOWN
                  - LOW
                  - MEDIUM
                  - HIGH
                  - CRITICAL
              status:
                type: string
                enum:
                  - OPEN
                  - INVESTIGATING
                  - AWAITING_USER
                  - PENDING_SAR
                  - SAR_FILED
                  - RESOLVED
                  - DISMISSED
              source:
                type: string
                enum:
                  - RULE
                  - PROVIDER
                  - MANUAL
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
              due_at:
                type: string
                format: date-time
                nullable: true
          description: >-
            فارغ دائماً اليوم. التنبيه المفتوح هو معاملة بالحالة `IN_REVIEW` أو
            `AWAITING_USER`.
        rule_runs:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              rule:
                type: string
                format: uuid
                description: معرّف UUID للقاعدة التي تم تشغيلها.
              rule_title:
                type: string
              rule_description:
                type: string
                nullable: true
              rule_category:
                type: string
              matched:
                type: boolean
                description: >-
                  ما إذا كانت شروط القاعدة تطابقت مع هذه المعاملة. يتم تسجيل
                  التشغيل فقط للقواعد المتطابقة، لذلك تحمل التقييمات الحية
                  دائماً القيمة `true`.
              is_test:
                type: boolean
                description: >-
                  تكون القيمة True عندما تعمل القاعدة في وضع الاختبار TEST (دون
                  أي تأثير على الحالة/الدرجة).
              mode:
                type: string
                enum:
                  - ACTIVE
                  - DISABLED
                  - TEST
              severity:
                type: string
                nullable: true
              score_delta:
                type: integer
                description: الدرجة المضافة بواسطة إجراءات `add_score` الخاصة بهذه القاعدة.
              status_target:
                type: string
                nullable: true
                description: الحالة المحددة بواسطة إجراء `change_status`، إن وُجدت.
              action_summary:
                type: string
                nullable: true
                description: >-
                  ملخص للإجراءات التي نفذتها القاعدة، مفصولة بـ `; ` (مثل `score
                  +30; change_status:IN_REVIEW; add_tag:high_risk_country`).
                  الأجزاء: `score +N`، و`change_status:<STATUS>`،
                  و`add_tag:<name>`، و`add_note`، و`add_to_list`، و`open_case`.
                  تكون القيمة `null` عندما لا تنفذ القاعدة أي إجراء.
              metadata:
                type: object
                description: >-
                  تفاصيل التقييم: `scope_match`، و`conditions[]`،
                  و`aggregations[]`. يحمل كل إدخال شرط `field`، و`operator`،
                  و`expected_value`، و`current_value` المقروءة من المعاملة،
                  و`matched`، و`group_index`، و`group_logic`. ويحمل كل إدخال
                  تجميع (السرعة / العدد / المجموع) `metric`، و`field`،
                  و`operator`، و`expected_value`، و`computed_value`، أي القيمة
                  التي انتهى إليها التجميع، و`window`، و`filters`، و`matched`،
                  و`sample_references`؛ وتحتوي التجميعات غير المتزامنة المؤجلة
                  على `computed_value: null` و`deferred: true`. مجموعة الشروط
                  المتداخلة هي إدخال `conditions[]` واحد مع `operator` بقيمة
                  `any_of` أو `all_of`، و`field` بقيمة null، ونتائج أعضائها تحت
                  `conditions` الخاصة بها.
              created_at:
                type: string
                format: date-time
          description: >-
            نتائج التنفيذ لكل قاعدة — أي القواعد تم تشغيلها، وما هو تأثيرها على
            درجة المخاطر.
        provider_results:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              provider:
                type: string
              result_type:
                type: string
                enum:
                  - FIAT_MONITORING
                  - WALLET_SCREENING
                  - TRANSACTION_SCREENING
                  - TRAVEL_RULE
                  - NETWORK_GRAPH
                  - CUSTOM
              status:
                type: string
              severity:
                type: string
                nullable: true
              score:
                type: integer
              summary:
                type: string
                nullable: true
              payload:
                type: object
                description: payload استجابة المزود الخام.
              created_at:
                type: string
                format: date-time
          description: بيانات payload الخام من المزود (فحص AML، تحليلات البلوكتشين، إلخ).
        travel_rule:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TransactionTravelRule'
          description: >-
            تحويل أو فحص Travel Rule. تتم تعبئته عند إرسال
            `travel_rule_details`، وكذلك عند تفعيل Travel Rule وإنشاء المعاملة
            مع `transaction_category: travelRule` (تبدأ Didit التبادل بنفسها،
            حتى بدون `travel_rule_details`). وتكون القيمة `null` في حال عدم وجود
            تحويل أو فحص. في التحويل الوارد، تظل بيانات `originator_data`
            و`beneficiary_data` الخاصة بالطرف المقابل محجوبة (`data_masked:
            true`) حتى يتم تأكيد ملكية المحفظة.
        network_snapshot:
          type: object
          nullable: true
          description: >-
            لقطة المخطط للمعاملات/الأطراف ذات الصلة المستخدمة بواسطة محرك
            القواعد. إما `network_snapshot` المُرسلة مع المعاملة أو المخطط الذي
            تُنشئه Didit من فحص AML ناجح للمحفظة (والذي يحل محل المخطط
            المُرسَل). وتكون `null` عندما لا يوجد أي منهما.
          properties:
            uuid:
              type: string
              format: uuid
            nodes:
              type: array
              items:
                type: object
            edges:
              type: array
              items:
                type: object
            metrics:
              type: object
        remediation:
          type: object
          nullable: true
          description: >-
            جلسة معالجة معروضة على المستخدم عندما تكون إعادة التحقق مطلوبة. حلت
            محلها `action_required`، وهي الكتلة القياسية؛ تم الإبقاء عليها
            للتوافق مع الإصدارات السابقة.
          properties:
            session_id:
              type: string
            session_token:
              type: string
            url:
              type: string
              format: uri
            status:
              type: string
        action_required:
          type: object
          nullable: true
          description: >-
            الإجراء المعلّق المطلوب من المستخدم النهائي لإكمال هذه المعاملة، أو
            null في حال عدم وجود أي إجراء. تشغّل حزم Didit SDK الإجراء تلقائياً
            بشكل افتراضي وتحدّث المعاملة عند انتهائه. نوعان، يتم التمييز بينهما
            بواسطة `type`: `verification_session` (جلسة تحقق مستضافة تم إنشاؤها
            بواسطة إجراء قاعدة) و`wallet_ownership` (جلسة أداة ملكية المحفظة
            التي تم إنشاؤها تلقائياً لتحويل Travel Rule الذي يتطلب إثبات التحكم
            في المحفظة، مقيد بإعداد Travel Rule المسمى
            `auto_wallet_verification`). عند إمكانية تطبيق كليهما، تكون الأولوية
            لـ `wallet_ownership` لأنه يعطل تبادل Travel Rule.
          oneOf:
            - $ref: '#/components/schemas/TransactionVerificationSessionAction'
            - $ref: '#/components/schemas/TransactionWalletOwnershipAction'
          discriminator:
            propertyName: type
            mapping:
              verification_session: '#/components/schemas/TransactionVerificationSessionAction'
              wallet_ownership: '#/components/schemas/TransactionWalletOwnershipAction'
        cost_breakdown:
          type: object
          nullable: true
          description: >-
            تكلفة هذه المعاملة: `total_price` و `items`، عنصر واحد لكل رسم،
            ويتضمن كل منها `usage_type` و `price` و `details` و `created_at`.
            إعادة فحص المعاملة نفسها تُعد عنصراً جديداً.
    TransactionTravelRule:
      type: object
      description: >-
        تحويل Travel Rule الخاص بالمعاملة، كما تُرجعه `GET
        /v3/transactions/{transaction_id}/`، والرمز `201` لـ `POST
        /v3/transactions/` وكل صف في `GET /v3/transactions/`. تتخذ الحقول
        `direction` و `rail` و `counterparty_vasp` و `delivery` و `discovery` و
        `reason` و `next_actions` الهيكل نفسه الموجود في `PATCH
        /v3/transactions/{transaction_id}/travel-rule/`، لذا فإن قراءة واحدة
        للمعاملة توضح سبب تعثر تحويلها وما الذي يدفعه للمضي قدماً.
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
        protocol:
          type: string
          nullable: true
        required:
          type: boolean
        obligations_count:
          type: integer
        originator_data:
          type: object
          description: >-
            جهة المُرسِل. بالنسبة للتحويلات الواردة، يتم حجب قيم الطرف المقابل
            حتى يتم تأكيد الملكية.
        beneficiary_data:
          type: object
          description: >-
            طرف المستفيد. بالنسبة للتحويلات الواردة، يتم حجب قيم الطرف المقابل
            حتى يتم تأكيد الملكية.
        name_match:
          type: object
          nullable: true
          description: >-
            مقارنة الاسم التي حسمت التحويل (الدرجة والصرامة). تظل Null حتى يتم
            تشغيل مقارنة واحدة. يتم إخفاء الأسماء المقارنة مع الأطراف.
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: >-
            اختصار لـ `data_match.mismatched_fields`. يكون فارغاً عندما لا يختلف
            أي شيء.
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: >-
            صحيح طالما أن البيانات الشخصية للطرف المقابل محجوبة في هذه
            الاستجابة.
        metadata:
          type: object
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: أي طرف في التبادل يمثله هذا التحويل.
        rail:
          type: string
          nullable: true
          description: >-
            المسار الذي تم التحويل عبره: `INTERNAL`، أو `TRP`، أو `GTR`، أو
            `TRUST`، أو `VERIFYVASP`، أو `SYGNA`، أو `EMAIL` (`TEST_VASP` في
            تطبيق يعمل في البيئة التجريبية، عندما يجيب Didit Test VASP)، أو
            `null` حتى يتم اختيار مسار.
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: >-
                درجة العناية الواجبة من 0 إلى 100، حيث تكون القيمة الأعلى أفضل.
                نفس المقياس المعتمد في دليل VASP.
            dd_score_breakdown:
              type: object
              description: >-
                مساهمات كل مكون في dd_score، كائن واحد لكل مكون كما هو موضح في
                دليل VASP (الاختصاص القضائي، التحقق، البروتوكول، معرّف الكيان
                القانوني LEI، السجل، الأساسيات، الاستجابة)، كل منها يحتوي على
                {points, max, reason, detail}. تكون القيمة {} حتى يتم تقييم
                الطرف المقابل.
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: النقاط الممنوحة لهذا المكوّن.
                  max:
                    type: integer
                    description: الحد الأقصى للنقاط التي يمكن لهذا المكوّن منحها.
                  reason:
                    type: string
                    description: رمز مقروء آلياً لقرار المكوّن.
                  detail:
                    type: string
                    description: سبب مقروء للبشر للنقاط الممنوحة.
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                وقت آخر تشغيل لتقييم العناية الواجبة. القيمة Null حتى يتم تقييم
                الطرف المقابل.
          description: إدخال الدليل للطرف المقابل، أو `null` إذا لم يربط التحويل أي إدخال.
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            أحدث رسالة تدين بها عملية التحويل لطرف آخر. تكون `null` عندما لا
            تدين بأي رسالة، على سبيل المثال عند كون القيمة أقل من
            `threshold_amount` أو في حالة محفظة ذاتية الاستضافة مصرّح بها.
        discovery:
          type: array
          description: >-
            كيف بحثت Didit عن الطرف المقابل، إدخال واحد لكل خطوة تم تشغيلها.
            يكون فارغاً عند عدم تشغيل أي عملية اكتشاف، على سبيل المثال في
            المعاملات الواردة.
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            سبب تعثر معاملة بحالة `COUNTERPARTY_VASP_NOT_FOUND` أو
            `COUNTERPARTY_VASP_NOT_REACHABLE`؛ وتكون `""` لأي حالة أخرى. يُحدد
            فشل التسليم ذلك أولاً، في حالة `COUNTERPARTY_VASP_NOT_REACHABLE`
            فقط: `email_undeliverable` (رفض مزود البريد رسالة الامتثال
            الإلكترونية ولم يتبق أي عنوان لتجربته: عند إرسالها، أو في رسالة
            تذكير، أو كارتداد دائم تم الإبلاغ عنه لاحقاً) أو `delivery_failed`
            (فشل مسار التسليم نهائياً: رفض مسار الشبكة الرسالة أو استنفد محاولات
            إعادة المحاولة، أو لم يستجب مضيف هوية `TRP`، أو لم يقبل مضيف `TRP`
            الخاص بالطرف المقابل الاستعلام). وإلا فإن تتبع `discovery` يحدد ذلك:
            `awaiting_end_user` (لم تُحدد أي خطوة طرفاً مقابلاً يمكن لـ Didit
            الوصول إليه)، أو `directory_match_no_route` (حددت إحدى الخطوات VASP
            في الدليل ليس لديه مسار)، أو `picked_member_without_proven_wallet`
            (اختار المستخدم النهائي أحد عملاء Didit الذي لم يثبت سيطرته على
            المحفظة)، أو `no_directory_match` عندما لا يُقدم التتبع أي سبب آخر.
            تؤدي إعادة الإرسال إلى تحريك المعاملة، وبالتالي يتم مسح السبب. راجع
            [سبب تعثر
            المعاملة](/ar/transaction-monitoring/travel-rule#لماذا-يتوقف-التحويل).
        next_actions:
          type: array
          description: >-
            ما يتيح متابعة التحويل؛ `[]` لأي حالة باستثناء
            `COUNTERPARTY_VASP_NOT_FOUND` أو `COUNTERPARTY_VASP_NOT_REACHABLE`.
            يتيح `email_undeliverable` خيار `update_compliance_email`، ثم
            `resend`. ويتيح `delivery_failed` خيار `resend`. ويتيح سبب الاكتشاف
            `select_counterparty_vasp` و `declare_self_hosted` و `add_vasp_hint`
            و `resend`.
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TransactionVerificationSessionAction:
      title: Verification session
      type: object
      properties:
        type:
          type: string
          enum:
            - verification_session
        url:
          type: string
          format: uri
          description: رابط التحقق المستضاف لفتحه للمستخدم النهائي.
        session_id:
          type: string
          format: uuid
          description: معرّف جلسة التحقق.
        session_token:
          type: string
          description: >-
            token الجلسة، يُستخدم بواسطة حزم SDK للأجهزة المحمولة لتشغيل سير
            العمل محليًا.
        status:
          type: string
          description: حالة جلسة التحقق.
      required:
        - type
        - url
    TransactionWalletOwnershipAction:
      title: Wallet ownership
      type: object
      properties:
        type:
          type: string
          enum:
            - wallet_ownership
        url:
          type: string
          format: uri
          description: >-
            رابط أداة إثبات ملكية المحفظة المستضافة. افتحه في متصفح حقيقي - على
            الأجهزة المحمولة استخدم SFSafariViewController أو Chrome Custom Tab،
            ولا تستخدم أبداً عرض ويب مضمّناً.
        widget_session_id:
          type: string
          format: uuid
          description: معرّف جلسة أداة إثبات ملكية المحفظة.
        expires_at:
          type: string
          format: date-time
          description: وقت انتهاء صلاحية جلسة الأداة.
      required:
        - type
        - url
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        مقارنة حقلاً بحقل لبيانات طرف التحويل مع ما يعرفه الطرف الآخر عن صاحب
        المحفظة. تذكر أسماء الحقول والنتائج، ولا تذكر القيم مطلقاً، بحيث تظل
        قابلة للقراءة مع حجب بيانات الطرف المقابل. تكون Null حتى يتم إجراء
        المقارنة.
      properties:
        matched:
          type: boolean
          description: تكون القيمة True عندما لا يختلف أي حقل تمت مقارنته.
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: الحقول التي تختلف.
        fields:
          type: object
          description: >-
            إدخال واحد لكل حقل خضع للمقارنة لنوع كيان الطرف (`name`، أو
            `date_of_birth`، أو `address`، أو `account`؛ لا تمتلك الشركة حقل
            `date_of_birth`).
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: >-
                  `not_compared` عندما تكون القاعدة `NONE` أو لا يمتلك أي من
                  الطرفين قيمة للحقل.
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: >-
        سجل تدقيق للحظة التي تم فيها كشف بيانات الطرف المقابل. تكون القيمة فارغة
        (Null) طالما بقيت البيانات محجوبة، وكذلك للتحويلات الصادرة.
      properties:
        at:
          type: string
          format: date-time
        reason:
          type: string
          enum:
            - ownership_confirmed
            - wallet_proof
            - address_book_match
            - own_verified_wallet
            - inquiry_approved
            - known_payment_method
            - travel_address
          description: >-
            ما أكّد الملكية: ownership_confirmed (تأكيدك من خلال لوحة التحكم أو
            API)، أو wallet_proof (إثبات المحفظة في الأداة، أو تحويل وارد داخلي
            INTERNAL، يُعيّن عند إنشائه)، أو address_book_match (محفظة تم التحقق
            منها في دفتر العناوين)، أو own_verified_wallet (المحفظة الخاصة
            بمستخدمك والتي تم التحقق منها)، أو inquiry_approved (موافقتك على
            استفسار TRP وارد أو رسالة GTR أو Sygna)، أو known_payment_method
            (محفظة دفع بها مستخدمك بالفعل)، أو travel_address (عنوان Travel
            Address الخاص بكل محفظة الذي يحمل اسم المحفظة).
        actor:
          type: string
          description: >-
            من أكده: البريد الإلكتروني لمستخدم لوحة التحكم أو تسمية مفتاح API.
            فارغ في حالة القرار التلقائي.
    TravelRuleDelivery:
      type: object
      description: >-
        حالة آخر رسالة يتعين على التحويل إرسالها إلى الطرف المقابل. تتواصل Didit
        مع الطرف المقابل بعد عودة استجابة الطلب الذي أنشأ التحويل أو عدّله، لذا
        يوضح هذا الكائن ما إذا كانت تلك الرسالة قد وصلت: في قائمة الانتظار
        (queued)، أو قيد الإرسال (being sent)، أو في انتظار إعادة المحاولة بعد
        حدوث خطأ (waiting to be retried after an error)، أو تم تسليمها
        (delivered)، أو فشلت (failed). عند حدوث فشل قد تتعافى منه الشبكة لاحقاً
        (عدم وجود رد في الوقت المحدد، أو فشل الاتصال، أو رموز HTTP `408` أو
        `429` أو `5xx`)، تتم إعادة المحاولة بعد 30 ثانية، ودقيقتين، و10 دقائق،
        و30 دقيقة، وساعة واحدة. عندما تفشل الرسالة الأولى (`kind: SEND`)
        نهائياً، إما لأن الشبكة رفضتها أو لأن المحاولة السادسة فشلت أيضاً، ينتقل
        التحويل إلى `COUNTERPARTY_VASP_NOT_REACHABLE` مع تسجيل `last_error` في
        `timeline` الخاص به؛ وأي رسالة أخرى تفشل نهائياً يتم تدوينها في
        `timeline`. وتظل `status` الخاصة بالتحويل هي المصدر الموثوق للمعلومة
        بخصوص عملية التبادل نفسها.
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            ما تحمله الرسالة. `SEND`: أول رسالة للتحويل تُرسل إلى الطرف المقابل
            (صادرة؛ يتم اختيار المسار عند إرسالها). `ANSWER`: قبولك أو رفضك،
            المرسل إلى الشبكة التي قدمت الطلب (واردة). `TXID`: تجزئة المعاملة
            على السلسلة، بعد إنهاء التحويل. `CANCEL`: الإلغاء، بعد إلغائه.
            `POLL`: استعلام عن الحالة إلى شبكة تتيح ذلك، ويتكرر كل 5 دقائق أثناء
            انتظار التحويل للطرف المقابل.
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`: في انتظار الإرسال. `SENDING`: هناك محاولة قيد التشغيل.
            `RETRYING`: فشلت محاولة وستعمل المحاولة التالية في
            `next_attempt_at`. `DELIVERED`: استلم الطرف الآخر الرسالة. `FAILED`:
            رفضها الطرف الآخر، أو فشلت المحاولة الأخيرة.
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: >-
            المسار الذي ينقل الرسالة. يكون فارغاً حتى تختار Didit مساراً للرسالة
            الأولى.
        attempts:
          type: integer
          minimum: 0
          description: >-
            المحاولات التي تمت حتى الآن لهذه الرسالة. تتم محاولة إرسال الرسالة
            التي لا تُعد استطلاعاً للحالة 6 مرات على الأكثر.
        last_error:
          type: string
          description: >-
            نوع الفشل الذي واجهته المحاولة الأخيرة، أو `""` في حال عدم وجود فشل:
            على سبيل المثال `email undeliverable` أو `trp identity endpoint
            unreachable` أو `trp transfer inquiry delivery failed`. ولا يحمل
            أبداً إجابة الطرف المقابل نفسها، والتي تبقى في `timeline` الخاص
            بالتحويل.

            عندما يستجيب GTR بخطأ، يتم تضمين رمز الحالة ورسالته الخاصة. لا يتم
            تضمين أجسام الاستجابة أبداً.
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            متى يتم تشغيل المحاولة التالية بينما تكون الرسالة بحالة `QUEUED` أو
            `RETRYING`.
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: متى استلم الطرف الآخر الرسالة.
    TravelRuleDiscoveryStep:
      type: object
      description: >-
        خطوة واحدة من عملية اكتشاف الطرف المقابل التي أجراها Didit لتحويل صادر،
        بالترتيب الذي تم تنفيذها به. تنتهي السلسلة بأول خطوة تحدد VASP له مسار.
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`: عميل آخر لـ Didit أثبت تحكمه في محفظة
            الوجهة. `wallet_attribution`: إسناد تحليلات البلوكتشين إلى المحفظة.
            `network_lookup`: شبكة يمكنها تحديد أي VASP يحتفظ بالعنوان.
            `customer_hint`: اسم VASP أو معرّف الكيان القانوني (LEI) أو الولاية
            القضائية التي أرسلتها في `beneficiary_data`. `end_user`: الطرف
            المقابل الذي اختاره المستخدم النهائي (أو أنت)، أو طلب اختياره.
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: >-
            `match`: حددت الخطوة طرفاً مقابلاً. `miss`: تم تشغيلها ولم تعثر على
            أي طرف. `skipped`: تعذر تشغيلها، ويوضح `reason` السبب.
        reason:
          type: string
          description: >-
            سبب مقروء آلياً، ويكون `""` عند وجود تطابق:
            `no_proven_internal_wallet`، أو `attribution_disabled`، أو
            `already_attributed`، أو `no_attributed_entity`، أو
            `directory_match_no_route`، أو
            `gtr_address_lookup_runs_on_dispatch`، أو `no_membership`، أو
            `network_switched_off`، أو `no_network_address_lookup`، أو
            `no_directory_match`، أو `awaiting_end_user`، أو
            `picked_member_without_proven_wallet`.
        vasp:
          type: string
          format: uuid
          nullable: true
          description: الـ VASP الموجود في الدليل الذي حددته الخطوة، إذا حددت واحداً.
        rail:
          type: string
          nullable: true
          description: المسار الذي يصل إلى ذلك الطرف المقابل، عندما تعثر الخطوة على مسار.
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        إجراء واحد ينقل تحويلاً بحالة `COUNTERPARTY_VASP_NOT_FOUND` أو
        `COUNTERPARTY_VASP_NOT_REACHABLE` إلى المرحلة التالية. راجع [أسباب تعثر
        التحويل](/ar/transaction-monitoring/travel-rule#لماذا-يتوقف-التحويل).
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`: يختار المستخدم النهائي VASP الوجهة في
            أداة إثبات ملكية المحفظة، أو تقوم بتنفيذ PATCH مع
            `action=beneficiary_vasp`. `declare_self_hosted`: يصرّح المستخدم
            النهائي بأن المحفظة ذاتية الاستضافة في الأداة. `add_vasp_hint`: أبلغ
            Didit بهوية الطرف المقابل، باستخدام اسم VASP، أو LEI، أو Travel
            Address (على سبيل المثال `travel_address` في إدخال دفتر العناوين
            الخاص بمحفظة الوجهة)، ثم أعد الإرسال. `update_compliance_email`
            و`resend` هما قيمتان للمعامل `action` في `PATCH
            /v3/transactions/{transaction_id}/travel-rule/`: أرسل البريد
            الإلكتروني للامتثال الخاص بالطرف المقابل مجدداً، وأعد تشغيل التوجيه.
        url:
          type: string
          format: uri
          description: >-
            رابط أداة ملكية المحفظة، في `select_counterparty_vasp`
            و`declare_self_hosted` أثناء وجود جلسة أداة مفتوحة للتحويل.
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        كيفية تسمية سلسلة التحويل لمحفظتيه، وذلك عندما يكون هناك أكثر من عنوان
        يدفع لآخر. يكون فارغاً (`{}`) لتحويلات سلاسل الحسابات (EVM، Solana،
        Tron)، حيث يكون العنوانان هما المحفظتان. تقرأ المطابقة والتوجيه ودفتر
        العناوين المحافظ من هنا أولاً.
      properties:
        chain:
          type: string
          description: >-
            السلسلة القياسية، مثل `BTC` أو `XRP` أو `LIGHTNING` لتحويل
            Lightning.
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: >-
            في تحويل UTXO: المدخلات والمخرجات كما تم تخزينها (المبالغ كنصوص
            عشرية) وما الذي قرأته Didit في كل مخرج.
          properties:
            inputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            outputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            change_output_indexes:
              type: array
              items:
                type: integer
              description: المخرجات التي تُعيد الدفع إلى عنوان إدخال.
            beneficiary_output_index:
              type: integer
              nullable: true
              description: >-
                المُخرج الذي يدفع للمستفيد؛ وتكون null عندما يتعذر تمييز أي
                منها.
        lightning:
          type: object
          description: >-
            في تحويل Lightning: ما ينص عليه طلب الدفع. دائماً `kind` (`bolt11`،
            أو `bolt12_offer`، أو `bolt12_invoice`، أو `bolt12_invoice_request`،
            أو `lnurl`، أو `lightning_address`، أو `node_id`، أو `unknown`)؛
            تضيف فاتورة BOLT11 كلاً من `network`، و`payee_node_id`،
            و`payment_hash`، و`amount_msat`، و`created_at`، و`expires_at`؛ ويضيف
            نص BOLT12 كلاً من `blinded_paths` و`payee_node_id`؛ ويضيف LNURL أو
            Lightning Address حقله `domain`. لا يتم حل أي شيء عبر الشبكة: يتم فك
            ترميز الطلب فقط.
          additionalProperties: true
        warnings:
          type: array
          items:
            type: string
            enum:
              - declared_originator_not_an_input
              - declared_beneficiary_not_an_output
              - beneficiary_output_ambiguous
              - beneficiary_output_amount_differs
          description: >-
            تناقضات UTXO التي تستحق المراجعة: المُرسِل المُعلَن ليس مدخلاً، أو
            المستفيد المُعلَن ليس مخرجاً، أو لم يتم التمكن من تمييز مخرج مستفيد
            واحد، أو أن مخرج المستفيد يدفع مبلغاً مختلفاً عما تنص عليه المعاملة.
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            في تحويل Lightning الصادر الذي لا يحدد طلب الدفع الخاص به أي مستفيد:
            سبب كون التحويل `NOT_APPLICABLE`. كود
            `LIGHTNING_NO_PAYEE_IDENTIFIER` (الطلب لا يحدد عقدة المستفيد، أو
            تعذر فك تشفيره)، أو `LIGHTNING_BOLT12_BLINDED_PAYEE` (العرض يخفي
            المستفيد خلف مسارات معماة)، أو `LIGHTNING_LNURL_NAMES_NO_PAYEE`
            (يحدد LNURL خدمة وليس مستفيداً). يفتح الكود نفسه آخر إدخال
            `timeline` للتحويل.
    TravelRuleChainSide:
      type: object
      description: محفظة أحد الطرفين كما حددها Didit من بيانات السلسلة.
      properties:
        address:
          type: string
          description: >-
            المحفظة. في شبكة memo، العنوان الكلاسيكي (يتم تقسيم عنوان XRP
            X-address إلى عنوانه الكلاسيكي ووسمه)؛ وفي Lightning، معرّف عقدة
            المدفوع له أو Lightning Address.
        memo:
          type: string
          description: >-
            علامة الوجهة (destination tag) أو المذكرة (memo) التي تشكل جزءًا من
            المحفظة؛ القيمة `""` في حال عدم وجود أي منها.
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            مصدر المحفظة: `declared` (طلبك)، `x_address` (مفصولة من عنوان XRP
            X-address)، `largest_input` (عنوان مدخلات UTXO الذي ساهم بأكبر قدر)،
            `only_non_change_output` (مخرج UTXO الوحيد الذي ليس فكة)،
            `amount_match` (مخرج UTXO الفردي الذي يدفع مبلغ التحويل)،
            `invoice_payee` (المستفيد المحدد في طلب دفع Lightning)، `updated`
            (تُعيّن لاحقاً باستخدام `action: update_originator_wallet`).
    TravelRuleUtxoEntry:
      type: object
      description: مدخل أو مخرج واحد لمعاملة UTXO، كما سجلتها السلسلة.
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: >-
            سلسلة نصية عشرية بالوحدة الخاصة بالعملة (BTC وليس بالساتوشي).
            اختياري.
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: اختياري. المعاملة التي ينفقها مدخل ما.
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: اختياري. فهرس المخرج الذي ينفقه مدخل ما.
  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.