الانتقال إلى المحتوى الرئيسي
تُوثّق هذه الصفحة الـpayload الكامل الذي تُرجعه POST /v3/transactions/ وGET /v3/transactions/{transaction_id}/. يُعيد كلاهما الكائن نفسه TransactionDetail، أما مرجع API ففيه مخطط الحقول حقلًا حقلًا، وتشرح هذه الصفحة بنيته.

البنية على المستوى الأعلى

يصف معرّفان المعاملة نفسها. uuid هو المعرّف الثابت لدى Didit، وهو ما تتوقعه GET /v3/transactions/{transaction_id}/ في مسارها. أما txn_id فهو transaction_id الذي أرسلته عند الإنشاء. وtransaction_number هو الرقم التسلسلي الخاص بالتطبيق الذي تعرضه وحدة التحكم. لا تُعاد الأطراف التي أرسلتها، أي الطرف الخاضع للفحص والطرف المقابل، كمفاتيح على المستوى الأعلى. بل هي عناصر في المصفوفة parties، ويُميَّز كلٌّ منها بالحقل role. أما vendor_data على المستوى الأعلى فهو نسخة للتيسير من vendor_data الخاص بمقدّم الطلب.

الحقول الرئيسية

الحقول المالية

  • amount / currency: مبلغ المعاملة كما أُرسل. الحقل amount سلسلة عشرية تُحذف منها الأصفار الزائدة في النهاية ("1500", "0.5")، وتصل إلى 18 منزلة عشرية كحد أقصى.
  • currency_type: القيمة fiat أو crypto، كما أُرسلت في currency_kind؛ وتكون null إذا لم تُرسَل.
  • amount_in_default_currency / default_currency_code: المبلغ المحوّل مسبقاً الذي أرسلته في الطلب، ويُعاد إليك كما هو؛ وتكون null إذا لم ترسل مبلغاً.
  • preferred_currency_amount / preferred_currency_code: القيمة amount بعد تحويلها إلى العملة المفضلة لتطبيقك. تكون null عندما لا يتوفر سعر صرف للعملة currency ولم ترسل amount_in_default_currency.
  • payment_details / payment_txn_id: المرجع النصي الحر للدفعة، والمرجع الخارجي للدفعة (مثل هاش معاملة البلوكتشين) كما وردا في الطلب.

حقول الحالة

  • status: القيم APPROVED وIN_REVIEW وDECLINED وAWAITING_USER. تُنشأ المعاملات بالحالة APPROVED، ويمكن للقواعد أن تغيّرها فوراً وبشكل متزامن.
  • score: درجة المخاطر الصحيحة المتراكمة من القواعد. كلما ارتفعت الدرجة زادت المخاطر.
  • severity: القيم UNKNOWN وLOW وMEDIUM وHIGH وCRITICAL، أو null إلى أن تحدد قاعدة أو مزوّد الخدمة الشدة.
  • decision_reason_code / decision_reason_label: سبب الحالة الحالية في صيغة منظمة وفي صيغة مقروءة للإنسان.
  • environment: القيمة live أو sandbox، وهي مأخوذة من التطبيق الذي تنتمي إليه المعاملة. المعاملة sandbox تُخزَّن ولا تخضع للتقييم أبداً، لذلك فإن rule_runs الفارغة فيها تعني “لم يُقيَّم”، لا “لم تتطابق أي قاعدة”. راجع مراقبة المعاملات في البيئة التجريبية.
  • source: القيمة LIVE للمعاملات المُرسلة عبر API أو SDK، والقيمة IMPORTED للمعاملات المُحمّلة عبر استيراد CSV من وحدة التحكم.

الأطراف

يُسجَّل كل طرف في المعاملة كعنصر ضمن parties. يُسجّل endpoint الإنشاء الطرف المعني بالقيمة APPLICANT، والطرف المقابل الاختياري بالقيمة COUNTERPARTY. ويتضمن التعداد role أيضاً القيمتين REMITTER وBENEFICIARY. وتشترك جميع العناصر في بنية واحدة.
  • role: القيم APPLICANT وCOUNTERPARTY وREMITTER وBENEFICIARY. استخدم هذا الحقل للتصفية لإيجاد الطرف المعني.
  • entity_type: القيم individual وcompany وexternal وunhostedWallet، كما أُرسلت.
  • kind: القيمة USER أو BUSINESS عندما يرتبط الطرف بمستخدم أو شركة لدى Didit عبر vendor_data، والقيمة EXTERNAL في غير ذلك.
  • country_code / dob: مأخوذان من address.country وdate_of_birth المُرسلين.
  • address / institution_info: الكائنان كما أُرسلا، ويكونان {} إذا لم يُرسلا.
  • external_party_snapshot: نسخة مجمّدة من بيانات الطرف للأطراف من النوع EXTERNAL، وتكون null طالما أن الطرف مرتبط بمستخدم أو شركة لدى Didit.

