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

# التشغيل البيني لـ Travel Rule مع VASP عبر Didit

> كيف تتبادل VASPs بيانات Travel Rule مع عملاء Didit: عناوين السفر، ونقاط TRP، وروابط الاستدعاء، والاستلام عبر البريد، والتسجيل المبكر.

تُوجَّه هذه الصفحة إلى **الجانب الآخر** من تبادل [Travel Rule من Didit](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md): الطرف المقابل، أي VASP (أو فريقه الهندسي)، الذي يحتاج إلى إرسال بيانات Travel Rule إلى VASP يعمل على Didit، أو إلى استلامها منه.

كل ما هو موثّق هنا بنية تحتية عامة تديرها Didit. لا تحتاج إلى حساب Didit أو مفتاح API أو أي علاقة تجارية مع Didit حتى تتكامل معها، بل يكفي للتكامل الأعمق HTTPS وJSON فقط.

## كيف يوجّه Didit التحويل

عندما يرسل عميل Didit تحويلاً، يحاول Didit هذه المسارات بالترتيب الصارم للأولوية، ويستخدم أول مسار يستطيع الوصول إليك:

| الأولوية | المسار | ما يعنيه ذلك لك |
| - | - | - |
| 1 | `INTERNAL` | كلا VASP يعملان على Didit، فتتم التسوية داخل المنصة ولا يُجرى أي استدعاء خارجي. |
| 2 | `TRP` | توفّر endpoint Travel Rule Protocol (TRP) الخاصة بك، أو يعرف عميل Didit [Travel Address](#travel-address) الخاص بك. يستدعي Didit endpoint الاستعلام TRP لديك من جهاز إلى جهاز، وذلك لتحويلات `BTC` و`ETH` و`USDC` (يُقبل `USDC` عندما يحدد التحويل الشبكة التي ينتقل عبرها). |
| 3 | `GTR` | عضوية Global Travel Rule (GTR) فعّالة للمُرسِل، وأنت قابل للعنونة برمز VASP لدى GTR. يقرأ Didit ردك من استجابة GTR، أو عبر الاستعلام الدوري عن حالة الطلب. |
| 4 | `TRUST` | عضوية TRUST فعّالة للمُرسِل، وأنت قابل للعنونة بمعرّف عضوية TRUST الخاص بك. للإرسال فقط: انظر التحذير أدناه. |
| 5 | `VERIFYVASP` | عضوية VerifyVASP فعّالة للمُرسِل، وأنت قابل للعنونة بمعرّف VerifyVASP الخاص بك. يقرأ Didit ردك عبر الاستعلام الدوري عن حالة التحقق. |
| 6 | `SYGNA` | عضوية Sygna Bridge فعّالة للمُرسِل، وأنت قابل للعنونة برمز VASP لدى Sygna. يتعامل Didit مع بروتوكول Sygna بشكل أصلي (IVMS101 المشفّر بـ ECIES، وطلبات الإذن الموقّعة)، ويقرأ ردك على طلب الإذن عبر الاستعلام الدوري عن حالة التحويل، إذ إن callback الخاص بـ Sygna غير مفعّل بعد. |
| 7 | `EMAIL` | لا تتوفر قناة بروتوكول، إذ تتلقى جهة اتصال الامتثال لديك بدلاً من ذلك [رابط استلام بالبريد الإلكتروني](#الاستلام-عبر-البريد-الإلكتروني) لمرة واحدة. |

> [!WARNING]
>
> **لا يستطيع Didit استلام رد `TRUST`، ولا يقبل التحويلات المرسلة إليه عبر الشبكة بعد.**
> عبر `TRUST`، يصلك تحويل عميل Didit، لكن ردك لا يمكن أن يعود، وينتهي التحويل عند الموعد النهائي للتأكيد لدى المُرسِل بدلاً من أن يكتمل.
> عبر `GTR` و`VERIFYVASP` و`SYGNA`، يقرأ Didit ردك من الشبكة نفسها، إما من استجابتها أو عبر الاستعلام الدوري عن حالة التحويل.

يغطي الجدول أعلاه التحويلات التي يرسلها عميل Didit.
عندما ترسل تحويلاً إلى عميل Didit، لا يمكن لـ Didit قبوله إلا كـ[استعلام تحويل](#post-/trp/inquiries//) من نوع `TRP`، بعد أن يصبح مضيف TRP العام لـ Didit فعّالاً (وهو لا يستجيب بعد، انظر [endpoints TRP](#endpoints-trp))، أو، بعد التسوية، كـ[تسجيل Sunrise](#sunrise-التحويلات-التي-تمت-تسويتها-قبل-التبادل). حالياً، لا تُسلّم أي شبكة ولا أي قناة بريد إلكتروني تحويلاً وارداً إلى عميل Didit.

تعمل مسارات الشبكة (`GTR` و`TRUST` و`VERIFYVASP` و`SYGNA`) عبر عضوية على جانب المُرسِل.
وهذا يعني حالياً أن تكون العضوية المرتبطة هي عضوية عميل Didit الخاصة به؛ إذ لا تملك منصة Didit أي عضوية على أي من هذه الشبكات بعد، وهي بصدد التسجيل كمزوّد.
لا تكون GTR مشمولة افتراضياً، وينطبق شرط العضوية نفسه على الشبكات الأربع.
ينبغي للمُرسِل أن يتحقق من كائن `networks` في [الحصول على إعدادات Travel Rule](https://docs.didit.me/ar/management-api/travel-rule/get-settings.md): تعني القيمة `didit` أن عضوية Didit تحمل التطبيق كمشارك خاص بها على الشبكة، وتعني `own` وجود عضوية مرتبطة للعميل، وتعني `off` أن التوجيه عبر المنصة معطّل، وتعني `unavailable` أنه لا يمكن لأي جهة الإرسال عبر تلك الشبكة لهذا التطبيق حتى الآن.
وإلى أن تملك Didit عضوية للمنصة، لا تُبلغ أي شبكة عن القيمة `didit`.
لا يؤدي تفعيل Travel Rule إلى تفعيل عضوية أي شبكة.
انظر [شبكات Travel Rule](https://docs.didit.me/ar/transaction-monitoring/travel-rule-networks.md) لمعرفة ما تصل إليه كل شبكة اليوم.

إذا كنت على إحدى هذه الشبكات، وكان لدى عميل Didit عضوية خاصة به فيها، فشاركه معرّف الشبكة الخاص بك، وسيصلك التحويل عبر الشبكة التي تديرها أصلاً.
عبر `SYGNA`، يكمل ردك على الإذن التحويل أو يرفضه: يستعلم Didit عن حالة التحويل كل 5 دقائق، ويسجّل أيضاً `https://trp.didit.me/sygna/callbacks/permission/{token}/` كرد استدعاء لكل طلب إذن، مع token يُنشأ لذلك التحويل.
هذا الـcallback موجود على مضيف TRP العام لدى Didit، الذي لا يستجيب للطلبات بعد.
تنقل القيمة `ACCEPTED` في `permission_status` تحويل المُرسِل إلى `COMPLETED`، وتنقله القيمة `REJECTED` إلى `COUNTERPARTY_VASP_GENERAL_DECLINE`، أو إلى `COUNTERPARTY_MISMATCHED_DATA` عندما تكون قيمة `reject_code` هي `BVRC007` (اسم المستفيد لا يطابق).
يتطلب الرد الاستدعائي توقيعك: فهو يُرجع `401` مع `{"status": "INVALID_SIGNATURE"}` من دون توقيع صالح، و`404` لـ token غير معروف، و`200` مرة أخرى لقرار سبق تطبيقه.
عند عدم وجود أي عضوية مشتركة، يكون `TRP` هو المسار الذي ينبغي التخطيط له: شارك Travel Address الخاص بك مع عميل Didit، وستصل تحويلاته إلى endpoint TRP الخاصة بك. الرد الذي تعطيه في استجابة الاستعلام يكمل التحويل أو يرفضه فوراً؛ أما الرد الذي ترسله لاحقاً إلى عنوان الاستدعاء لدى Didit فيحتاج إلى مضيف TRP العام لدى Didit، وهو غير فعّال بعد.

عندما لا تتمكن أي من المسارات من التعرّف عليك، ينفذ Didit خطوة تحديد إضافية: **إسناد تحليلات البلوكتشين**.
يُحلّل عنوان المحفظة المستلِمة مقابل بيانات تحليلات البلوكتشين، وعندما تُسنَد إلى منصة التداول الخاصة بك أو خدمة الحفظ الخاصة بك، يسجّل Didit اسمك في دليل VASP الخاص به، ويعيد تجربة المسارات باستخدامه.
وهذا يعني أنه يمكن التعرّف عليك حتى عندما لا يقدّم المُرسِل سوى عنوان المحفظة.
لا تُوجَّه التحويلات المُسندة إليك تلقائياً إلا عندما يحمل إدخالك في الدليل مساراً: endpoint `TRP` موثّقة، أو إدراجاً في الشبكة، أو جهة اتصال للامتثال (انظر [الدخول إلى دليل VASP في Didit](#الإدراج-في-دليل-vasp-الخاص-بـ-didit)).
إذن السلسلة الكاملة للتحديد هي: عميل Didit الذي أثبت سيطرته على المحفظة (`INTERNAL`) وعنوان Travel Address الذي خزّنه المُرسِل له، ثم مسارات البروتوكول والشبكة، ثم تحليلات البلوكتشين.

## Travel Address

يملك كل VASP من Didit يكون Travel Rule مفعّلاً لديه **Travel Address**، وهي سلسلة قصيرة تبدأ بالحرفين `ta` وتشفّر عنوان URL الخاص بنقطة نهاية استفسار النقل عبر TRP المخصصة له.
يقرأ عملاء Didit الـ Travel Address الخاص بهم من إعدادات Travel Rule ويشاركونه مع الأطراف المقابلة، وعندما يعطيك أحد عملاء Didit الـ Travel Address الخاص به، تكون لديك كل المعلومات اللازمة للوصول إليه عبر TRP.

يتبع الترميز اتفاقية Travel Address في TRP:

* احذف البادئة `ta`.
* فكّ ترميز Base58Check للجزء المتبقي (أبجدية Bitcoin، وقيمة تحقق محسوبة باستخدام double-SHA256).
* تمثّل البايتات المفكوكة عنوان URL الخاص بالاستفسار دون بادئة البروتوكول؛ أضف `https://` في البداية.
* يحمل عنوان URL دائماً زوج الاستعلام `t=i` (النوع: استفسار).

يأتي الـ Travel Address المفكوك من Didit بأحد شكلين:

```
https://trp.didit.me/trp/inquiries/{profile_uuid}/?t=i
https://trp.didit.me/trp/inquiries/{profile_uuid}/wallets/{entry_uuid}/?t=i
```

يحدد الجزء `{profile_uuid}` ملف VASP المستضاف. أرسل استفساراتك للنقل باستخدام طريقة POST إلى عنوان URL هذا، واستعلم أولاً من [endpoint الهوية](#get-/trp/identity//) المطابق للتحقق من هوية الطرف الذي تتواصل معه.
الشكل الثاني هو Travel Address **لكل محفظة**: يحدد محفظة واحدة من محافظ عميل Didit (`receiving_travel_address` في دفتر عناوينه)، فيصل استفسارك إلى تلك المحفظة دون الحاجة إلى مطابقتها برقم الحساب أو باسم صاحبه. ويعيد الرمز `404` بعد حذف المحفظة أو عندما تكون مسجلة لدى VASP آخر.

## endpoints TRP

يتعامل Didit مع TRP بالإصدار `3.2.1` على عنوان الأساس `https://trp.didit.me`.
تتبادل جميع endpoints بيانات JSON عبر HTTPS.

> [!WARNING]
>
> لا يوفّر مضيف TRP العام لدى Didit هذه endpoints بعد. وريثما يفعل ذلك، لا يمكن تسليم أي استفسار TRP أو طلب هوية إلى عميل Didit. هذا القسم هو العقد الذي سيلتزم به المضيف بعد تفعيله.

| الطريقة | المسار | الغرض |
| - | - | - |
| `GET` | `/identity` | هوية مشغّل المنصة (وتُتاح أيضاً عبر `/trp/identity`). |
| `GET` | `/trp/identity/{profile_uuid}/` | هوية ملف VASP مستضاف واحد. |
| `POST` | `/trp/inquiries/{profile_uuid}/` | إرسال استفسار تحويل إلى VASP مستضاف. |
| `POST` | `/trp/inquiries/{profile_uuid}/wallets/{entry_uuid}/` | إرسال استفسار تحويل لمحفظة واحدة لدى VASP مستضاف (Travel Address لكل محفظة). |
| `POST` | `/trp/callbacks/resolution/{token}/` | حسم استفسار أرسله لك **Didit** (قبول أو رفض). |
| `POST` | `/trp/callbacks/confirmation/{token}/` | تأكيد تحويل وافق عليه Didit لصالحك أو إلغاؤه. |

رأسا TRP مهمان:

* `api-version` - إصدار بروتوكول TRP الذي تستخدمه، على سبيل المثال `3.2.1`.
  وهما مطلوبان في الاستفسارات وفي رابطَي الاستدعاء كليهما.
* `request-identifier` - معرّفك الفريد للطلب، ويُعاد في ترويسات الاستجابة.
  وهما مطلوبان في الاستفسارات وفي رابطَي الاستدعاء كليهما.

يُعيد الطلب المرسل إلى نقاط الاستفسار أو الاستدعاء العكسي من دون الرأسين معاً الرمز `400`.

تحمل كل استجابة من Didit الترويسة `api-version: 3.2.1` وتعيد `request-identifier` الخاص بك.

### GET /identity

يعيد هوية مشغّل المنصة.
لا تُشترط أي ترويسات.

```bash theme={null}
curl https://trp.didit.me/identity
```

```json theme={null}
{
  "name": "Didit",
  "lei": "",
  "x509": ""
}
```

### GET /trp/identity/{profile_uuid}/

يعيد هوية VASP الذي توشك على تبادل البيانات معه. استخدمها للتحقق من الاسم ورمز LEI قبل إرسال المعلومات الشخصية (PII).
يُجري Didit الفحص نفسه بالاتجاه المعاكس عند بدء التبادل: إذا لم تطابق الهوية التي تعيدها نقطتك رمز LEI أو الاسم المتوقع، يُلغى التبادل.

```bash theme={null}
curl https://trp.didit.me/trp/identity/11111111-2222-3333-4444-555555555555/
```

```json theme={null}
{
  "name": "Bene CASP GmbH",
  "lei": "5493001KJTIIGC8Y1R12",
  "x509": ""
}
```

يعيد `404` عندما لا يكون الملف موجوداً، أو عندما يكون إعداد Travel Rule الخاص به معطّلاً.

### POST /trp/inquiries/{profile_uuid}/

أرسل استفسار تحويل. أنت VASP المُرسِل، وعميل Didit هو VASP المستفيد.

```bash theme={null}
curl -X POST https://trp.didit.me/trp/inquiries/11111111-2222-3333-4444-555555555555/ \
  -H "Content-Type: application/json" \
  -H "api-version: 3.2.1" \
  -H "request-identifier: 7f6a1c1e-0a63-4b1f-9f6e-7dcd7c3f1a01" \
  -d '{
    "asset": { "dti": "X9J9K872S" },
    "amount": 250000000000000000,
    "callback": "https://trp.yourvasp.example/callbacks/inquiry/abc123",
    "IVMS101": {
      "originator": {
        "originatorPersons": [
          { "naturalPerson": { "name": { "nameIdentifier": [{ "primaryIdentifier": "Ruiz", "secondaryIdentifier": "Carlos", "nameIdentifierType": "LEGL" }] } } }
        ],
        "accountNumber": ["0x77ccff0cc624a53cd8b8d8703ced826710211ec7"]
      },
      "beneficiary": {
        "beneficiaryPersons": [
          { "naturalPerson": { "name": { "nameIdentifier": [{ "primaryIdentifier": "Diaz", "secondaryIdentifier": "Ana", "nameIdentifierType": "LEGL" }] } } }
        ],
        "accountNumber": ["0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb"]
      }
    }
  }'
```

| الحقل | النوع | الوصف |
| - | - | - |
| `asset.dti` | string | مطلوب. معرّف الرمز الرقمي (Digital Token Identifier) وفق ISO 24165 للأصل المُحوَّل. الاستفسار الذي لا يتضمنه يُجيب بـ`400`، ولا يُقرأ الحقل `asset.slip0044` الخاص بالإصدارات السابقة لـ 3.2.0. |
| `amount` | number | مطلوب. المبلغ الصحيح بأصغر وحدة للأصل (وحدات أساسية وفق المنازل العشرية لـ DTI). يُقبل أي تمثيل JSON لعدد صحيح، بما فيه الصيغة الأسية، وكذلك سلسلة من الأرقام. الكسر، أو مبلغ أكبر من أن يُسجَّل، يُجيب بـ`400`. |
| `callback` | string | مطلوب. رابط استدعاء عام مطلق من نوع `http(s)` لدى جهتك، يرسل إليه Didit حسم الاستفسار (يُنصح بـ`https`). تُطابَق إعادة المحاولة التي تكرر القيمة `callback` نفسها مع الاستفسار الذي تكرره. |
| `IVMS101` | object | مطلوب. حمولة IVMS 101: `originator.originatorPersons` و`beneficiary.beneficiaryPersons` (يقرأ Didit أول `naturalPerson` في كل منهما، ولا تُقرأ بيانات الأشخاص الاعتباريين)، إضافة إلى مصفوفات المحافظ في `accountNumber`. |

تُحدَّد الأصول بواسطة DTI في هذا المسار، ويُحدِّد DTI الرمز على بلوكتشين واحد.
يربط Didit حالياً `BTC` (`4H95J0R2X`) و`ETH` (`X9J9K872S`) و`USDC` عبر تسع شبكات، ويُضاف مزيد من الأصول مع الوقت.
راجع [معرّفات أصول TRP](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md#معرّفات-أصول-trp) للاطلاع على القائمة الكاملة.
يُقبل الاستفسار الذي لا يتعرف Didit على DTI الخاص به، ويُعرض على VASP المستفيد مع استخدام DTI رمزاً للأصل.

تعني الاستجابة `200` أن الاستفسار قُبل للمعالجة. وتعني `400` أن ترويسات TRP مفقودة أو أن المتن غير صالح. وتعني `404` أن الملف، أو المحفظة المرتبطة بـ Travel Address لكل محفظة، غير معروف أو معطّل. وتعني `422` أن الطلب يستخدم امتداداً لـ TRP، ولا يدعم Didit أياً منها، لذا تُرفض ترويسة `api-extensions` أو مفتاح `extensions` في المتن.
إعادة إرسال `request-identifier` نفسه لا تُحدث أثراً متكرراً؛ يُعاد استخدام الاستفسار الأصلي بدلاً من تكراره.

ثم ينشئ Didit التحويل الوارد في تطبيق العميل، ويحسمه بالرجوع إلى دفتر عناوين محافظ العميل وسياسته.
يطابق المستفيد عبر المحفظة التي يسميها Travel Address لكل محفظة، وإلا فعبر أول عنوان محفظة في `IVMS101.beneficiary.accountNumber`، أو عند غيابه، عبر اسم `beneficiaryPersons[0].naturalPerson` مقابل مدخلات المحافظ المُتحقَّق منها لدى العميل.

تحمل الاستجابة `200` الجواب عندما يستطيع Didit تقديمه فوراً:

* `{"approved": {"address": "...", "callback": "..."}}` عندما يُقبل الاستفسار تلقائياً. لا يرسل Didit تلك الموافقة إلى `callback` الخاص بك أيضاً.
* `{"rejected": "NOT_ENOUGH_COUNTERPARTY_DATA: inquiry carries no beneficiary identification"}` عندما لا يذكر الاستفسار المستفيد ولا عنوان محفظة، لذا أدرِج الاثنين دائماً.
* `{"version": "3.2.1"}` عندما ينتظر القرار عميل Didit. تصل **نتيجة الحسم** لاحقاً كطلب POST إلى عنوان `callback` الخاص بك، بأحد المتنين التاليين.

```json theme={null}
{
  "approved": {
    "address": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
    "callback": "https://trp.didit.me/trp/callbacks/confirmation/{token}/"
  }
}
```

```json theme={null}
{
  "rejected": "Wallet ownership denied by beneficiary VASP"
}
```

قد تكون الموافقة تلقائية، عندما يفعّل VASP المستفيد القبول التلقائي ويطابق المستفيد مدخل محفظة مُتحقَّقاً منه على بلوكتشين الأصل. وقد تتبع مراجعة يدوية أو إثبات ملكية المحفظة من جانب المستفيد، لذا تَوقَّع تأخيراً بين الاستفسار والحسم.
لا يطابق الاستفسار أبداً محفظة سجّلها عميل Didit باعتبارها تابعة لـ VASP آخر، واسم VASP الخاص بك من `originatingVASP` هو ما يراه عميل Didit بوصفه VASP المُرسِل للتحويل.
لا يحدد Didit مهلة للاستفسار الذي ترسله، ولا يرسل إليك عميل Didit الذي يلغيه أي رفض، لذا طبّق مهلة انتظار خاصة بك.

بعد أن تستلم الموافقة وتبث التحويل على السلسلة، أنهِ التبادل بإرسال طلب POST إلى رابط الاستدعاء `approved.callback` الذي زُوِّدت به:

```bash theme={null}
curl -X POST "https://trp.didit.me/trp/callbacks/confirmation/{token}/" \
  -H "Content-Type: application/json" \
  -H "api-version: 3.2.1" \
  -H "request-identifier: 0b8e2f4a-6c1d-4e9a-8f3b-2d7c5a1e9f60" \
  -d '{ "txid": "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060" }'
```

أرسل بدلاً من ذلك `{ "canceled": "reason" }` إلى رابط الاستدعاء نفسه إذا ألغيت التحويل.
ينقل `txid` التحويل لدى جهة المستفيد إلى الحالة `FINISHED`، وينقله `canceled` إلى الحالة `CANCELLED`.
يُجيب الاستدعاءان بـ`204` بعد معالجتهما، و`404` لرمز غير معروف أو لتحويل لم يعد ينتظر هذا الاستدعاء، و`400` لمتن لا يحمل أيّاً من الحقلين الخاصين بالاستدعاء.

### حل الاستفسارات التي يرسلها Didit إليك

عندما يُنشئ عميل Didit تحويلًا إليك عبر TRP، يقوم Didit بما يلي:

1. يجلب `/identity` من جذر مضيف عنوان URL الاستفسار الخاص بك (`https://{your-host}/identity`)، ويتحقق من الاسم والرمز LEI المُبلَّغ عنهما مقارنةً بما يتوقعه العميل. عندما يأتي المسار من دليل Didit، يجب أن يُبلّغ `/identity` الخاص بك عن الرمز LEI الوارد في إدخال الدليل ذاك.
2. يُرسل Didit طلب POST بالاستفسار عن التحويل إلى عنوان URL الاستفسار الخاص بك، بالبنية نفسها المذكورة أعلاه: `asset.dti`، و`amount` بوحدة الأساس كرقم JSON، و`callback`، وحمولة `IVMS101`.

لا يُعدّ التسليم ناجحًا إلا إذا كان الرد `2xx`. يُعدّ الرد `3xx` مرفوضًا، لأن عمليات إعادة التوجيه لا تُتبَع، وأي رد آخر يُسجَّل في الجدول الزمني لتحويل العميل مع رمز الحالة الذي أعدته، مثلًا `refused by counterparty (HTTP 403): ...`.

يحمل الاستدعاءان رأسَي TRP، ولا يتبع Didit عمليات إعادة التوجيه في HTTP عليهما، لذا قدّم `/identity` وعنوان URL الاستفسار مباشرةً.
إذا تعذّر الوصول إلى `/identity`، أو لم يُبلّغ عن أي رمز LEI، أو أبلغ عن رمز مختلف عندما زوّده العميل، أو أبلغ عن اسم غير متطابق، يتوقف Didit قبل إرسال الاستفسار، وينتقل تحويل العميل إلى `COUNTERPARTY_VASP_NOT_REACHABLE`.
وإذا فشل طلب POST الخاص بالاستفسار بعد ذلك، أو ردّت نقطة النهاية لديك عليه برمز `4xx` أو `5xx`، ينتقل التحويل أيضًا إلى `COUNTERPARTY_VASP_NOT_REACHABLE`.

يشير `callback` في ذلك الاستفسار إلى نقطة نهاية الحل الخاصة بـ Didit (`/trp/callbacks/resolution/{token}/`).
ردّ بإرسال طلب POST يحمل أجسام الحل نفسها التي يستخدمها Didit: `{ "approved": { "address": "...", "callback": "..." } }` للموافقة (يكون `callback` الخاص بك هو المكان الذي سينشر فيه Didit التأكيد على السلسلة)، أو `{ "rejected": "reason" }` للرفض.
أرسل رأسَي TRP مع هذا الطلب.
يرد Didit بالرمز `204` بعد المعالجة، وبالرمز `404` إذا لم يعد التحويل ينتظر حلًا، وبالرمز `400` عند الموافقة دون `address`، أو عندما لا يكون `callback` عنوان URL عامًا من نوع `http(s)` يستطيع Didit استدعاءه.

عند الموافقة ينتقل جانب Didit إلى `COMPLETED`؛ وبعد أن يُبلّغ العميل عن الهاش على السلسلة، يُرسل Didit طلب POST بالجسم `{ "txid": "..." }` إلى رابط التأكيد الذي زوّدته (أو `{ "canceled": "reason" }` إذا أُلغي التحويل أولًا).

> [!NOTE]
>
> رموز token الخاصة بالاستدعاء تُستخدم لغرض واحد، وهي أسرار لا يمكن تخمينها تُنشأ لكل تحويل على حدة. عامِل روابط الاستدعاء الكاملة كمعلومات سرية، ولاحظ أن الحل لا يُقبل إلا طالما ما زال التحويل ينتظره.

## الاستلام عبر البريد الإلكتروني

إذا لم تصل أي قناة بروتوكول إليك، وزوّد عميل Didit بريد الامتثال الخاص بك، يلجأ Didit إلى البريد الإلكتروني: تتلقى جهة اتصال الامتثال لديك رسالة تسمّي VASP المُرسِل، مع رابط استلام آمن لمرة واحدة.
لا يلزم أي حساب أو مفتاح API أو تكامل، فـ token الموجود في الرابط هو المصادقة.

يعرض فتح الرابط التبادل المعلّق. أما واجهة API الأساسية، التي تستدعيها الصفحة المستضافة نيابةً عنك، فهي عامة:

```bash theme={null}
curl https://verification.didit.me/v3/travel-rule/pickup/{token}/
```

```json theme={null}
{
  "originator_vasp_name": "Origin CASP SL",
  "amount": "0.250000000000000000",
  "currency": "ETH",
  "beneficiary_wallet": "0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb",
  "status": "AWAITING_COUNTERPARTY"
}
```

`amount` هو الكسر العشري المخزَّن كما هو، لذلك يحمل المنازل العشرية الـ18 كاملةً.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/travel-rule/pickup/{token}/respond/ \
  -H "Content-Type: application/json" \
  -d '{ "decision": "accept", "beneficiary_name": "Ana Diaz" }'
```

القيمة `decision` هي `accept` أو `decline`. عند القبول، زوّد اسم المستفيد كما هو مسجّل لديك، ليتمكن جانب المُرسِل من إجراء مطابقة الاسم، أو أرسل ردّ IVMS 101 الكامل بوصفه `ivms_response`، فيكون اسم المستفيد الوارد فيه هو المعتمد حينئذٍ.
عند الرفض، يمكنك ذكر `decline_reason` (القيم: `data_mismatch`، و`not_our_customer`، و`wallet_not_hosted`، و`sanctions`، و`risk_appetite`، و`jurisdiction`، و`insufficient_data`، أو `other`)، و`decline_detail` بطول يصل إلى 512 حرفًا، وهو مطلوب مع `other`.
يُسجَّل القبول بدون `beneficiary_name` على أنه عدم تطابق إذا زوّد المُرسِل اسم مستفيد، إلا إذا كان المُرسِل قد أوقف مطابقة الأسماء.
الاستجابة هي `{"status": "..."}` الناتج: `COMPLETED` عند تطابق الأسماء، أو `COUNTERPARTY_MISMATCHED_DATA` عند عدم التطابق، أو `COUNTERPARTY_VASP_GENERAL_DECLINE` بعد الرفض.
يمكنك الرد مرة واحدة فقط، طالما أن التحويل ينتظرك: فبعد ردّك، أو بعد إلغاء التحويل، أو بعد موعد تأكيده النهائي، تُرجع كلتا نقطتي النهاية الرمز `410`، وtoken غير المعروف يُرجع `404`.
يعرض الطلب حقول المُرسِل التي يشاركها، وحقل `ivms_request` بصيغة IVMS 101 وبلغة ولايتك القضائية، ويُذكَّر بالموعد النهائي قبل 72 و24 و6 ساعات طالما لم تردّ.

## Sunrise: التحويلات التي تمت تسويتها قبل التبادل

عندما يصل تحويل إلى محفظة عميل Didit قبل أي تبادل لـ Travel Rule، لعدم وجود قناة مشتركة آنذاك، يمكن تسليم البيانات بعد التسوية أيضًا.

أرسل حمولة Travel Rule عبر قناتك المعتادة إلى عميل Didit (وهو الطرف المقابل المستفيد لديك)، واطلب منه تسجيلها: يستدعي [`POST /v3/travel-rule/inbound/`](https://docs.didit.me/ar/transaction-monitoring/travel-rule#التسجيل-اللاحق-للإيداع) مع سلسلة الإيداع و`txid` وعنوان المحفظة والمبلغ والعملة وبيانات المُرسِل لديك.
أدرج هوية VASP الخاصة بك، أي الاسم ورمز LEI وTravel Address، ضمن `originating_vasp` في تلك الحمولة، حتى يسجّل تحويل عميل Didit مَن أرسل الإيداع.
يبقى ذلك على ذلك التحويل وحده، ولا ينشئ [إدخال الدليل](#الإدراج-في-دليل-vasp-الخاص-بـ-didit) الخاص بك ولا يغيّره أبدًا.
يجب أن يكون رمز LEI صالحًا ومكوّنًا من 20 حرفًا، وأن يكون Travel Address صالحًا، وإلا رُفض التسجيل.

## الإدراج في دليل VASP الخاص بـ Didit

تحتفظ Didit بدليل VASP يعتمد عليه التوجيه الصادر لعملاء Didit.
تأتي الإدخالات من المصادر التالية:

* سجل ESMA المؤقت لمزودي خدمات الأصول المشفرة بموجب MiCA، ويُقرأ أسبوعياً: اسمك وLEI الخاص بك ودولة العضوية الأصلية، إن كنت مدرجاً فيه.
* دليل TRISA العام، ويُقرأ أسبوعياً: هويتك وبلدك وإدراجك في TRISA.
* سجل LEI العالمي، الذي يملأ LEI الخاص بك وأسماءك القانونية الأخرى والدولة.
* إسناد تحليلات البلوكتشين، عندما يُربط عنوان محفظة وجهة بمنصتك أو خدمة الحفظ الخاصة بك: تضيف Didit إدخالك أو تطابقه، وتحتفظ بالاسم المسنَد بوصفه اسماً مستعاراً.
* موظفو Didit، الذين يديرون الإدخالات أو يحرّرونها بعناية: معرّفات التوجيه وإدراجات الشبكة التي تحققوا منها، وجهات اتصال الامتثال، والأسماء المستعارة، والعلامات التجارية مع كياناتها.

ما يبلغ به عميل Didit عنك، مثل `originating_vasp` في تسجيل Sunrise أو Travel Address في تحويل، يبقى في تحويل ذلك العميل ولا يغيّر إدخالك أبداً.
كذلك لا تنشئ استفسارات التحويل التي ترسلها إلى عميل Didit إدخالك ولا تحدّثه.

يوجّه إدخالك التحويل إليك عندما يحمل endpoint `TRP` موثّق، أو إدراجاً في شبكة يستطيع المرسل استخدامه، أو جهة اتصال للامتثال لاستخدامها عند الرجوع إلى البريد الإلكتروني.
يصبح عنوان امتثال على أحد نطاقاتك الخاصة، إذا ردّ على طلب عبر رابط الرد الخاص به، جهة اتصال يمكن لكل عميل في Didit استخدامها.
إلى أن يحمل إدخالك مساراً، لا يصل إليك عميل Didit إلا عبر الحقول التي يمرّرها مع كل تحويل: Travel Address الخاص بك، أو معرّف الشبكة الخاص بك (`counterparty_gtr_vasp_code` أو `counterparty_trust_membership_id` أو `counterparty_verifyvasp_id` أو `counterparty_sygna_vasp_code`)، أو بريد الامتثال الإلكتروني الخاص بك (`counterparty_vasp_email`).
لكي تكون قابلاً للوصول اليوم، شارك Travel Address أو معرّف الشبكة أو بريد الامتثال الإلكتروني مع عملاء Didit الذين تعمل معهم.

## قائمة التحقق لـ VASP الأطراف المقابلة

* **أنت تطبّق TRP بالفعل**: شارك Travel Address ورمز LEI الخاص بك مع عميل Didit؛ تصل تحويلات `BTC` و`ETH` و`USDC` الخاصة به على شكل استفسارات TRP قياسية إلى endpoint الخاص بك. أجب في ردّ الاستفسار الخاص بك. أما الرد اللاحق فيتطلب مضيف TRP العام التابع لـ Didit، وهو غير متاح بعد.
* **أنت على GTR أو TRUST أو VerifyVASP**: شارك معرّف شبكتك؛ تصل التحويلات عبر تلك الشبكة عندما يملك عميل Didit عضويته الخاصة فيها. تقرأ Didit ردّك على GTR أو VerifyVASP من الشبكة، لكنها لا تقرأ ردّ TRUST، لذلك انشر أيضاً endpoint TRP عندما يجب أن يُختتم التبادل عبر TRUST. يوضح [شبكات Travel Rule](https://docs.didit.me/ar/transaction-monitoring/travel-rule-networks.md) متى يتغير ذلك.
* **أنت على Sygna Bridge**: شارك رمز Sygna VASP الخاص بك؛ عندما يملك عميل Didit عضويته الخاصة في Sygna، يُكمل ردّ الإذن الخاص بك التحويل أو يرفضه بمجرد أن تقرأه Didit بالاستطلاع الدوري.
* **ليست لديك قناة بروتوكول بعد**: أعطِ عميل Didit بريد امتثال تتم مراقبته. ستتلقى روابط الاستلام ويمكنك الرد من الصفحة المستضافة دون أي تكامل.
* **تحويل تمّت تسويته بالفعل**: سلّم البيانات عبر [تسجيل Sunrise](#sunrise-التحويلات-التي-تمت-تسويتها-قبل-التبادل) من خلال عميل Didit.
* **تريد أيضاً الإرسال إلى مزودي VASP في Didit**: اطلب من طرفك المقابل Travel Address الخاص به من إعدادات Travel Rule في Didit، ثم اتبع [POST /trp/inquiries](#post-/trp/inquiries//) عندما يصبح مضيف TRP العام التابع لـ Didit متاحاً.

## الخطوات التالية

> [card] [Travel Rule](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md)
>
> المنتج الموجَّه للعملاء: دورة الحياة والإعدادات والمسارات وواجهة /v3/ البرمجية.

> [card] [أداة إثبات ملكية المحفظة](https://docs.didit.me/ar/transaction-monitoring/wallet-ownership-widget.md)
>
> كيف تُجمع إثباتات الملكية من جهة المستفيد عندما تكون محفظة ذاتية الاستضافة.

> [card] [تسجيل Sunrise](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md#التسجيل-اللاحق-للإيداع)
>
> تسجيل بيانات Travel Rule للإيداعات التي تمت تسويتها بالفعل على السلسلة.

> [card] [webhook](https://docs.didit.me/ar/integration/webhooks.md)
>
> كيف يرصد عملاء Didit كل تغيّر في حالة التبادل من جانبهم.


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