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

# واجهة API للتحقق من رمز البريد الإلكتروني

> التحقق من رمز البريد لمرة واحدة عبر POST /v3/email/check/ مع إشارات الاختراق والعناوين المؤقتة من Didit. دفع حسب الاستخدام بلا عقود.

## الإضافة الاستخباراتية

اضبط `enable_enrichment` على `true` لتشغيل استخبارات البريد الإلكتروني على العنوان أيضًا، فتحصل على درجة المخاطر وسجل تسريبات البيانات المرتبطة به.
تُحتسب الإضافة بسعر \$0.05 لكل طلب وفق السعر المعلن، وتُضاف إلى سعر الفحص نفسه.
يُعيد الطلب الاستجابة `403` عندما لا يغطي رصيدك تكلفتها.

تحدد ثلاثة حقول ما تفعله الإشارات. كل حقل منها إما `NO_ACTION` (وهي القيمة الافتراضية) أو `DECLINE`، ولا يسري أي منها إلا عندما تكون قيمة `enable_enrichment` هي `true`.

| الحقل | يُرفض عندما |
| - | - |
| `email_intelligence_score_action` | تتجاوز درجة المخاطر الحد المحدد. |
| `recent_email_breach_action` | يظهر العنوان في تسريب بيانات معروف وحديث. |
| `frequent_email_breach_action` | يظهر العنوان في عدة تسريبات بيانات معروفة. |

مع `NO_ACTION`، تُعاد الإشارة في `email.email_intelligence` مع ذلك، لتتمكن من تطبيق قاعدتك الخاصة.


## OpenAPI