device

الحقل device هو device_context الذي أرسلته لذلك الطرف، بعد تحويل مفاتيحه إلى صيغة snake_case، مع الإثراء الذي يجريه الخادم لعنوان IP. يكون {} إذا لم يتضمن الطلب أي سياق للجهاز، لذلك عامِل كل مفتاح على أنه اختياري دائماً. لا يوجد كائن إثراء منفصل. عندما يتضمن الطرف عنوان IP عاماً في network_context.ip_address، يحلّ Didit العنوان مباشرةً ويكتب الحقول المُثرّاة في الكائن network_context نفسه، ولا يملأ إلا المفاتيح التي لم ترسلها. وتُحذف المفاتيح التي أعادها المحلّل فارغة، لذلك يحتوي network_context المُثرّى بالكامل على المفاتيح الأربعة المُرسلة (ip_address, ip_country_code, latitude, longitude) مع أي من المفاتيح التالية التي جرى تحديدها: ip_country وip_state وip_city وisp وorganization وis_vpn_or_tor وis_data_center وtime_zone وtime_zone_offset وasn_number وasn_organization وconnection_type وcarrier وproxy_type. ويكون is_vpn_or_tor وis_data_center موجودين دائماً بعد نجاح عملية الحل. يُتخطى الإثراء، ويُعاد network_context كما أُرسل تماماً، عندما يكون عنوان IP مفقوداً أو غير قابل للتوجيه، أو عندما يكون التطبيق في البيئة التجريبية، أو عندما يفشل الحل. ويكون ip_country_code بصيغة ISO 3166-1 alpha-2 عندما يحدده Didit، وبالقيمة التي أرسلتها في الحالات الأخرى؛ وتوحّد شروط القواعد الصيغتين قبل المقارنة.

طرق الدفع

  • role: القيم SOURCE وDESTINATION وFUNDING وBENEFICIARY. يُعيّن endpoint الإنشاء القيمتين SOURCE وDESTINATION بحسب direction: في المعاملة الصادرة تكون طريقة الطرف المعني هي SOURCE وطريقة الطرف المقابل هي DESTINATION، وفي المعاملة الواردة يكون العكس.
  • payment_method_type: القيم bank_card وbank_account وe_wallet وcrypto_wallet وunhosted_wallet وother.
  • fingerprint: قيمة SHA-256 تُحسب على type:account_id:issuing_country، وتبقى ثابتة عبر المعاملات، لتتمكن من ربط إعادة استخدام الأداة المالية نفسها. وتكون null إذا لم يُرسل account_id.
  • owner_kind / vendor_data / owner_name: من يملك الأداة المالية، وفق الاصطلاح نفسه USER / BUSINESS / EXTERNAL المستخدم للأطراف.
  • details: كائن payment_method الخام كما أُرسل.

تشغيلات القواعد

  • rule: معرّف UUID للقاعدة التي تم تشغيلها، وrule_title وrule_description وrule_category منسوخة منها.
  • matched: لا يُسجَّل التشغيل إلا عندما تتطابق شروط القاعدة، لذلك تحمل تقييمات الإنتاج دائماً القيمة matched: true. ولا تترك القواعد التي قُيّمت دون تطابق أي سجل. وقد تتضمن بيانات العرض التوضيحي صفوفاً بالقيمة matched: false.
  • is_test / mode: القيمتان true وTEST عندما تعمل القاعدة في وضع الاختبار؛ ويُسجَّل تشغيل الاختبار لكنه لا يؤثر في status أو score أو severity.
  • score_delta / status_target / severity: ما أسهم به هذا التشغيل. يُضبط status_target عندما يُنفَّذ إجراء change_status، أو عندما تتجاوز الدرجة المضافة الحد.
  • action_summary: نص يلخّص الإجراءات التي نفّذتها القاعدة، مفصولة بـ ; (score +30, change_status:IN_REVIEW, add_tag:<name>, add_note, add_to_list, open_case)؛ وتكون null إذا لم تنفّذ القاعدة أي إجراء.
  • metadata: تفاصيل التقييم، وتشمل scope_match، بالإضافة إلى conditions[] وaggregations[]. تستخدم القائمتان مفاتيح قيم مختلفة:
    • conditions[]: عنصر واحد لكل شرط، ويحمل field وoperator وexpected_value وcurrent_value التي قُرئت من المعاملة وmatched وgroup_index وgroup_logic. تكون field_source دائماً null في تشغيلات قواعد المعاملات، ولا تُصنَّف إلا لـأحداث المراقبة.
    • aggregations[]: عنصر واحد لكل تجميع من نوع معدل التكرار أو العدد أو المجموع، ويحمل metric وfield وoperator وexpected_value وcomputed_value الذي وصل إليه التجميع وwindow وfilters وmatched وsample_references. وتحمل التجميعات التي لا يمكن حسابها إلا بشكل غير متزامن القيمة computed_value: null والقيمة deferred: true.

