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

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

> راجع المستلم ومعرّف المرسل والرسالة المترجمة ورابط التحقق في Didit قبل طلب إعادة التقديم.

المعاينة لا تغيّر الجلسة ولا ترسل أي بريد إلكتروني.
بعد مراجعة الاستجابة، أكّد الطلب عبر [تحديث حالة الجلسة](https://docs.didit.me/ar/sessions-api/update-status.md) ومرّر القيمة `preview_token` المُعادة بوصفها `email_preview_token`.
تنتهي صلاحية الإيصال بعد 15 دقيقة.
يُرجع الإيصال المتغيّر أو منتهي الصلاحية الرمز `409` قبل تغيير الجلسة أو إرسال أي بريد إلكتروني.
أنشئ معاينة جديدة بعد حدوث التعارض.
قد تُغفل تكاملات API الحالية الإيصال، إذ تتولى وحدة التحكم توفيره عند تأكيد المعاينة.

يتبع المُرسِل والعلامة التجارية إعدادات [العلامة البيضاء](https://docs.didit.me/ar/console/white-label.md) الحالية لديك.
يأتي محتوى الرسالة من قالب التحقق المترجم، ولا يُقبل أي موضوع أو نص رسالة أو رابط إجراء بوصفه مدخلاً للقالب.

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

الحقل `email_address` اختياري.
في حال غيابه، يُرسل البريد إلى عنوان الشخص نفسه: العنوان الذي تحقق منه في خطوة التحقق من البريد الإلكتروني ضمن سير العمل، وإلا فالعنوان الوارد في `contact_details` عند إنشاء الجلسة.
العنوان الذي تمرّره في `email_address` له الأولوية.

يوضح لك `recipient_source` العنوان المعتمد:

| `recipient_source` | مصدر `recipient` |
| - | - |
| `email_verification` | العنوان الذي تحقق منه الشخص في سير العمل |
| `contact_details` | العنوان الوارد في `contact_details` عند إنشاء الجلسة |
| `request` | `email_address` الذي مررته |
| `""` (فارغ) | لا يُعرف أي عنوان: يكون `recipient` و`preview_token` فارغين ولا يمكن إرسال أي بريد إلكتروني |

## هل يُرسل البريد الإلكتروني

يكون `will_be_sent` بقيمة `true` عندما يرسل تأكيد إعادة التقديم بقيمة `send_email: true` البريد الإلكتروني.
وعندما تكون القيمة `false`، يوضح `not_sent_reason` السبب:

| `not_sent_reason` | معناها |
| - | - |
| `no_user_action` | تُنفَّذ كل الخطوات المحددة دون مشاركة الشخص (مثل AML أو التحقق من قواعد البيانات)، لذا تنتهي إعادة التقديم تلقائياً ولا يُرسل أي بريد إلكتروني. كذلك يكون `requires_user_action` بقيمة `false`. |
| `no_recipient` | لا يُعرف أي عنوان للشخص ولم تمرّر أيّاً. |
| `sandbox` | الجلسة في البيئة التجريبية، ولم يوافق المستلم على تلقي البريد الإلكتروني في البيئة التجريبية، لذا يُحاكى إرسال البريد فقط. راجع [الاشتراك في إرسال البريد الإلكتروني](https://docs.didit.me/ar/integration/sandbox-testing.md#رموز-otp-والاشتراك-في-البريد-الإلكتروني). |

## تأكيد إعادة التقديم

استدعِ [تحديث حالة الجلسة](https://docs.didit.me/ar/sessions-api/update-status.md) باستخدام الحقول التالية:

| حقل تحديث حالة الجلسة | القيمة |
| - | - |
| `new_status` | `Resubmitted` |
| `nodes_to_resubmit` | نفس الاختيار الذي عاينته (احذفه إن حذفته في المعاينة) |
| `send_email` | `true` |
| `email_address` | `recipient` من المعاينة |
| `email_language` | نفس `email_language` الذي أرسلته إلى المعاينة |
| `email_preview_token` | `preview_token` من المعاينة |

تمثّل `language` في الاستجابة لغة كتابة البريد الإلكتروني: تكون الإنجليزية إذا لم تتوفر اللغة التي طلبتها.

## عمليات إعادة التقديم المتكررة التي تتم في الخلفية فقط

عندما تُنفَّذ كل خطوات إعادة التقديم دون مشاركة الشخص (AML أو التحقق من قواعد البيانات أو تحليل عنوان IP)، لا يمكن إعادة تقديم الجلسة لصالحه إلا مرة واحدة كل 30 ثانية.
خلال تلك الفترة تُرجع المعاينة الرمز `429`، كما يفعل تحديث حالة الجلسة، مع مدة الانتظار في الرأس `Retry-After`.

## ذات صلة

* [تحديث حالة الجلسة](https://docs.didit.me/ar/sessions-api/update-status.md): أكّد إعادة التقديم.
* [معاينة بريد القرار](https://docs.didit.me/ar/sessions-api/preview-decision-email.md): عاين البريد الإلكتروني الخاص بالقبول أو الرفض بدلاً من ذلك.
* [العلامة البيضاء](https://docs.didit.me/ar/console/white-label.md): المُرسِل والعلامة التجارية التي يستخدمها البريد.


## OpenAPI

````yaml ar/openapi-25.json POST /v3/session/{sessionId}/resubmission-preview/
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/session/{sessionId}/resubmission-preview/:
    post:
      tags:
        - Sessions
      summary: معاينة بريد إلكتروني لإعادة الإرسال
      description: >-
        توليد معاينة للبريد الإلكتروني الذي سيرافق إعادة تقديم KYC أو KYB دون
        تغيير الجلسة، أو إعادة تعيين الفحوصات، أو تمديد تاريخ انتهائها، أو تشغيل
        الفحوصات، أو إرسال البريد. يتطلب صلاحية `write:sessions` (يحتاج مفتاح
        API المحدود الصلاحيات إلى إذن كتابة للقرارات) وجلسة بحالة `Approved` أو
        `Declined` أو `In Review` أو `Kyc Expired` أو `Abandoned`. يتحقق الخادم
        من خطوات سير العمل المحددة ويقوم بتوليد قالبه المترجم الثابت مع المرسل
        الموثّق والعلامة التجارية للعلامة البيضاء المنطبقتين. لا يمكن للطلب
        تعيين موضوع، أو نص رسالة، أو رابط إجراء.


        الحقل `email_address` اختياري. في حال عدم تقديمه، يُرسل البريد
        الإلكتروني إلى العنوان الخاص بالشخص: العنوان الذي تم التحقق منه في خطوة
        التحقق من البريد الإلكتروني ضمن سير العمل، أو العنوان المقدم في
        `contact_details` عند إنشاء الجلسة. العنوان الذي تمرره تكون له الأولوية
        (`recipient_source: request`). عندما لا يكون هناك عنوان معروف ولا تقوم
        بتمرير أي عنوان، تكون قيمتا `recipient` و `preview_token` سلسلتين
        فارغتين ولا يمكن إرسال أي بريد إلكتروني.


        تتضمن الاستجابة المستلم ومصدره، والمرسل، والموضوع، وHTML، واللغة،
        والخطوات التي تم حلها، وما إذا كان التأكيد سيؤدي إلى إرسال البريد
        الإلكتروني (`will_be_sent`، و `not_sent_reason`)، و `preview_token`
        موقّعاً. تكون قيمة `requires_user_action` هي `false` عندما تعمل كل خطوة
        محددة دون تدخل الشخص: حيث تنتهي إعادة التقديم حينها تلقائياً ولا يتم
        إرسال أي بريد إلكتروني (`not_sent_reason: no_user_action`).


        لا تحجز هذه المعاينة حالة الجلسة ولا تأذن بالتسليم. بعد مراجعتها، قم
        باستدعاء [Update Session Status](/ar/sessions-api/update-status) مع
        تعيين `new_status: Resubmitted`، والقيم نفسها لكل من `nodes_to_resubmit`
        و `email_language` التي تمت معاينتها، و `send_email: true`، وتعيين
        `email_address` إلى قيمة `recipient`، و `email_preview_token` إلى قيمة
        `preview_token`. تنتهي صلاحية الإيصال بعد 15 دقيقة. عند تقديم إيصال،
        تُرجع المدخلات المتغيرة أو محتوى الرسالة أو المرسل أو حالة الجلسة الرمز
        `409` قبل أي تعديل أو إرسال. يجوز للتكاملات الحالية حذف الإيصال. أعد
        توليد المعاينة بعد حدوث أي تعارض. تعامل مع الاستجابة على أنها محتوى تحقق
        حساس؛ تستخدم الاستجابات رأس `Cache-Control: no-store`. قم بعرض HTML في
        إطار معزول، ولا تعرضه مطلقاً مباشرةً في DOM الخاص بتطبيقك.
      operationId: post_v3_session_resubmission_preview
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            معرّف UUID لجلسة التحقق المطلوب تحديثها. يقبل معرّفات جلسات
            المستخدمين (KYC) والشركات (KYB) — يطابق الخادم المعرّف عبر كلا نوعي
            الجلسات.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                nodes_to_resubmit:
                  type: array
                  description: >-
                    خطوات للمعاينة، باستخدام نفس التحقق والاختيار وترتيب سير
                    العمل مثل إعادة الإرسال. يمكن تخطيها للتحديد التلقائي
                    للمحاولات المسجلة التي تحتاج إلى إعادة إرسال.
                  items:
                    type: object
                    required:
                      - node_id
                      - feature
                    properties:
                      node_id:
                        type: string
                        description: >-
                          معرّف العقدة كما يظهر في تعريف سير عمل الجلسة (على
                          سبيل المثال `feature_ocr`، `feature_liveness`).
                        example: feature_ocr
                      feature:
                        type: string
                        description: >-
                          نوع الميزة للعقدة. يتم توحيد الأسماء المستعارة
                          `ID_VERIFICATION` و`POA` و`PHONE` و`EMAIL` من جانب
                          الخادم إلى `OCR` و`PROOF_OF_ADDRESS`
                          و`PHONE_VERIFICATION` و`EMAIL_VERIFICATION`. تجتاز
                          `KYB_REGISTRY` و`KYB_KEY_PEOPLE` و`KYB` التحقق من صحة
                          المخطط ولكن يتم رفضها دائمًا مع قاعدة العمل `400`
                          الموضحة في الأمثلة.
                        enum:
                          - OCR
                          - OCR_BACK
                          - NFC
                          - AML
                          - FACE
                          - LIVENESS
                          - FACE_MATCH
                          - IP_ANALYSIS
                          - AGE_ESTIMATION
                          - PROOF_OF_ADDRESS
                          - PHONE_VERIFICATION
                          - EMAIL_VERIFICATION
                          - FACE_SEARCH
                          - DATABASE_VALIDATION
                          - QUESTIONNAIRE
                          - DOCUMENT_AI
                          - KYB_DOCUMENTS
                          - ID_VERIFICATION
                          - POA
                          - PHONE
                          - EMAIL
                          - KYB_REGISTRY
                          - KYB_KEY_PEOPLE
                          - KYB
                          - GEOLOCATION
                        example: OCR
                email_address:
                  type: string
                  format: email
                  description: >-
                    اختياري. إرسال البريد الإلكتروني إلى هذا العنوان بدلاً من
                    العنوان الخاص بالشخص. بدونه، يكون المستلم هو العنوان الذي
                    تحقق منه الشخص في سير العمل، وإلا فالعنوان المقدم في
                    `contact_details`. لا يتم إرسال أي بريد إلكتروني بواسطة هذا
                    الاستدعاء.
                  example: user@example.com
                email_language:
                  type: string
                  description: >-
                    لغة البريد الإلكتروني للإشعار. يقبل أي سلسلة نصية على مستوى
                    المخطط؛ تعود الرموز غير المدعومة تلقائياً وبصمت إلى اللغة
                    الإنجليزية (`en`).
                  default: en
                  example: en
            examples:
              Person's Own Address:
                summary: معاينة إعادة إرسال إثبات العنوان لعنوان الشخص نفسه
                value:
                  nodes_to_resubmit:
                    - node_id: feature_poa_1
                      feature: POA
                  email_language: en
              Named Recipient:
                summary: معاينة البريد الإلكتروني لعنوان تحدده
                value:
                  nodes_to_resubmit:
                    - node_id: feature_ocr
                      feature: OCR
                  email_address: person@example.com
                  email_language: en
      responses:
        '200':
          description: معاينة فقط. تظل الجلسة دون تغيير ولا يتم إرسال أي بريد إلكتروني.
          content:
            application/json:
              schema:
                type: object
                required:
                  - recipient
                  - recipient_source
                  - sender
                  - sender_name
                  - sender_email
                  - sender_kind
                  - subject
                  - html
                  - text
                  - language
                  - will_be_sent
                  - not_sent_reason
                  - preview_token
                  - nodes_to_resubmit
                  - requires_user_action
                properties:
                  recipient:
                    type: string
                    description: >-
                      العنوان الذي يُرسل إليه البريد الإلكتروني. سلسلة فارغة عند
                      عدم معرفة أي عنوان للشخص: وعندئذٍ لا يمكن إرسال بريد
                      إلكتروني ويكون `preview_token` فارغاً أيضاً. مرّره كـ
                      `email_address` عند التأكيد.
                    example: person@example.com
                  recipient_source:
                    type: string
                    enum:
                      - email_verification
                      - contact_details
                      - request
                      - ''
                    description: >-
                      مصدر `recipient`. القيمة `request`: هو `email_address`
                      الذي مرّرته. القيمة `email_verification`: العنوان الذي
                      تحقق منه الشخص في خطوة التحقق من البريد الإلكتروني في سير
                      العمل. القيمة `contact_details`: العنوان المقدَّم في
                      `contact_details` عند إنشاء الجلسة. سلسلة نصية فارغة في
                      حال عدم وجود عنوان.
                    example: email_verification
                  sender:
                    type: string
                    description: رأس `From` الذي يرسل به البريد الإلكتروني.
                    example: Example App <no-reply@mail.example.com>
                  sender_name:
                    type: string
                    description: جزء الاسم المعروض من `sender`.
                    example: Example App
                  sender_email:
                    type: string
                    format: email
                    description: جزء العنوان من `sender`.
                    example: no-reply@mail.example.com
                  sender_kind:
                    type: string
                    enum:
                      - customer
                      - didit
                    description: >-
                      `customer`: يخرج البريد الإلكتروني من نطاق الإرسال المعتمد
                      لتطبيقك (العلامة البيضاء). `didit`: يخرج من مُرسِل Didit
                      نفسه.
                    example: customer
                  subject:
                    type: string
                    description: سطر الموضوع تماماً كما تم إرساله.
                    example: 'Action Required: Complete your verification in Example App'
                  html:
                    type: string
                    description: >-
                      كود HTML الخاص بالبريد الإلكتروني تماماً كما يُرسل، مع
                      تضمين شعاره كـ data URL. اعرضه داخل إطار معزول، وتجنب
                      تماماً عرضه مباشرة في DOM الخاص بتطبيقك.
                    example: <!DOCTYPE html><html><body>...</body></html>
                  text:
                    type: string
                    description: >-
                      كلمات البريد الإلكتروني كنص عادي، كما يحتفظ بها تسلسل
                      رسائل الشخص، للحصول على معاينة موجزة (يظل كود HTML هو
                      البريد الإلكتروني الفعلي الذي يستلمه الشخص).
                    example: |-
                      Almost there

                      Some steps need to be completed again.
                      Here’s what to fix:

                      https://verify.didit.me/session/abc123
                  language:
                    type: string
                    description: >-
                      اللغة المكتوب بها البريد الإلكتروني. تكون الإنجليزية
                      (`en`) عندما لا تتوفر `email_language` التي طلبتها.
                    example: en
                  will_be_sent:
                    type: boolean
                    description: >-
                      ما إذا كان تأكيد التغيير باستخدام `send_email: true` يرسل
                      هذا البريد الإلكتروني. `false` عندما يكون
                      `not_sent_reason` معيناً.
                    example: true
                  not_sent_reason:
                    type: string
                    nullable: true
                    enum:
                      - no_user_action
                      - no_recipient
                      - sandbox
                      - null
                    description: >-
                      سبب عدم إرسال أي بريد إلكتروني عند التأكيد، أو `null` عند
                      إرساله. `no_user_action`: يتم تنفيذ كل خطوة محددة دون
                      الحاجة إلى تدخل الشخص، لذا تكتمل إعادة التقديم تلقائياً
                      ولا يتم إرسال أي بريد إلكتروني. `no_recipient`: لا يوجد
                      عنوان معروف للشخص ولم تقم بتمرير أي عنوان. `sandbox`: جلسة
                      بيئة تجريبية لم يشترك مستلمها في تسليم رسائل البريد
                      الإلكتروني للبيئة التجريبية، لذا فإن الإرسال يتم بشكل
                      محاكاة فقط.
                    example: null
                  nodes_to_resubmit:
                    type: array
                    items:
                      type: object
                      required:
                        - node_id
                        - feature
                      properties:
                        node_id:
                          type: string
                          description: >-
                            معرّف العقدة كما يظهر في تعريف سير عمل الجلسة (على
                            سبيل المثال `feature_ocr`، `feature_liveness`).
                          example: feature_ocr
                        feature:
                          type: string
                          description: >-
                            نوع الميزة للعقدة. يتم توحيد الأسماء المستعارة
                            `ID_VERIFICATION` و`POA` و`PHONE` و`EMAIL` من جانب
                            الخادم إلى `OCR` و`PROOF_OF_ADDRESS`
                            و`PHONE_VERIFICATION` و`EMAIL_VERIFICATION`. تجتاز
                            `KYB_REGISTRY` و`KYB_KEY_PEOPLE` و`KYB` التحقق من
                            صحة المخطط ولكن يتم رفضها دائمًا مع قاعدة العمل
                            `400` الموضحة في الأمثلة.
                          enum:
                            - OCR
                            - OCR_BACK
                            - NFC
                            - AML
                            - FACE
                            - LIVENESS
                            - FACE_MATCH
                            - IP_ANALYSIS
                            - AGE_ESTIMATION
                            - PROOF_OF_ADDRESS
                            - PHONE_VERIFICATION
                            - EMAIL_VERIFICATION
                            - FACE_SEARCH
                            - DATABASE_VALIDATION
                            - QUESTIONNAIRE
                            - DOCUMENT_AI
                            - KYB_DOCUMENTS
                            - ID_VERIFICATION
                            - POA
                            - PHONE
                            - EMAIL
                            - KYB_REGISTRY
                            - KYB_KEY_PEOPLE
                            - KYB
                            - GEOLOCATION
                          example: OCR
                  requires_user_action:
                    type: boolean
                    description: >-
                      ما إذا كان فحص واحد محدد على الأقل يتطلب تفاعلاً من
                      المستخدم. هذا لا يتنبأ بالنتيجة النهائية لسير العمل.
                  preview_token:
                    type: string
                    description: >-
                      إيصال موقّع لرسالة البريد الإلكتروني هذه تحديداً، صالح
                      لمدة 15 دقيقة. مرّره كـ `email_preview_token` إلى [تحديث
                      حالة الجلسة](/ar/sessions-api/update-status). سلسلة فارغة
                      في حال عدم وجود مستلم.
                    example: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
              examples:
                Will Be Sent:
                  summary: 'المستلم الافتراضي: العنوان الذي تم التحقق منه في المسار'
                  value:
                    recipient: person@example.com
                    recipient_source: email_verification
                    sender: Example App <no-reply@mail.example.com>
                    sender_name: Example App
                    sender_email: no-reply@mail.example.com
                    sender_kind: customer
                    subject: 'Action Required: Complete your verification in Example App'
                    html: <!DOCTYPE html><html><body>...</body></html>
                    language: en
                    will_be_sent: true
                    not_sent_reason: null
                    nodes_to_resubmit:
                      - node_id: feature_poa_1
                        feature: PROOF_OF_ADDRESS
                    requires_user_action: true
                    preview_token: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
                No User Action:
                  summary: >-
                    تم تحديد خطوات الواجهة الخلفية فقط، لذا لن يتم إرسال أي بريد
                    إلكتروني
                  value:
                    recipient: person@example.com
                    recipient_source: contact_details
                    sender: Example App <no-reply@mail.example.com>
                    sender_name: Example App
                    sender_email: no-reply@mail.example.com
                    sender_kind: customer
                    subject: 'Action Required: Complete your verification in Example App'
                    html: <!DOCTYPE html><html><body>...</body></html>
                    language: en
                    will_be_sent: false
                    not_sent_reason: no_user_action
                    nodes_to_resubmit:
                      - node_id: feature_aml
                        feature: AML
                    requires_user_action: false
                    preview_token: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
          headers:
            Cache-Control:
              description: >-
                دائماً `no-store`: تحتوي المعاينة على محتوى تحقق ويجب عدم
                تخزينها مؤقتاً.
              schema:
                type: string
                example: no-store
        '400':
          description: >-
            الجلسة ليست في حالة يقبلها هذا الـ endpoint، أو هي في حالة
            `Resubmitted` بالفعل، أو لا يمكن إعادة إرسال الخطوات المحددة، أو أن
            أحد الحقول غير صالح.
          content:
            application/json:
              examples:
                Wrong Current Status:
                  summary: الجلسة ليست في حالة يقبلها هذا الـ endpoint
                  value:
                    detail: >-
                      Only sessions with status Approved, Declined, In Review,
                      Kyc Expired, Abandoned, Resubmitted can be updated.
                      Current status: In Progress
                Already Resubmitted:
                  summary: الجلسة في حالة Resubmitted بالفعل
                  value:
                    - The new status is the same as the current status.
                Nothing To Resubmit:
                  summary: لم يعثر الاختيار التلقائي على أي خطوة تتطلب إعادة التقديم
                  value:
                    nodes_to_resubmit: >-
                      No features found that need resubmission. All features are
                      already approved.
                Invalid Email:
                  summary: email_address ليس عنوان بريد إلكتروني
                  value:
                    email_address:
                      - Enter a valid email address.
        '401':
          description: انتهت صلاحية مفتاح API محدد النطاق.
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: مفتاح API محدد النطاق تجاوز تاريخ انتهاء صلاحيته
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            بيانات اعتماد مفقودة، أو جهة مستدعية تفتقر إلى امتياز
            `write:sessions`، أو مفتاح API ذو نطاق محدد لا يمتلك الوصول الذي
            يتطلبه هذا الـ endpoint، أو `session_id` ينتمي إلى تطبيق آخر.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: x-api-key مفقود أو غير صالح
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: المستدعي يفتقر إلى write:sessions
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: مفتاح API محدد النطاق دون صلاحية الوصول هذه
                  value:
                    detail: This API key has no write access to decisions.
        '404':
          description: لا توجد جلسة KYC أو KYB بمعرّف `session_id` هذا.
          content:
            application/json:
              examples:
                Not Found:
                  summary: session_id غير معروف
                  value:
                    detail: Not found.
        '429':
          description: >-
            الخطوات المطلوب إعادة إرسالها كلها خاصة بالخلفية البرمجية فقط (AML،
            وDATABASE_VALIDATION، وIP_ANALYSIS)، وقد أُعيد إرسال الجلسة بالفعل
            لخطوات الخلفية البرمجية فقط خلال آخر 30 ثانية، لذا سترفض عملية تحديث
            حالة الجلسة إعادة الإرسال هذه. أعد المحاولة بعد انقضاء الفترة
            المحددة في `Retry-After`.
          content:
            application/json:
              examples:
                Backend-only resubmit throttled:
                  value:
                    detail: >-
                      This session was already resubmitted for backend-only
                      features within the last 30 seconds; repeating it cannot
                      change the outcome. Wait before resubmitting again.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.preview_resubmission(
                "11111111-2222-3333-4444-555555555555",
                nodes_to_resubmit=[{
                    "node_id": "feature_poa_1",
                    "feature": "POA",
                }],
                email_language="en",
            )
            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.sessions.previewResubmission("11111111-2222-3333-4444-555555555555",
            {
              nodes_to_resubmit: [{
                node_id: "feature_poa_1",
                feature: "POA",
              }],
              email_language: "en",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.PreviewResubmission(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsPreviewResubmissionParams{\n\tNodesToResubmit: didit.Some([]didit.SessionsPreviewResubmissionParamsNodesToResubmit{{\n\t\tNodeID:  \"feature_poa_1\",\n\t\tFeature: \"POA\",\n\t}}),\n\tEmailLanguage: didit.String(\"en\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.SessionsPreviewResubmissionParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().previewResubmission("11111111-2222-3333-4444-555555555555",
            SessionsPreviewResubmissionParams.builder()
                    .nodesToResubmit(List.of(SessionsPreviewResubmissionParams.NodesToResubmit.builder()
                            .nodeId("feature_poa_1")
                            .feature(SessionsPreviewResubmissionParams.NodesToResubmit.Feature.of("POA"))
                            .build()))
                    .emailLanguage("en")
                    .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->sessions->previewResubmission('11111111-2222-3333-4444-555555555555',
            [
                'nodes_to_resubmit' => [[
                    'node_id' => 'feature_poa_1',
                    'feature' => 'POA',
                ]],
                'email_language' => 'en',
            ]);

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

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

            result = didit.sessions.preview_resubmission(
              "11111111-2222-3333-4444-555555555555",
              nodes_to_resubmit: [{
                node_id: "feature_poa_1",
                feature: "POA",
              }],
              email_language: "en"
            )
            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.Sessions.PreviewResubmissionAsync("11111111-2222-3333-4444-555555555555",
            new SessionsPreviewResubmissionParams

            {
                NodesToResubmit = new SessionsPreviewResubmissionParamsNodesToResubmit[]
                {
                    new()
                    {
                        NodeId = "feature_poa_1",
                        Feature = "POA",
                    },
                },
                EmailLanguage = "en",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  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.