> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# الحصول على إدخال دليل VASP عبر API: مسارات Travel Rule

> يسترجع هذا الـendpoint VASP واحدًا من دليل Travel Rule أو من شبكة Didit باستخدام معرّفه، مع المسارات التي يملك تطبيقك الوصول إليها من خلالها.

موجّه الحصول على مدخل دليل VASP عبر API
نسخ الموجّه إلى الحافظة

<pre>
  \`Read one VASP of the Travel Rule directory by the id GET /v3/travel-rule/vasps/ returned.

  Endpoint:
  GET [https://verification.didit.me/v3/travel-rule/vasps/\{vasp\_id}/](https://verification.didit.me/v3/travel-rule/vasps/\{vasp_id}/)

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

  The response is the same object as one row of the search: kind, name, lei, jurisdiction, domains, reachable, aliases, networks, routes, umbrella, entities, contacts and the due-diligence fields. Read routes\[] for what my application can use today: an unavailable network route carries its reason (no\_membership or network\_switched\_off). On a sandbox application every route is unavailable with reason sandbox\_application, because sandbox sends only to the Didit Test VASP.

  Due diligence on the same id:

  * dd\_score (0-100, higher is safer), risk\_level, dd\_score\_breakdown, responsiveness and essential\_checks - the shared assessment. Didit network members are not scored.
  * decision, entity\_screening, questionnaires - my application's own records, private to it. Manage them with GET/PUT/DELETE /v3/travel-rule/vasps/{vasp_id}/decision/, GET/POST /v3/travel-rule/vasps/{vasp_id}/screening/ and GET/POST /v3/travel-rule/vasps/{vasp_id}/questionnaires/.
  * My Travel Rule transfers with this VASP: GET /v3/travel-rule/transfers/?counterparty={vasp_id}.

  Failure modes:

  * 404 - no directory entry or listed Didit network member has this id.

  Full guide: /transaction-monitoring/travel-rule#directory.\`
</pre>

الصق في


## OpenAPI

````yaml ar/openapi-25.json GET /v3/travel-rule/vasps/{vasp_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/travel-rule/vasps/{vasp_id}/:
    get:
      tags:
        - Travel Rule
      summary: الحصول على مدخل في دليل VASP
      description: >-
        مدخل دليل واحد أو عضو في شبكة Didit بواسطة المعرّف الذي أرجعته عملية
        البحث، مع نفس الحقول والمسارات المتاحة لتطبيقك للوصول إليه.
      operationId: getTravelRuleVasp
      parameters:
        - name: vasp_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: معرّف صف في GET /v3/travel-rule/vasps/.
      responses:
        '200':
          description: الإدخال.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaspDirectoryEntry'
        '404':
          description: لا يوجد إدخال أو عضو مدرج في شبكة Didit يملك هذا المعرّف.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: No directory entry has this id.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/ \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.retrieve_vasp(
                "11111111-2222-3333-4444-555555555555",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.travelRule.retrieveVasp("11111111-2222-3333-4444-555555555555");

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

            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->travelRule->retrieveVasp('11111111-2222-3333-4444-555555555555');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.travel_rule.retrieve_vasp("11111111-2222-3333-4444-555555555555")

            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.TravelRule.RetrieveVaspAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    VaspDirectoryEntry:
      type: object
      description: >-
        مزود خدمة أصول افتراضية (VASP) في الدليل أو عضو في شبكة Didit، مع
        المسارات المتاحة لتطبيقك إليه. يُعد العميل عضواً في شبكة Didit فقط طالما
        أن تطبيقه في بيئة الإنتاج، وTravel Rule مفعّلة لديه، وملفه التعريفي قابل
        للاكتشاف، ويمتلك اسماً قانونياً وبريداً إلكترونياً مؤكداً للامتثال، ولم
        تصنف Didit التطبيق على أنه تجريبي أو توضيحي أو داخلي. يحمل كل صف أيضاً
        تقييم العناية الواجبة المشترك (dd_score وrisk_level وresponsiveness
        وessential_checks) بالإضافة إلى القرار الخاص بتطبيقك وفحص الكيان
        والاستبيانات، والتي لا يراها أي عميل آخر.
      properties:
        id:
          type: string
          format: uuid
          description: معرّف الإدخال، لـ GET /v3/travel-rule/vasps/{vasp_id}/.
        kind:
          type: string
          enum:
            - directory
            - didit
          description: directory لمُدخل في الدليل المشترك؛ didit لعضو في شبكة Didit.
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          description: رمز الدولة وفقاً لـ ISO 3166، كما يوفره المصدر.
        domains:
          type: array
          items:
            type: string
          description: نطاقات الويب الخاصة بـ VASP. تكون فارغة دائماً لأعضاء شبكة Didit.
        reachable:
          type: boolean
          description: >-
            ما إذا كان تطبيقك يحتوي على مسار متاح إلى هذا VASP، أو إلى أحد
            كياناته لعلامة تجارية معينة. تكون القيمة دائماً true لعضو شبكة
            Didit، باستثناء التطبيق في البيئة التجريبية، حيث يكون كل صف false.
        aliases:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              kind:
                type: string
                enum:
                  - trading_name
                  - other_legal_name
                  - network_name
                  - attribution
                  - merged
                  - staff
                description: >-
                  trading_name، أو other_legal_name (من سجل LEI العالمي)، أو
                  network_name (الاسم على شبكة Travel Rule)، أو attribution (اسم
                  الكيان الذي تحدده تحليلات البلوكتشين لمحافظ VASP)، أو merged
                  (اسم إدخال مكرر تم دمجه في هذا الإدخال) أو staff.
          description: الأسماء الأخرى التي يُعرَف بها VASP.
        networks:
          type: array
          items:
            type: object
            description: >-
              قيد حالي لمزود خدمة الأصول الافتراضية (VASP) هذا في دليل أعضاء
              شبكة Travel Rule. يوضح قيد TRISA هوية VASP على TRISA؛ ولا تمتلك
              Didit وسيلة TRISA، لذا لا يُعد مساراً على الإطلاق.
            properties:
              network:
                type: string
                enum:
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - TRISA
              code:
                type: string
                description: معرّف VASP على تلك الشبكة.
              listed_name:
                type: string
                description: الاسم الذي تدرج الشبكة VASP تحته.
              country:
                type: string
                description: الدولة التي تدرجها الشبكة، عند تقديمها.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  وقت تحقق فريق Didit من القائمة المعروضة. تكون القيمة Null
                  للقوائم المقروءة من دليل عام.
              last_seen_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  متى أظهر المصدر القيد آخر مرة. تتم إزالة أي قيد لم يُظهره
                  المصدر لمدة ثلاثة أسابيع.
              source:
                type: string
                enum:
                  - trisa_directory
                  - staff
                description: 'مصدر الإدراج: إما دليل TRISA العام، أو موظفو Didit.'
        routes:
          type: array
          items:
            type: object
            description: >-
              طريقة واحدة يمكن لتطبيقك من خلالها تسليم بيانات Travel Rule إلى
              VASP هذا، بالترتيب الذي يحاول به الإرسال تجربتها. يحتاج مسار
              الشبكة إلى عضوية في تلك الشبكة: عضويتك الخاصة (المتصلة في
              Marketplace) أو عضوية Didit بمجرد حصول Didit عليها. بدونها يُدرج
              المسار كغير متاح مع ذكر السبب، ولا يُدرج أبدًا كطريقة للوصول إلى
              VASP.
            properties:
              rail:
                type: string
                enum:
                  - INTERNAL
                  - TRP
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - EMAIL
              status:
                type: string
                enum:
                  - available
                  - unavailable
              reason:
                type: string
                enum:
                  - ''
                  - no_membership
                  - network_switched_off
                  - sandbox_application
                description: >-
                  سبب تعذر استخدام المسار غير المتاح: no_membership (لا تملك أنت
                  ولا Didit عضوية في تلك الشبكة)، أو network_switched_off (قمت
                  بإيقاف تشغيل تلك الشبكة في الإعدادات الخاصة بك)، أو
                  sandbox_application (يرسل تطبيق البيئة التجريبية إلى Didit
                  Test VASP فقط، لذا لا يتوفر أي مسار إليه). يكون فارغاً عندما
                  يكون المسار متاحاً.
              via:
                type: string
                enum:
                  - ''
                  - own_membership
                  - didit_membership
                  - directory
                  - contact
                  - didit_network
                description: >-
                  كيفية الوصول إلى مسار متاح: own_membership أو didit_membership
                  لمسار الشبكة، أو directory لـ TRP endpoint تم التحقق منه
                  بواسطة الدليل، أو contact لمسار EMAIL، أو didit_network لعضو
                  في شبكة Didit. يكون فارغاً عندما يكون المسار غير متاح.
        umbrella:
          type: object
          nullable: true
          description: >-
            العلامة التجارية التي يمثل هذا الإدخال كيانًا خاضعًا للتنظيم تابعًا
            لها. فارغًا عندما لا يكون جزءًا من إحداها.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        entities:
          type: array
          items:
            type: object
            description: >-
              كيان خاضع للتنظيم تابع لعلامة تجارية: الكيان القانوني الذي يتلقى
              التحويل.
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              lei:
                type: string
              jurisdiction:
                type: string
              reachable:
                type: boolean
                description: ما إذا كان تطبيقك يحتوي على مسار متاح إليه.
          description: >-
            بالنسبة للعلامة التجارية، الكيانات الخاضعة للتنظيم التي تتلقى
            تحويلاتها. التحويل الذي يحدد اسم العلامة التجارية يذهب إلى الكيان
            الذي يمكن الوصول إليه في الاختصاص القضائي المحدد
            (beneficiary_data.counterparty_vasp_jurisdiction)، وإلا إلى الكيان
            الذي ربطه تحليل البلوكتشين بالمحفظة الوجهة، وإلا إلى الكيان الوحيد
            الذي يمكن الوصول إليه عند عدم تحديد أي اختصاص قضائي. لا يتم التخمين
            أبداً بين كيانين متطابقين بنفس القدر.
        contacts:
          type: array
          items:
            type: object
            description: جهة اتصال امتثال يمكن لوسيلة EMAIL مراسلتها.
            properties:
              id:
                type: string
                format: uuid
              email:
                type: string
                format: email
              name:
                type: string
              source:
                type: string
                enum:
                  - staff
                  - application
                  - learned
                description: >-
                  staff: مُنسَّق من قبل Didit؛ application: تمت إضافته بواسطة
                  تطبيقك؛ learned: عنوان استجاب لطلب Travel Rule عبر رابط
                  الاستجابة الخاص به.
              scope:
                type: string
                enum:
                  - platform
                  - application
                description: >-
                  تُستخدم جهات اتصال المنصة (platform) لجميع تحويلات عملاء
                  Didit؛ أما جهات اتصال التطبيق (application) فهي خاصة بتطبيقك،
                  والذي لا يرى سوى جهات الاتصال التابعة له.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  وقت استجابة شخص ما على هذا العنوان لطلب. تكون القيمة Null
                  عندما لا يكون قد تم ذلك بعد.
          description: جهات اتصال المنصة لهذا الـ VASP وتلك الخاصة بتطبيقك.
        dd_status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
            - REJECTED
          description: >-
            حالة التحقق من الإدخال لدى Didit، والمحسوبة بواسطة مكوّن التحقق لـ
            dd_score. تكون دائماً COMPLETED لعضو شبكة Didit.
        dd_score:
          type: integer
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            درجة العناية الواجبة المشتركة لمدخل الدليل، من 0 إلى 100، حيث تعني
            القيمة الأعلى أماناً أكبر (راجع dd_score_semantic): وهي مجموع النقاط
            في dd_score_breakdown. تكون قيمتها Null لعضو شبكة Didit، الذي لا يتم
            احتساب درجات له. يُظهر المدخل الذي لم يتم تقييمه بعد (dd_assessed_at
            تكون null) القيمة 0 مع حقل risk_level فارغ، لذا يُرجى الاعتماد على
            risk_level بدلاً من الدرجة الأولية.
        reachable_rails:
          type: array
          items:
            type: string
            enum:
              - INTERNAL
              - TRP
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - EMAIL
          description: >-
            شبكات الدفع المسجلة في الإدخال. اقرأ المسارات لمعرفة ما يمكن لتطبيقك
            استخدامه اليوم.
        is_didit_customer:
          type: boolean
          description: >-
            true لعضو في شبكة Didit (يكون dd_status دائماً COMPLETED، وdd_score
            فارغاً null، وrisk_level فارغاً لهذه الحالات) ولإدخال في الدليل
            مرتبط بعميل Didit.
        dd_score_breakdown:
          type: object
          description: >-
            كائن واحد لكل مكوّن من dd_score. المكوّنات وأوزانها (الحد الأقصى)
            ورموز الأسباب الخاصة بها: jurisdiction، 25
            (jurisdiction_not_high_risk، jurisdiction_high_risk،
            jurisdiction_unknown)؛ verification، 15 (dd_status_completed،
            dd_status_in_progress، dd_status_not_started، dd_status_rejected)؛
            protocol، 15 (native_rail، email_only، no_rail)؛ lei، 10 (lei_valid،
            lei_missing)؛ history، 10 (history، no_history)؛ essentials، 15
            (essential_checks، no_essential_checks)؛ responsiveness، 10
            (responsive، unresponsive، responsiveness_unknown). يكون فارغاً لعضو
            في شبكة Didit.
          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: >-
            وقت آخر احتساب لـ dd_score وrisk_level وresponsiveness: بعد اكتمال
            التبادل مع المُدخل، أو إنهائه، أو انتهاء صلاحيته، أو عدم تطابقه، أو
            رفضه، وعندما تقوم Didit بتحديث المُدخل أو تنقيحه، وأثناء التحديث
            الأسبوعي للدليل. القيمة Null لعضو في شبكة Didit.
        dd_score_semantic:
          type: string
          enum:
            - higher_is_safer
          description: 'في أي اتجاه تشير dd_score: دائماً higher_is_safer.'
        risk_level:
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - ''
          description: >-
            النطاق الذي يقع فيه dd_score: إما LOW (70 أو أكثر)، أو MEDIUM (40
            إلى 69)، أو HIGH (أقل من 40). يكون فارغاً لعضو في شبكة Didit ولأي
            إدخال لم يتم تقييمه بعد. يمكنك التصفية باستخدامه عبر risk. فحصك الذي
            تم وضع علامة عليه لا يغير أبداً هذه القيمة المشتركة: بل يجعل
            counterparty_risk_level بقيمة HIGH في قواعدك بدلاً من ذلك.
        responsiveness:
          type: object
          description: >-
            ما إذا كان مزود VASP يجيب على طلبات Travel Rule: نسبة الطلبات التي
            بدأها عملاء Didit تجاهه في آخر 90 يوماً وأجاب عليها. تُحتسب فقط
            الطلبات المرسلة عبر مسار شبكة أو بروتوكول، أو عبر البريد الإلكتروني
            إلى عنوان مشترك (عنوان الامتثال الخاص بالإدخال أو جهة اتصال المنصة)؛
            ولا يُحتسب أبداً الطلب المرسل إلى عنوان كتبه العميل، أو إلى جهة
            اتصال خاصة بعميل. يُعتبر الطلب منتهي الصلاحية بلا إجابة؛ وتُعتبر
            عملية التبادل المكتملة أو الرفض أو عدم تطابق البيانات إجابة؛ بينما
            لا يُعتبر الطلب الملغى أو المسار الذي لا يمكن الوصول إليه أياً
            منهما. تكون دائماً UNKNOWN مع أعداد صفرية لأي عضو في شبكة Didit.
          properties:
            status:
              type: string
              enum:
                - RESPONSIVE
                - UNRESPONSIVE
                - UNKNOWN
              description: >-
                UNKNOWN عند وجود أقل من 5 طلبات تم البت فيها خلال الفترة
                الزمنية؛ وUNRESPONSIVE عند الرد على أقل من 10 بالمئة منها؛
                وRESPONSIVE بخلاف ذلك.
            answered:
              type: integer
              description: الطلبات المحسومة خلال النافذة الزمنية التي رد عليها الـ VASP.
            total:
              type: integer
              description: >-
                الطلبات المحسومة خلال النافذة الزمنية: التي تم الرد عليها
                بالإضافة إلى منتهية الصلاحية.
            computed_at:
              type: string
              format: date-time
              nullable: true
        essential_checks:
          type: object
          description: >-
            تقرير الفحوصات الأساسية لإدخال الدليل، والذي يتم إنشاؤه حصرياً من
            المصادر التي تم التحقق منها للمنصة: التسجيل (سجل رسمي يُدرج الـ
            VASP: سجل MiCA المؤقت للاتحاد الأوروبي، أو دليل TRISA العام، أو سجل
            LEI العالمي)، والترخيص (تفويض MiCA مسجل وسارٍ)، والنطاق (يطابق نطاق
            الإدخال نقطة نهاية TRP الخاصة به أو موقع الويب الذي يوفره سجله)،
            ورمز lei (سجل LEI الخاص به نشط وصادر ومتوافق مع أسماء الإدخال
            ودولته). يُعد المكوّن الأساسي لـ dd_score هو نسبة الفحوصات المحسومة
            التي تم اجتيازها بنجاح. يكون فارغاً حتى يتحقق التحديث الأسبوعي
            للدليل من الإدخال لأول مرة، ودائماً ما يكون فارغاً لأي عضو في شبكة
            Didit.
          properties:
            level:
              type: string
              enum:
                - essential
            checked_at:
              type: string
              format: date-time
            checks:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    enum:
                      - registration
                      - licence
                      - domain
                      - lei
                  status:
                    type: string
                    enum:
                      - pass
                      - fail
                      - unknown
                    description: unknown عندما لا يتمكن أي مصدر مسجل من حسم عملية التحقق.
                  reason:
                    type: string
                    description: رمز مقروء آلياً للقرار.
                  detail:
                    type: string
                    description: توضيح باللغة الإنجليزية في سطر واحد.
            passed:
              type: integer
            failed:
              type: integer
            unknown:
              type: integer
            total:
              type: integer
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            قرار تطبيقك بشأن VASP هذا، أو قرار علامته التجارية بالنسبة لكيان ليس
            لديه قرار خاص به (يذكر inherited_from اسم العلامة التجارية). يكون
            null في حال عدم وجود أي قرار. خاص بتطبيقك.
        entity_screening:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
          nullable: true
          description: >-
            أحدث فحص للعقوبات والأخبار السلبية أجراه تطبيقك لـ VASP هذا. يكون
            null عندما لا تفحصه أبداً. خاص بتطبيقك.
        questionnaires:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleCounterpartyQuestionnaire'
          description: >-
            استبيانات العناية الواجبة الخاصة بتطبيقك مع VASP هذا، الأحدث أولاً.
            خاص بتطبيقك.
      example:
        id: 0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91
        kind: directory
        name: Example Counterparty VASP
        lei: 529900EXAMPLECPTY001
        jurisdiction: DE
        domains:
          - counterparty.example
        reachable: true
        aliases:
          - name: Example Counterparty
            kind: trading_name
        networks:
          - network: GTR
            code: EXAMPLE01
            listed_name: Example Counterparty VASP
            country: DE
            verified_at: '2026-10-12T09:30:00Z'
            last_seen_at: '2026-10-12T09:30:00Z'
            source: staff
        routes:
          - rail: GTR
            status: unavailable
            reason: no_membership
            via: ''
          - rail: EMAIL
            status: available
            reason: ''
            via: contact
        umbrella: null
        entities: []
        contacts:
          - id: 6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b
            email: travelrule@counterparty.example
            name: Travel Rule desk
            source: staff
            scope: platform
            verified_at: null
        dd_status: NOT_STARTED
        dd_score: 62
        dd_score_breakdown:
          jurisdiction:
            points: 25
            max: 25
            reason: jurisdiction_not_high_risk
            detail: DEU is not on the high-risk jurisdiction list
          verification:
            points: 3.8
            max: 15
            reason: dd_status_not_started
            detail: due diligence status NOT_STARTED
          protocol:
            points: 6
            max: 15
            reason: email_only
            detail: reachable over the email fallback only
          lei:
            points: 10
            max: 10
            reason: lei_valid
            detail: valid LEI on record
          history:
            points: 5
            max: 10
            reason: no_history
            detail: no exchange history
          essentials:
            points: 7.5
            max: 15
            reason: no_essential_checks
            detail: no decided essential check yet
          responsiveness:
            points: 5
            max: 10
            reason: responsiveness_unknown
            detail: 0 decided recent requests, too few to judge
        dd_assessed_at: '2026-10-12T09:30:00Z'
        dd_score_semantic: higher_is_safer
        risk_level: MEDIUM
        responsiveness:
          status: UNKNOWN
          answered: 0
          total: 0
          computed_at: '2026-10-12T09:30:00Z'
        essential_checks: {}
        reachable_rails:
          - GTR
          - EMAIL
        is_didit_customer: false
        decision:
          decision: APPROVED
          reason: Licensed in DE, questionnaire reviewed
          decided_by: ''
          updated_at: '2026-10-14T10:05:00Z'
          inherited_from: null
        entity_screening:
          id: 7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d
          status: Approved
          total_hits: 0
          score: null
          screened_at: '2026-10-14T09:58:00Z'
          fresh: true
          flagged: false
        questionnaires:
          - id: 8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d
            status: ANSWERED
            form_version: '1'
            sent_to: travelrule@counterparty.example
            sent_at: '2026-09-02T08:00:00Z'
            expires_at: '2026-10-02T08:00:00Z'
            answered_at: '2026-09-04T15:20:00Z'
            valid_until: '2027-09-04T15:20:00Z'
            current: true
            answers:
              legal_name: >-
                Example Counterparty VASP, incorporated in the example
                jurisdiction.
              licensing: >-
                Crypto-asset service provider authorised under MiCA by its
                national regulator, licence active.
              jurisdictions: EU and EEA. We do not serve the United States.
              aml_program: >-
                Written AML/CFT policy, annual independent review, last
                completed in March 2026.
              compliance_officer: >-
                Head of Compliance, reachable at
                compliance@counterparty.example.
              sanctions_screening: >-
                Customers at onboarding and daily; counterparties on every
                transfer.
              transaction_monitoring: >-
                Rule-based monitoring with analyst review; suspicious activity
                reports filed with the FIU.
              travel_rule: TRP and email; we answer requests within one business day.
              custody: >-
                Segregated customer wallets held with a qualified custodian,
                insured.
              ownership: >-
                No shareholder holds 25 percent or more; parent company Example
                Holding Group.
              record_keeping: >-
                Five-year record-keeping for Travel Rule and transaction data,
                as our regulator requires.
              data_protection: Encrypted at rest and in transit, stored in the EU.
    TravelRuleCounterpartyDecision:
      type: object
      description: >-
        قرار تطبيقك بشأن VASP للطرف المقابل. خاص بتطبيقك: لا يغيّر أبداً إدخال
        الدليل المشترك ولا يراه عميل آخر على الإطلاق. إنه يعمل فقط من خلال قواعد
        المعاملات الخاصة بك (حقل القاعدة counterparty_dd_status والإعدادات
        المسبقة travel-rule-counterparty-blocked
        وtravel-rule-counterparty-restricted)؛ ولا يغيّر أبداً كيفية توجيه
        التحويل.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED: قام فريقك بالموافقة على الطرف المقابل. RESTRICTED: قد تتم
            التحويلات إليه بعد المراجعة. BLOCKED: قام فريقك برفضه.
        reason:
          type: string
          maxLength: 255
          description: السبب بنص حر الذي قدمته، ويكون فارغاً في حال عدم وجوده.
        decided_by:
          type: string
          description: >-
            مستخدم لوحة التحكم الذي اتخذ القرار أو قام بتغييره آخر مرة. فارغ عند
            اتخاذه بواسطة مفتاح API.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            العلامة التجارية التي يتّبع هذا الكيان قرارها لأنك لم تتخذ أي قرار
            بشأن الكيان نفسه. تكون Null عندما يكون القرار خاصاً بالطرف المقابل
            نفسه.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
    TravelRuleCounterpartyScreening:
      type: object
      description: >-
        فحص واحد للعقوبات والأخبار السلبية لكيان الطرف المقابل، يُجرى لحساب
        تطبيقك وتُفوتر تكلفته عليه. خاص بتطبيقك: لا يراه عميل آخر أبداً.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            مقبولة: لا يوجد تطابق محتمل يتطلب الانتباه. قيد المراجعة أو مرفوضة:
            تطابق محتمل مع العقوبات أو الأخبار السلبية.
        total_hits:
          type: integer
          description: عدد التطابقات المحتملة التي أرجعها الفحص.
        score:
          type: number
          nullable: true
          description: >-
            أعلى درجة مخاطر من بين التطابقات المحتملة. Null عندما لا يتطابق أي
            شيء.
        screened_at:
          type: string
          format: date-time
        fresh:
          type: boolean
          description: >-
            ما إذا كان الفحص أحدث من fresh_days (30 يوماً). يُعاد استخدام الفحص
            الحديث بدلاً من فوترته مرة أخرى.
        flagged:
          type: boolean
          description: >-
            true طالما أن الفحص حديث وحالته In Review أو Declined. وطالما أن
            أحدث فحص لك تم وضع علامة عليه وظل فحص الطرف المقابل مفعلاً، فإن
            counterparty_risk_level يكون HIGH في قواعدك.
    TravelRuleCounterpartyQuestionnaire:
      type: object
      description: >-
        استبيان العناية الواجبة واحد أرسله تطبيقك إلى الطرف المقابل: استبيان
        Didit القياسي، المُرسل عبر البريد الإلكتروني إلى عنوان الامتثال المسجل
        مع رابط إجابة للاستخدام مرة واحدة. خاص بتطبيقك.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - SENT
            - ANSWERED
            - EXPIRED
          description: >-
            SENT: في انتظار الإجابات. ANSWERED: أجاب الطرف المقابل على كل سؤال.
            EXPIRED: أُغلق رابط الإجابة دون إجابة (انقضى موعده النهائي، أو حل
            محله استبيان أحدث)، أو تجاوزت الإجابات تاريخ valid_until.
        form_version:
          type: string
          description: إصدار استبيان Didit القياسي الذي تنتمي إليه الإجابات. حالياً 1.
        sent_to:
          type: string
          format: email
        sent_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            الموعد النهائي للإجابة، 30 يوماً بعد الإرسال. يتوقف الرابط عن العمل
            بعده.
        answered_at:
          type: string
          format: date-time
          nullable: true
        valid_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            المدة التي تظل فيها الإجابات سارية: 365 يوماً بعد الإجابة. تكون null
            حتى تتم الإجابة.
        current:
          type: boolean
          description: true طالما أن الاستبيان بحالة ANSWERED ولم يمر تاريخ valid_until.
        answers:
          type: object
          additionalProperties:
            type: string
          description: >-
            الإجابات مفهرسة بواسطة معرّف السؤال: legal_name، وlicensing،
            وjurisdictions، وaml_program، وcompliance_officer،
            وsanctions_screening، وtransaction_monitoring، وtravel_rule،
            وcustody، وownership، وrecord_keeping، وdata_protection. كل إجابة
            تصل إلى 2,000 حرف. تكون فارغة حتى يتم الرد.
  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.