التنبيهات

alerts مصفوفة فارغة دائمًا في الوقت الحالي. التنبيه المفتوح يعني معاملة محجوزة، لذا اقرأ status بدلًا من ذلك (IN_REVIEW أو AWAITING_USER). راجع التنبيهات.

الأنشطة

سجل أنشطة المعاملة: الإنشاء والملاحظات والمراجعات اليدوية وتغييرات الحالة.
تظهر ملاحظات المحلل هنا كإدخالات TRANSACTION_NOTE_ADDED؛ لا توجد مصفوفة notes منفصلة.

المستندات

ملفات مرفقة بالمعاملة من وحدة التحكم. تكون [] عند عدم وجود ملفات.
file_url رابط موقّع قصير الأمد؛ اجلبه عند الحاجة بدلًا من تخزينه.

نتائج المزوّدين

مخرجات مزوّدين خارجيين (فحص تجزئة المعاملة، وفحص المحافظ، ومراقبة العملات الفيات، وفحص العقوبات).
result_type: FIAT_MONITORING, WALLET_SCREENING, TRANSACTION_SCREENING, TRAVEL_RULE, NETWORK_GRAPH, CUSTOM. payload.risk_factors هو التفسير المرتب لـ score: ما الذي أنتج الحكم، مع عرض عوامل الخطر المرتفعة أولًا ثم بحسب قيمة المبالغ المحوّلة. تعني score مرتفعة دون إدخال is_high_risk أن المزوّد صنّف الكيان وفق نموذج التعرض الخاص به دون الإبلاغ عن تطابق مع العقوبات أو مع كيان منسوب؛ وتوضح summary ذلك صراحةً. المرجع التفصيلي للحقول: عوامل المخاطر. النتائج التي فُحصت قبل إضافة هذا الحقل لا تتضمن هذا المفتاح. في فحص تجزئة معاملات العملات المشفرة، يُعبَّأ transaction_flows عند توفر الإثراء على السلسلة. وهو يطبّع نشاط السلسلة حتى تتمكن وحدة التحكم من عرض نظرة عامة على المعاملة ومخطط التصور من حمولة الاستجابة نفسها. مصادر الإثراء المدعومة:
  • تستخدم سلاسل EVM خدمة Blockscout لتطبيع المعاملة الرئيسية والاستدعاءات الداخلية وتحويلات الرموز.
  • يستخدم Bitcoin خدمة mempool.space لتطبيع مدخلات المعاملة ومخرجاتها.
  • يستخدم Solana خدمة Helius لتطبيع تحويلات SOL الأصلية وتحويلات رموز SPL وسياق أحداث NFT المتاح.
يتضمن كل عنصر في transaction_flows[] حقولًا مُطَبَّعة ثابتة (flow_type, from_address, to_address, amount, amount_usd, currency, token_name, token_address, transaction_hash, block_timestamp, index, success) إضافةً إلى metadata خاصة بالمزوّد. أمثلة شائعة على metadata:
metadata إضافية وخاصة بالمزوّد. لا تبنِ تكاملات حرجة تشترط وجود كل مفتاح في كل سلسلة.

Travel Rule