````yaml ar/openapi-25.json POST /v3/email/check/
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/email/check/:
    post:
      tags:
        - Standalone APIs
      summary: التحقق من رمز البريد الإلكتروني
      description: >-
        تحقق من رمز OTP المُرسَل بواسطة [`POST
        /v3/email/send/`](/ar/standalone-apis/email-send) واحصل على نتيجة التحقق
        النهائية بالإضافة إلى معلومات استخبارات البريد الإلكتروني: قابلية
        التسليم، والتعرض للاختراق (`is_breached` وقائمة `breaches` من قاعدة
        بيانات استخبارات الاختراقات)، واكتشاف موفري البريد المؤقت، والاستخدام
        المتكرر للعنوان عبر جلساتك.


        **كيف يعثر الفحص على عملية التحقق.** تتم المطابقة بناءً على تطبيقك
        بالإضافة إلى عنوان `email` — ولا يُعد `request_id` معاملاً للمُدخلات.
        يتم فحص أحدث عملية تحقق معلقة تم إنشاؤها خلال آخر **5 دقائق**. إذا لم
        تكن هناك أي عملية (لم يتم الإرسال مطلقاً، أو تم إنهاؤها بالفعل، أو كانت
        غير قابلة للتسليم وقت الإرسال، أو أقدم من 5 دقائق)، فإن الـ endpoint
        يرجع `200` مع `status: "Expired or Not Found"`.


        **عدد المحاولات المتاحة.** تتيح كل عملية تحقق **3 محاولات للرمز**. يؤدي
        إدخال أول رمزين غير صحيحين إلى إرجاع `status: "Failed"` مع المحاولات
        المتبقية و`email: null`؛ أما الرمز غير الصحيح الثالث فيُنهي عملية التحقق
        بالحالة `Declined` مع تحذير `EMAIL_CODE_ATTEMPTS_EXCEEDED` ويُرجع تقرير
        البريد الإلكتروني الكامل. تتم مقارنة الرموز دون حساسية لحالة الأحرف (وهو
        أمر مهم لعمليات إرسال `alphanumeric_code`)؛ والرمز المرسل الأحدث هو
        الوحيد الصالح.


        **النتائج.** `Approved` — رمز صحيح ولا توجد مخاطر تستوجب الرفض.
        `Declined` — حالة نهائية: كان الرمز صحيحاً ولكن تطابق خطر يستوجب الرفض
        (إجراء `DECLINE` أدناه، أو عنوان في قائمة الحظر، أو تبين أن العنوان غير
        قابل للتسليم عند الإنهاء)، أو استنفاد عدد المحاولات المتاحة. `Failed` —
        رمز خاطئ، مع وجود محاولات متبقية. `Expired or Not Found` — لا يوجد ما
        يمكن فحصه. في حالتي `Approved`/`Declined`، يكون `request_id` مساوياً لـ
        `request_id` الخاص بالإرسال (معرّف الجلسة) ويحمل `email` التقرير الكامل
        (`is_breached`، و`breaches`، و`is_disposable`، و`is_undeliverable`،
        و`warnings`، و`lifecycle`، و`matches`)؛ وفي حالتي `Failed` و`Expired or
        Not Found`، يكون `request_id` عبارة عن UUID عشوائي يُنشأ لمرة واحدة.


        **إجراءات المخاطر.** تحدد معاملات `duplicated_email_action`
        و`breached_email_action` و`disposable_email_action` ما يحدث عند اكتشاف
        الخطر المقابل مع إدخال رمز صحيح: يُغيّر `DECLINE` الحالة النهائية إلى
        `Declined`؛ بينما يُسجل `NO_ACTION` (الافتراضي) الخطر في
        `email.warnings` دون التأثير على الحالة.


        **الفوترة.** الفحوصات مجانية — يُستهلك الرصيد بواسطة عملية الإرسال
        الناجحة.


        **استمرارية الجلسة.** يُحدّث الفحص المكتمل الجلسة التي تم إنشاؤها بواسطة
        الإرسال (تكون مرئية في Business Console، وقابلة للاستعلام عبر `GET
        /v3/session/{sessionId}/decision/`) ويُطلق حدث webhook من نوع
        `status.updated`.


        **البيئة التجريبية.** تتخطى مفاتيح API الخاصة بالبيئة التجريبية كافة
        عمليات المعالجة: يُرجع أي رمز ذي بنية صحيحة (بما في ذلك `123456`)
        payload ثابتاً بالحالة `Approved` مع كائن `email` مبسط (`status`
        و`email` و`is_breached` و`is_disposable` و`is_undeliverable`)؛ وتظل
        المدخلات غير صالحة البنية تُرجع `400`. لا يتم حفظ أي شيء.


        **المصادقة.** أرسل مفتاح API الخاص بتطبيقك في الرأس `x-api-key`. تُرجع
        بيانات الاعتماد المفقودة أو غير الصالحة الرمز `403` (`{"detail": "You do
        not have permission to perform this action."}`) — لا تُرجع واجهة API هذه
        الرمز `401` مطلقاً.


        **حد المعدل.** ميزانية كتابة مشتركة تبلغ 300 طلب/دقيقة لكل مفتاح API عبر
        جميع endpoints الخاصة بـ POST/PATCH/DELETE؛ ويؤدي تجاوزها إلى إرجاع
        `429`.


        **البصمة على وسائل التواصل الاجتماعي.** اضبط `enable_social` على `true`
        لإضافة كتلة `email_social`: المنصات عبر الإنترنت المسجل عليها هذا
        العنوان، مع أعداد لكل فئة وأي تفاصيل ملف شخصي متاحة. وتعني
        `profiles_registered: 0` أنه تم فحص المنصات ولم يتم العثور على العنوان
        في أي منها - وهي إجابة صالحة وخاضعة للفوترة. تكون الكتلة غائبة إذا لم
        يتم طلب هذه الإضافة أو تعذر إكمال الفحص، ولا تتم فوترتها في هذه الحالة.
        تضيف الفوترة وحدة `email_social` واحدة لكل طلب بالإضافة إلى سعر الـ
        endpoint نفسه.
      operationId: post_v3email_check
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  format: email
                  description: >-
                    عنوان البريد الإلكتروني نفسه المستخدم في استدعاء [`POST
                    /v3/email/send/`](/ar/standalone-apis/email-send) المطابق.
                    هذا ما يربط التحقق بعملية الإرسال.
                  example: alice@example.com
                code:
                  type: string
                  maxLength: 10
                  description: >-
                    رمز OTP الذي استلمه المستخدم النهائي: من 4 إلى 8 أرقام، أو
                    من 4 إلى 8 أحرف/أرقام عند استخدام `alphanumeric_code: true`
                    في وقت الإرسال. المقارنة لا تتأثر بحالة الأحرف.
                  example: '123456'
                duplicated_email_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء المتخذ عند استخدام نفس العنوان مسبقاً وقبوله من قبل
                    مستخدم مختلف (يتم احتساب عمليات التحقق المقبولة سابقاً فقط)
                    (بيانات `vendor_data` مختلفة) لتطبيقك. يؤدي خيار `DECLINE`
                    إلى تحويل `status` النهائي إلى `Declined`؛ ويسجل خيار
                    `NO_ACTION` المخاطر في `email.warnings` ويملأ
                    `email.matches`.
                breached_email_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء المتبع عندما يظهر العنوان في تسريبات بيانات معروفة
                    (`email.is_breached`). يحول `DECLINE` القيمة النهائية لـ
                    `status` إلى `Declined`؛ ويسجل `NO_ACTION` الخطر في
                    `email.warnings`.
                disposable_email_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء المتخذ عندما ينتمي النطاق إلى موفر بريد إلكتروني
                    مؤقت أو يمكن التخلص منه (`email.is_disposable`). يؤدي خيار
                    `DECLINE` إلى تحويل `status` النهائي إلى `Declined`؛ ويسجل
                    خيار `NO_ACTION` المخاطر في `email.warnings`.
                enable_enrichment:
                  type: boolean
                  default: false
                  description: >-
                    عندما تكون `true`، يتم أيضاً تشغيل استخبارات البريد
                    الإلكتروني على العنوان: درجة المخاطر وسجل الاختراقات الخاص
                    به. تتم الفوترة كوحدة `email_intelligence_api` واحدة لكل طلب
                    ($0.05 بسعر القائمة) بالإضافة إلى سعر endpoint هذا نفسه.
                    يُرجع الطلب `403` عندما لا يكفي رصيدك لتغطيته.
                  example: false
                email_intelligence_score_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء عند تجاوز درجة مخاطر معلومات البريد الإلكتروني للحد
                    المعين. القيمة `DECLINE` تحول الـ `status` النهائي إلى
                    `Declined`؛ والقيمة `NO_ACTION` تسجل الإشارة دون رفض. يسري
                    مفعوله فقط عندما يكون `enable_enrichment` مضبوطاً على
                    `true`.
                recent_email_breach_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء المتخذ عندما يظهر العنوان في تسريب بيانات معروف
                    حديث. يغير `DECLINE` الـ `status` النهائي إلى `Declined`؛
                    ويسجل `NO_ACTION` الإشارة دون رفض. يسري مفعوله فقط عندما
                    يكون `enable_enrichment` مضبوطاً على `true`.
                frequent_email_breach_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء المتخذ عندما يظهر العنوان في العديد من تسريبات
                    البيانات المعروفة. يغير `DECLINE` الـ `status` النهائي إلى
                    `Declined`؛ ويسجل `NO_ACTION` الإشارة دون رفض. يسري مفعوله
                    فقط عندما يكون `enable_enrichment` مضبوطاً على `true`.
                enable_social:
                  type: boolean
                  default: false
                  description: >-
                    عند التعيين على true، يتم أيضاً البحث عن الأثر الرقمي
                    الاجتماعي للعنوان - منصات البريد الإلكتروني والمنصات
                    الاجتماعية والمهنية والتجارة الإلكترونية والترفيه المسجل
                    عليها. يُفوتر كوحدة `email_social` واحدة لكل طلب بالإضافة
                    إلى سعر هذا الـ endpoint نفسه.
                  example: true
                email_no_social_presence_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    الإجراء عندما يجد فحص الأثر الاجتماعي أن العنوان غير مسجل
                    على أي من المنصات التي يغطيها. يُقبل فقط NO_ACTION وDECLINE
                    في هذا الـ endpoint؛ يتوفر REVIEW في مفتاح تهيئة سير العمل
                    الذي يحمل نفس الاسم.
              required:
                - email
                - code
            examples:
              Default:
                summary: تسجيل أي مخاطر ولكن دون الرفض التلقائي مطلقاً
                value:
                  email: alice@example.com
                  code: '123456'
              Strict risk policy:
                summary: الرفض التلقائي لصناديق البريد المؤقتة والمخترقة
                value:
                  email: alice@example.com
                  code: '123456'
                  disposable_email_action: DECLINE
                  breached_email_action: DECLINE
      responses:
        '200':
          description: >-
            اكتمل التحقق — تُرجع الرموز الخاطئة وعمليات التحقق المفقودة أيضاً
            الرمز `200`؛ تحقّق من `status`، وليس رمز HTTP. يتم ملء `email` فقط
            في النتائج النهائية (`Approved`/`Declined`)، ويكون `null` عند
            `Failed`، وغير موجود عند `Expired or Not Found`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailVerificationCheckResponse'
              examples:
                Approved:
                  summary: رمز صحيح — عنوان سليم، تقرير بريد إلكتروني كامل
                  value:
                    request_id: e39cb057-92fc-4b59-b84e-02fec29a0f24
                    status: Approved
                    message: The verification code is correct.
                    email:
                      status: Approved
                      email: alice@example.com
                      is_breached: false
                      breaches: []
                      is_disposable: false
                      is_undeliverable: false
                      verification_attempts: 1
                      verified_at: '2026-06-12T01:24:47.311323Z'
                      warnings: []
                      lifecycle:
                        - type: EMAIL_VERIFICATION_MESSAGE_SENT
                          timestamp: '2026-06-12T01:23:39.580554+00:00'
                          details:
                            status: Success
                            reason: null
                          fee: 0.02
                        - type: VALID_CODE_ENTERED
                          timestamp: '2026-06-12T01:24:47.311201+00:00'
                          details:
                            code_tried: '123456'
                            status: Approved
                          fee: 0
                        - type: EMAIL_VERIFICATION_APPROVED
                          timestamp: '2026-06-12T01:24:47.384292+00:00'
                          details: null
                          fee: 0
                      matches: []
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-12T01:24:47.401719+00:00'
                Approved with breach exposure:
                  summary: >-
                    رمز صحيح؛ تم تسجيل التعرض للاختراق كتحذير
                    (breached_email_action=NO_ACTION)
                  value:
                    request_id: 3a1f2b6c-9d4e-4f7a-8b2c-1e5d6f7a8b9c
                    status: Approved
                    message: The verification code is correct.
                    email:
                      status: Approved
                      email: bob@example.com
                      is_breached: true
                      breaches:
                        - name: ExampleApp
                          domain: exampleapp.com
                          breach_date: '2019-03-21'
                          breach_emails_count: 763117
                          description: >-
                            In March 2019, the social platform ExampleApp
                            suffered a data breach that exposed email addresses
                            and passwords.
                          logo_path: https://<media-host>/logos/ExampleApp.png
                          data_classes:
                            - email_addresses
                            - passwords
                          is_verified: true
                      is_disposable: false
                      is_undeliverable: false
                      verification_attempts: 1
                      verified_at: '2026-06-12T01:24:47.311323Z'
                      warnings:
                        - feature: EMAIL
                          risk: BREACHED_EMAIL_DETECTED
                          additional_data: null
                          log_type: information
                          short_description: Breached email detected
                          long_description: >-
                            This email address was found in one or more known
                            data breaches.
                      lifecycle:
                        - type: EMAIL_VERIFICATION_MESSAGE_SENT
                          timestamp: '2026-06-12T01:23:39.580554+00:00'
                          details:
                            status: Success
                            reason: null
                          fee: 0.02
                        - type: VALID_CODE_ENTERED
                          timestamp: '2026-06-12T01:24:47.311201+00:00'
                          details:
                            code_tried: '835126'
                            status: Approved
                          fee: 0
                        - type: EMAIL_VERIFICATION_APPROVED
                          timestamp: '2026-06-12T01:24:47.384292+00:00'
                          details: null
                          fee: 0
                      matches: []
                    vendor_data: user-5678
                    metadata: null
                    created_at: '2026-06-12T01:24:47.401719+00:00'
                Failed (attempts remaining):
                  summary: >-
                    رمز خاطئ — يمكن للمستخدم إعادة المحاولة؛ request_id هنا هو
                    UUID يستخدم لمرة واحدة
                  value:
                    request_id: 11111111-2222-3333-4444-555555555555
                    status: Failed
                    message: 'The verification code is incorrect. Attempts remaining: 2'
                    email: null
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-12T01:24:21.512340+00:00'
                Declined (risk policy):
                  summary: رمز صحيح، لكن العنوان مؤقت وdisposable_email_action=DECLINE
                  value:
                    request_id: 8c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f
                    status: Declined
                    message: The verification code is correct.
                    email:
                      status: Declined
                      email: tempuser42@mailinator.com
                      is_breached: false
                      breaches: []
                      is_disposable: true
                      is_undeliverable: false
                      verification_attempts: 1
                      verified_at: '2026-06-12T01:24:47.311323Z'
                      warnings:
                        - feature: EMAIL
                          risk: DISPOSABLE_EMAIL_DETECTED
                          additional_data: null
                          log_type: error
                          short_description: Disposable email detected
                          long_description: >-
                            The system detected that the email is disposable,
                            which is not allowed.
                      lifecycle:
                        - type: EMAIL_VERIFICATION_MESSAGE_SENT
                          timestamp: '2026-06-12T01:23:39.580554+00:00'
                          details:
                            status: Success
                            reason: null
                          fee: 0.02
                        - type: VALID_CODE_ENTERED
                          timestamp: '2026-06-12T01:24:47.311201+00:00'
                          details:
                            code_tried: '123456'
                            status: Approved
                          fee: 0
                        - type: EMAIL_VERIFICATION_DECLINED
                          timestamp: '2026-06-12T01:24:47.384292+00:00'
                          details:
                            reason: DISPOSABLE_EMAIL_DETECTED
                          fee: 0
                      matches: []
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-12T01:24:47.401719+00:00'
                Expired or Not Found:
                  summary: لا يوجد تحقق معلق لهذا العنوان في آخر 5 دقائق
                  value:
                    request_id: 88808a77-06e9-4cb0-85f5-9c052ddfd987
                    status: Expired or Not Found
                    message: No pending email verification found in the last 5 minutes.
                    vendor_data: null
                    metadata: null
                    created_at: '2026-06-12T01:24:59.887904+00:00'
        '400':
          description: >-
            خطأ في التحقق من الصحة — غلاف أخطاء الحقول الخاص بـ DRF: مصفوفة
            رسائل واحدة لكل حقل مخالف.
          content:
            application/json:
              examples:
                Invalid email:
                  summary: عنوان بريد إلكتروني غير صالح
                  value:
                    email:
                      - Enter a valid email address.
                Missing code:
                  summary: '`code` غير مدرج في نص الطلب'
                  value:
                    code:
                      - This field is required.
        '403':
          description: >-
            تم رفض الإذن. يُرجع عند فقدان الرأس `x-api-key`؛ ويُرجع المفتاح
            الخاطئ أو الملغى أو منتهي الصلاحية `401`. عمليات الفحص مجانية، لذا
            لا يوجد فحص للرصيد هنا.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: لا يوجد رأس `x-api-key`، أو أن المفتاح غير صالح/ملغى
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            تم تجاوز حد المعدل. تشترك نقاط endpoint الخاصة بـ POST/PATCH/DELETE
            في ميزانية قدرها 300 طلب كتابة في الدقيقة لكل مفتاح API (إنشاء
            المعاملات واستيعاب الأحداث لهما ميزانية منفصلة تبلغ 600). تتضمن
            الاستجابة رؤوس `X-RateLimit-Limit` و`X-RateLimit-Remaining`
            و`X-RateLimit-Reset` و`Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: أكثر من 300 طلب كتابة في الدقيقة الحالية
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/email/check/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "email": "alice@example.com",
                "code": "123456",
                "disposable_email_action": "DECLINE"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.email.check_code(
                email="alice@example.com",
                code="123456",
            )
            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.email.checkCode({
              email: "alice@example.com",
              code: "123456",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Email.CheckCode(ctx, didit.EmailCheckCodeParams{\n\tEmail: \"alice@example.com\",\n\tCode:  \"123456\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;
            import me.didit.types.EmailCheckCodeParams;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            var result = client.email().checkCode(EmailCheckCodeParams.builder()
                    .email("alice@example.com")
                    .code("123456")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->email->checkCode([
                'email' => 'alice@example.com',
                'code' => '123456',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.email.check_code(
              email: "alice@example.com",
              code: "123456"
            )
            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.Email.CheckCodeAsync(new
            EmailCheckCodeParams

            {
                Email = "alice@example.com",
                Code = "123456",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    EmailVerificationCheckResponse:
      type: object
      properties:
        request_id:
          type: string
          format: uuid
          description: >-
            عند `Approved`/`Declined`: معرّف الجلسة لعملية التحقق المتطابقة —
            مطابق لـ `request_id` المُرجع بواسطة `POST /v3/email/send/`. عند
            `Failed` و`Expired or Not Found`: معرّف UUID عشوائي لمرة واحدة لا
            يمكن البحث عنه لاحقاً.
        status:
          type: string
          enum:
            - Approved
            - Declined
            - Failed
            - Expired or Not Found
          description: >-
            `Approved` — رمز صحيح، دون وجود مخاطر تؤدي إلى الرفض. `Declined` —
            نهائية: تطابقت مخاطر تؤدي إلى الرفض أو استُنفد الحد المسموح به من
            المحاولات (3). `Failed` — رمز خاطئ، مع بقاء محاولات متبقية. `Expired
            or Not Found` — لا توجد عملية تحقق معلقة لهذا العنوان خلال آخر 5
            دقائق.
        message:
          type: string
          description: >-
            تفسير سهل القراءة للنتيجة، بما في ذلك عدد المحاولات المتبقية بعد
            إدخال رمز خاطئ.
        email:
          type: object
          nullable: true
          description: >-
            تقرير البريد الإلكتروني الكامل. موجود (غير null) فقط في النتائج
            النهائية (`Approved`/`Declined`)؛ ويكون `null` في حالة `Failed` وغير
            موجود في حالة `Expired or Not Found`.
          properties:
            status:
              type: string
              enum:
                - Approved
                - Declined
                - In Review
                - Not Finished
                - Expired
              description: >-
                الحالة النهائية للتحقق من البريد الإلكتروني. تطابق `status` على
                المستوى الأعلى لعمليات الفحص المكتملة.
            email:
              type: string
              format: email
              description: عنوان البريد الإلكتروني الذي تم التحقق منه.
              example: alice@example.com
            is_breached:
              type: boolean
              description: >-
                تكون القيمة `true` عندما يظهر العنوان في تسريبات بيانات معروفة
                (يتم إجراء فحص معلومات الاختراق عند الإتمام).
            breaches:
              type: array
              description: >-
                ما يصل إلى أحدث 5 اختراقات معروفة تتضمن هذا العنوان. مصفوفة
                فارغة (أو محذوفة) عندما تكون قيمة `is_breached` هي `false`.
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: معرّف الاختراق.
                  domain:
                    type: string
                    description: نطاق الخدمة المخترقة.
                  breach_date:
                    type: string
                    format: date
                    description: تاريخ حدوث الانتهاك.
                  breach_emails_count:
                    type: integer
                    description: العدد الإجمالي للحسابات التي كُشفت في الاختراق.
                  description:
                    type: string
                    description: وصف سهل القراءة للخرق (قد يحتوي على ترميز HTML).
                  logo_path:
                    type: string
                    description: رابط URL لشعار الخدمة المخترقة.
                  data_classes:
                    type: array
                    items:
                      type: string
                    description: >-
                      فئات البيانات المكشوفة، بتنسيق snake_case (مثل
                      `email_addresses` و`passwords`).
                  is_verified:
                    type: boolean
                    description: ما إذا كان قد تم التحقق من صحة الاختراق.
            is_disposable:
              type: boolean
              description: >-
                تكون `true` عندما ينتمي النطاق إلى مزود بريد مؤقت/للاستخدام لمرة
                واحدة معروف.
            is_undeliverable:
              type: boolean
              description: >-
                تكون القيمة `true` عندما يتعذر على العنوان استلام البريد (فشل
                التحقق من الصيغة أو DNS/MX، أو ارتدت الرسالة).
            verification_attempts:
              type: integer
              description: >-
                عدد مرات إرسال رمز OTP لعملية التحقق هذه (1، أو 2 بعد إعادة
                المحاولة).
            verified_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                وقت إدخال الرمز الصحيح. تكون القيمة `null` إذا لم تتم الموافقة
                على التحقق مطلقاً.
            warnings:
              type: array
              description: >-
                تحذيرات المخاطر المسجلة أثناء التحقق (مكرر، أو مخترق، أو قابل
                للتخلص منه، أو غير قابل للتسليم، أو تجاوز المحاولات، أو قائمة
                الحظر، وما إلى ذلك). مصفوفة فارغة في حال عدم وجود أي منها.
              items:
                type: object
                properties:
                  feature:
                    type: string
                    description: الميزة التي أطلقت التحذير. دائماً `EMAIL` هنا.
                  risk:
                    type: string
                    description: رمز مخاطر مقروء آلياً.
                  additional_data:
                    type: object
                    nullable: true
                    description: >-
                      السياق الخاص بالمخاطر (على سبيل المثال، معرّف الجلسة
                      المكررة للمخاطر المكررة). يكون `null` عندما لا تتضمن
                      المخاطر أي بيانات إضافية.
                  log_type:
                    type: string
                    enum:
                      - error
                      - warning
                      - information
                    description: >-
                      مستوى الخطورة. تؤدي مخاطر `error` إلى رفض عملية التحقق،
                      وتضع `warning` علامة عليها للمراجعة، ويتم تسجيل
                      `information` دون التأثير على الحالة.
                  short_description:
                    type: string
                    description: ملخص للمخاطر في سطر واحد مقروء للبشر.
                  long_description:
                    type: string
                    description: تفسير سهل القراءة للمخاطر.
            lifecycle:
              type: array
              description: >-
                سجل تدقيق زمني لعملية التحقق. يكون `type` الخاص بالحدث أحد القيم
                التالية: `EMAIL_VERIFICATION_MESSAGE_SENT`، أو
                `EMAIL_VERIFICATION_RETRY_MESSAGE_SENT`، أو
                `VALID_CODE_ENTERED`، أو `INVALID_CODE_ENTERED`، أو
                `EMAIL_VERIFICATION_APPROVED`، أو `EMAIL_VERIFICATION_DECLINED`،
                أو `EMAIL_VERIFICATION_IN_REVIEW`، أو
                `EMAIL_VERIFICATION_EXPIRED`.
              items:
                type: object
                properties:
                  type:
                    type: string
                    description: نوع الحدث.
                  timestamp:
                    type: string
                    format: date-time
                    description: وقت وقوع الحدث.
                  details:
                    type: object
                    nullable: true
                    description: >-
                      الـ payload الخاص بالحدث. أحداث الإرسال: `{status,
                      reason}`. أحداث إدخال الرمز: `{code_tried, status}`. أحداث
                      الحالة النهائية: `null`، أو `{reason}` عندما تكون مرفوضة
                      أو قيد المراجعة.
                  fee:
                    type: number
                    description: >-
                      المبلغ بالدولار الأمريكي المفوتر لهذا الحدث. لا يكون صفراً
                      إلا عند أول إرسال ناجح؛ ويكون 0 لإعادات المحاولة وإدخالات
                      الرمز وأحداث الحالة.
            matches:
              type: array
              description: >-
                جلسات أخرى لتطبيقك (KYC أو KYB أو API) تم فيها استخدام نفس عنوان
                البريد الإلكتروني بواسطة مستخدم مختلف (`vendor_data` مختلف). ما
                يصل إلى 5 إدخالات؛ تتم إضافة مطابقة قائمة حظر اصطناعية من إدخال
                القائمة في البداية عند وجودها (وفقط عند عدم وجود بريد إلكتروني
                مدرج في قائمة الحظر مشتق من الجلسة) — تحافظ المطابقات المشتقة من
                الجلسات على ترتيب created_at. مصفوفة فارغة عند عدم وجود مطابقات.
              items:
                type: object
                properties:
                  session_id:
                    type: string
                    format: uuid
                    description: >-
                      معرّف الجلسة لعملية التحقق الأخرى التي استخدمت عنوان
                      البريد الإلكتروني هذا.
                  session_number:
                    type: integer
                    description: رقم تسلسلي سهل القراءة لتلك الجلسة.
                  vendor_data:
                    type: string
                    nullable: true
                    description: '`vendor_data` لتلك الجلسة.'
                  verification_date:
                    type: string
                    description: وقت إنشاء تلك الجلسة (`YYYY-MM-DDTHH:MM:SSZ`).
                  email:
                    type: string
                    description: عنوان البريد الإلكتروني المتطابق.
                  status:
                    type: string
                    description: >-
                      حالة تلك الجلسة (مثل `Approved`، `Declined`، `In
                      Progress`).
                  is_blocklisted:
                    type: boolean
                    description: >-
                      ما إذا كان عنوان البريد الإلكتروني موجوداً في قائمة الحظر
                      الخاصة بتطبيقك.
                  api_service:
                    type: string
                    nullable: true
                    description: >-
                      بالنسبة للجلسات من نوع API، واجهة API المستقلة التي
                      أنشأتها (مثل `PHONE_VERIFICATION`)؛ و `null` لجلسات التحقق
                      العادية.
                  source:
                    type: string
                    description: >-
                      مكان العثور على التطابق. عادةً ما يكون `session`؛ وإذا حدث
                      تطابق مع قائمة الحظر عبر إدخال في قائمة تابعة للمؤسسة،
                      يُضاف في البداية تطابق اصطناعي يحتوي على `source:
                      "list_entry"` وقيمة null لكل من
                      `session_id`/`session_number`.
            email_social:
              $ref: '#/components/schemas/EmailSocialFootprint'
            email_intelligence:
              allOf:
                - $ref: '#/components/schemas/EmailIntelligence'
              description: >-
                إشارات معلومات البريد الإلكتروني. متوفرة فقط عندما تكون قيمة
                `enable_enrichment` هي `true` في الفحص.
        vendor_data:
          type: string
          nullable: true
          description: >-
            `vendor_data` لجلسة التحقق المطابقة. وتكون `null` عند `Expired or
            Not Found`.
        metadata:
          type: object
          nullable: true
          description: >-
            `metadata` لجلسة التحقق المتطابقة. `null` عند `Expired or Not
            Found`.
        created_at:
          type: string
          format: date-time
          description: الطابع الزمني لاستجابة هذا الفحص.
    EmailSocialFootprint:
      type: object
      nullable: true
      description: >-
        البصمة الاجتماعية لعنوان البريد الإلكتروني: المنصات الإلكترونية المسجل
        عليها. تظهر فقط عند تعيين `enable_social` واكتمال الفحص. قد يكون كل عدد
        null عندما لا يتم إرجاع أي بيانات له. تعني `profiles_registered: 0` أنه
        تم فحص المنصات ولم يتم العثور على عنوان البريد الإلكتروني في أي منها -
        وهي إجابة صالحة وخاضعة للفوترة وإشارة شائعة للهوية الاصطناعية.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: المنصات التي تم تأكيد تسجيل عنوان البريد الإلكتروني فيها.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: المنصات التي تم تقييمها للتسجيل.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: المنصات التي أرجعت اسماً مرتبطاً.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: المنصات التي أرجعت صورة للملف الشخصي.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: منصات التواصل التي تم اكتشاف وجود المستخدم فيها.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: فئات منصات مميزة مع تواجد تم اكتشافه.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: مؤشر النضج الرقمي المركب، من 0 إلى 10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: مؤشر ثراء الملف التعريفي، من 0 إلى 10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: مزيج المنصات المجانية مقابل المدفوعة، من 0 إلى 10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المجانية.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المدفوعة بالكامل.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المجانية جزئيًا.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            مدى اكتمال الملف التعريفي على WhatsApp. للهاتف فقط؛ وتكون القيمة
            فارغة (null) للبريد الإلكتروني.
          example: Partial
        registered_platforms:
          type: array
          description: المنصات التي تم تأكيد التسجيل فيها.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: المنصات التي تم فحصها وكانت النتيجة سلبية.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: عدد التسجيلات ونسبتها حسب فئة المنصة.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            تفاصيل الملف التعريفي لكل منصة، مفهرسة بحسب المنصة، عندما توفرها
            المنصة.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    EmailIntelligence:
      type: object
      description: >-
        كتلة معلومات البريد الإلكتروني المعيارية. تظهر فقط عند تشغيل الوظيفة
        الإضافية للمعلومات لهذا البريد الإلكتروني؛ وعند ظهورها يتم عرضها أيضاً
        بالاسم المستعار `enrichment` بنفس القيم.
      properties:
        score:
          type: number
          nullable: true
          description: درجة مخاطر معيارية من 0 إلى 100. تشير القيمة الأعلى إلى مخاطر أكبر.
        deliverable:
          type: string
          nullable: true
          description: نطاق قابلية التسليم (مثل `high`).
        breach_risk_level:
          type: string
          nullable: true
          description: '`Low` أو `Medium` أو `High`.'
        breach_risk_index:
          type: number
          nullable: true
          description: مؤشر رقمي لمخاطر الاختراق.
        is_recent_breach:
          type: boolean
          nullable: true
          description: تكون القيمة `true` عندما يظهر العنوان في اختراق أمني حديث.
        is_frequent_breached:
          type: boolean
          nullable: true
          description: >-
            تكون القيمة `true` عندما يظهر العنوان في العديد من الاختراقات
            الأمنية.
        is_disposable:
          type: boolean
          nullable: true
          description: تكون `true` عندما يكون النطاق مزود بريد للاستخدام مرة واحدة.
        is_free_domain:
          type: boolean
          nullable: true
          description: تكون `true` عندما يكون النطاق مزود بريد إلكتروني مجاني.
        is_breached:
          type: boolean
          nullable: true
          description: تكون القيمة `true` عندما يظهر العنوان في اختراقات أمنية معروفة.
        no_of_breaches:
          type: number
          nullable: true
          description: عدد الاختراقات المعروفة التي تحتوي على العنوان.
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  معرّف Didit الثابت للإشارة، على سبيل المثال `IR-5AC67A32`. غير
                  قابل للتفسير: قم بالتجميع والتصفية بناءً عليه، ولا تقم بتحليله
                  برمجياً.
              value:
                nullable: true
                description: >-
                  لعلامة المخاطر (على سبيل المثال `voip`، `leaked`،
                  `disposable`، `spam_trap`)، قيمتها: قيمة منطقية أو مستوى أو
                  تاريخ. Null لرمز سبب تم احتساب درجاته.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: >-
                  ما إذا كانت الإشارة قد رفعت مستوى المخاطر أو زادت من درجة
                  الثقة.
              message:
                type: string
                description: تفسير سهل القراءة للإشارة، باللغة الإنجليزية.
              impact_level:
                type: string
                nullable: true
                description: >-
                  مدى تأثير الإشارة في تغيير الدرجة، على سبيل المثال `low` أو
                  `medium` أو `high`.
          description: >-
            الإشارات التي تفسر الدرجة، لكل منها رمز Didit ثابت، واتجاه، ورسالة،
            ومستوى تأثير. يمكن أن تظهر رموز جديدة بمرور الوقت، لذا لا ترفض
            الرموز غير المعروفة.
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: معرّف المنصة.
          example: whatsapp
        category:
          type: string
          description: >-
            فئة المنصة، مثل MESSAGING أو SOCIAL_MEDIA أو ECOMMERCE أو
            PROFESSIONAL أو EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: '`global` للمنصات العالمية، و`local` للمنصات الخاصة بمنطقة معينة.'
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: المنصات في هذه الفئة التي تم تأكيد التسجيل فيها.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: حصة المنصات المفحوصة في الفئة التي تحتوي على تسجيل، 0.0-1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: اسم الملف التعريفي، إذا وفرته المنصة.
        photo:
          type: string
          nullable: true
          description: رابط الصورة الشخصية للملف التعريفي، إذا وفرته المنصة.
        about:
          type: string
          nullable: true
          description: نص النبذة التعريفية للملف التعريفي، إذا وفرته المنصة.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: مستوى رؤية الملف التعريفي، إذا وفرته المنصة.
        business_account:
          type: boolean
          nullable: true
          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.