تكون null عندما لا تتضمن المعاملة تحويل Travel Rule أو فحصه. تُعبَّأ عند إرسالك travel_rule_details، وكذلك عندما تكون Travel Rule مفعّلة للتطبيق وأُنشئت المعاملة بالقيمة transaction_category: "travelRule": عندئذٍ يبدأ Didit تبادل البيانات بنفسه، سواء أُرسل travel_rule_details أم لم يُرسَل، ويعرض حالته status هنا. اقرأ هذا الحقل بدلًا من الطلب الذي أرسلته. في التحويل الوارد، تبقى originator_data وbeneficiary_data الخاصتان بالطرف المقابل مخفيتين (data_masked: true) إلى أن تُؤكَّد ملكية المحفظة (راجع بيانات الطرف المقابل المخفية).
تحمل الحقول direction وrail وcounterparty_vasp وdelivery وdiscovery وreason وnext_actions البنية نفسها الموجودة على endpoint الخاص بالتحويل. يوضح reason وnext_actions سبب توقف تحويل COUNTERPARTY_VASP_NOT_FOUND أو COUNTERPARTY_VASP_NOT_REACHABLE وما الذي يدفعه إلى الأمام، وتكونان "" و[] لأي حالة أخرى: راجع سبب توقف التحويل. يتضمن كل صف في GET /v3/transactions/ الكتلة نفسها. راجع Travel Rule.

لقطة الشبكة

المخطط المخزَّن نفسه، لا مرجع إليه. ويأتي من أحد المصدرين:
  • network_snapshot أرسلته مع المعاملة، أو
  • المخطط الذي يبنيه Didit عند نجاح فحص المحافظ بـ AML لمعاملة بعملة مشفّرة، حتى لو لم يتضمن الطلب network_snapshot. يحلّ المخطط المبني من الفحص محل المخطط المُرسَل، وتُحدّثه إعادة فحص غير متزامنة.
تكون null عند عدم وجود أيٍّ منهما:
تعرض صفحة تفاصيل المعاملة في وحدة التحكم المخطط نفسه.

الوسوم والبيانات الوصفية والخصائص

  • tags[]: الوسوم المرفقة (إما بإجراء قاعدة أو بواسطة المحلل): { "uuid", "name", "color", "description", "source" }، حيث تكون قيمة source هي didit للوسم المعدّ مسبقًا وcustom للوسم الخاص بك.
  • metadata: لقطة من بيانات subject وcounterparty تمامًا كما أرسلتها وقت الإنشاء، ضمن هذين المفتاحين.
  • props: قيم custom_properties التي أرسلتها وقت الإنشاء. يمكن الإشارة إلى كل مفتاح في شروط القواعد باستخدام custom_values.<key>.

المعالجة

عندما تُشغّل قاعدةٌ الحالة AWAITING_USER، ينشئ Didit جلسة التحقق المرتبطة ويعيدها في حقلين:
  • remediation: الجلسة المرتبطة: { "session_id", "session_token", "url", "status" }. تبقى مُعبّأة طوال عمر المعاملة، لتتمكن دائمًا من معرفة كيف انتهى إجراء المستخدم.
  • action_required: الإجراء الذي يجب على المستخدم اتخاذه الآن، أو null عندما لا يكون هناك شيء معلّق: { "type": "verification_session", "url", "session_id", "session_token", "status" }. وجِّه المستخدم إلى url، أو مرّر session_token إلى Didit SDK. تستخدم إجراءات ملكية المحفظة في Travel Rule الكتلة { "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }، وتكون لها الأولوية عندما ينطبق الاحتمالان معًا. وعندما يكون إجراء ملكية المحفظة معلّقًا ولم يُعثر على الطرف المقابل للتحويل، تتضمن الكتلة نفسها أيضًا reason وnext_actions (راجع اكتشاف الطرف المقابل).
يرد الحقلان نفسهما في حمولتي webhook الخاصّتين بـ transaction.created وtransaction.status.updated (action_required)، راجع webhooks.

تفصيل التكلفة

تكون null إلى أن تُنفَّذ ميزة خاضعة للفوترة للمعاملة. وإلا فهي { "total_price", "items": [ { "usage_type", "price", "details" } ] }، بعنصر واحد لكل ميزة تُحتسب بالاستخدام (الفحص، والإثراء، وغير ذلك).

تحويل العملات

preferred_currency_amount هي قيمة amount بعد تحويلها إلى العملة المفضلة لتطبيقك وفق أسعار السوق المتوسطة، ما لم تُرسل amount_in_default_currency، وفي هذه الحالة تُستخدم القيمة المحوّلة مسبقاً كما هي. تقارن شروط القواعد التي تستخدم amount المبلغ الأصلي؛ استخدم preferred_currency_amount في الشروط عندما تحتاج إلى حد واحد عبر العملات.

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

إرسال المعاملات

مخطط الطلب الكامل.

الحالات

ما تعنيه كل حالة.

احتساب الدرجات

كيف تُحسب الدرجة.
آخر تعديل في ٧ نوفمبر ٢٠٢٦