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

# إرسال استجابة محفظة بيانات الاعتماد الرقمية

> أرسل استجابة بيانات الاعتماد التي أعادتها محفظة مثل Google Wallet عبر Digital Credentials API إلى صفحتك أو تطبيقك، وسيتولى Didit قرار التحقق.

استخدم هذه العملية مع محفظة تحتوي استجابة البدء الخاصة بها على `next_action.type = request_digital_credential`، مثل Google Wallet.
صادِق باستخدام مفتاح API الخاص بالتطبيق الذي بدأ عملية التحقق، من الخادم الخلفي لديك.

أرسل بالضبط ما أعادته المحفظة: `{protocol, data}` من `navigator.credentials.get` في المتصفح، أو `credentialJson` بعد تحليله من Android Credential Manager.
الرد مشفّر لصالح Didit، لذا لا تعدّله.
يتحقق Didit من توقيع الجهة المُصدِرة مقابل جذور الجهات المُصدِرة الموثوقة لديه، ومن كل قيمة مُعادة مقابل الملخص الموقّع لها، ومن توقيع الجهاز على `origin` لديك وعلى هذا الطلب، ثم يبتّ في عملية التحقق.

يمكن إرسال الرد مرة واحدة فقط.
يُعيد الإرسال الثاني عملية التحقق التي سبق البتّ فيها.
إذا كانت عملية التحقق لا تتطلب ردًّا من المحفظة، فإنها تُجيب بالرمز `409` مع `error: "not_a_digital_credentials_wallet"`.

راجع [واجهات برمجة تطبيقات محفظة الهوية الرقمية](https://docs.didit.me/ar/standalone-apis/digital-id-wallets.md#محافظ-بيانات-الاعتماد-الرقمية-google-wallet) للاطلاع على التسلسل الكامل، بما في ذلك مقتطفات المتصفح وAndroid.


## OpenAPI

````yaml ar/openapi-25.json POST /v3/id-verification/wallets/verifications/{request_id}/response/
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/id-verification/wallets/verifications/{request_id}/response/:
    post:
      tags:
        - Digital ID wallets
      summary: إرسال استجابة المحفظة
      description: >-
        محافظ Digital Credentials API (مثل Google Wallet): أرسل ما أرجعته
        المحفظة إلى صفحتك أو تطبيقك لعملية تحقق يكون next_action الخاص بها هو
        request_digital_credential. تفك Didit تشفيره، وتتحقق من توقيع الجهة
        المُصدِرة مقارنةً بجذور الجهات المُصدِرة الموثوقة، ومن كل قيمة مُعادة
        مقارنةً بملخصها الموقّع، وتوقيع الجهاز عبر نطاقك الأصلي وهذا الطلب، ثم
        تتخذ القرار بشأن التحقق: تم التحقق (تتم الفوترة مرة واحدة) أو تم الرفض
        مع رمز الخطأ. استخدام لمرة واحدة: عملية إرسال ثانية تُرجع التحقق المحسوم
        قراره.
      operationId: submit_wallet_verification_response
      parameters:
        - in: path
          name: request_id
          schema:
            type: string
            format: uuid
          description: قيمة request_id التي أرجعها الـ endpoint للبدء.
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest
            example:
              response:
                protocol: openid4vp-v1-signed
                data:
                  response: <compact JWE returned by the wallet>
          application/x-www-form-urlencoded:
            schema:
              $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest
            example:
              response:
                protocol: openid4vp-v1-signed
                data:
                  response: <compact JWE returned by the wallet>
          multipart/form-data:
            schema:
              $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialResponseRequest
            example:
              response:
                protocol: openid4vp-v1-signed
                data:
                  response: <compact JWE returned by the wallet>
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiWalletVerificationResponse
              example:
                request_id: 00000000-0000-4000-8000-000000000001
                wallet_verification:
                  wallet:
                    id: google_wallet
                    name: Google Wallet
                    issuing_authority: >-
                      Google Wallet (ID pass) and US state issuers (mobile
                      driving licence)
                  country: USA
                  status: Approved
                  outcome: verified
                  error: null
                  interaction: digital_credentials
                  simulated: false
                  expires_at: '2026-01-01T10:10:00Z'
                  next_action: null
                  identity:
                    full_name: Alex Example
                    first_name: Alex
                    last_name: Example
                    date_of_birth: '1990-01-31'
                    nationality: USA
                    issuing_state: USA
                  attributes:
                    document_number: X0000000
                    document_expiry_date: '2030-01-31'
                  level_of_assurance: substantial
                  verified_at: '2026-01-01T10:01:00Z'
                  signature_valid: true
                  credential_type: person_identification
                vendor_data: your-customer-reference
                metadata:
                  reference: example
                created_at: '2026-01-01T10:00:00Z'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiWalletVerificationStartBadRequest
          description: 'أخطاء التحقق من صحة الحقول ({field: [messages]}).'
        '403':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/DigitalIdWalletApiClientCredentialsForbiddenErrorMessage
          description: 'بيانات اعتماد مفقودة (x-api-key أو Authorization: Bearer).'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            الخطأ not_found: لا توجد عملية تحقق من المحفظة لهذا التطبيق تتضمن
            request_id هذا.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: >-
            الخطأ not_a_digital_credentials_wallet: لا تقبل عملية التحقق هذه
            استجابة من المحفظة.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
          description: 'الخطأ wallet_not_configured: لا يمكن لهذه البيئة التحقق من المحفظة.'
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request POST \
              --url https://verification.didit.me/v3/id-verification/wallets/verifications/REQUEST_ID/response/ \
              --header 'x-api-key: YOUR_API_KEY' \
              --header 'Content-Type: application/json' \
              --data '{
              "response": {
                "protocol": "openid4vp-v1-signed",
                "data": {
                  "response": "<compact JWE returned by the wallet>"
                }
              }
            }'
components:
  schemas:
    DigitalIdWalletApiWalletDigitalCredentialResponseRequest:
      type: object
      description: >-
        ما أجابت به المحفظة صفحتك أو تطبيقك، بالنسبة لعملية تحقق من نوع
        ``request_digital_credential``.
      properties:
        response:
          type: object
          additionalProperties: {}
          description: >-
            ما أرجعته المحفظة تماماً: {protocol, data} لـ DigitalCredential من
            navigator.credentials.get، أو credentialJson المحلل لـ
            DigitalCredential الخاص بنظام Android. مشفر لـ Didit؛ لا تقم
            بتعديله.
      required:
        - response
    DigitalIdWalletApiWalletVerificationResponse:
      type: object
      description: عملية تحقق مستقلة واحدة من المحفظة، كما تُجيب عنها كل endpoint للمحفظة.
      properties:
        request_id:
          type: string
          format: uuid
        wallet_verification:
          $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationResult'
        vendor_data:
          type: string
          nullable: true
        metadata:
          type: object
          additionalProperties: {}
          nullable: true
          description: كائن البيانات الوصفية المرسل في البداية، أو null.
        created_at:
          type: string
          format: date-time
      required:
        - created_at
        - metadata
        - request_id
        - vendor_data
        - wallet_verification
    DigitalIdWalletApiWalletVerificationStartBadRequest:
      oneOf:
        - $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationError'
        - $ref: '#/components/schemas/DigitalIdWalletApiWalletVerificationFieldErrors'
    DigitalIdWalletApiClientCredentialsForbiddenErrorMessage:
      type: object
      properties:
        detail:
          type: string
          default: Forbidden - User doesn't have permission
    DigitalIdWalletApiWalletVerificationError:
      type: object
      properties:
        error:
          type: string
          description: رمز ثابت قابل للقراءة آلياً، مثل wallet_unavailable.
        detail:
          type: string
      required:
        - detail
        - error
    DigitalIdWalletApiWalletVerificationResult:
      type: object
      properties:
        wallet:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWallet'
          readOnly: true
        country:
          type: string
        status:
          type: string
          description: >-
            غير منتهية أثناء الانتظار، ثم تصبح مقبولة (تم التحقق منها) أو
            مرفوضة.
        outcome:
          $ref: >-
            #/components/schemas/DigitalIdWalletApiWalletVerificationResultOutcomeEnum
        error:
          type: string
          nullable: true
          readOnly: true
        interaction:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiInteractionEnum'
          readOnly: true
        simulated:
          type: boolean
          readOnly: true
        expires_at:
          type: string
          format: date-time
        next_action:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletNextAction'
          nullable: true
          readOnly: true
        identity:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletIdentity'
          nullable: true
          readOnly: true
        attributes:
          type: object
          additionalProperties: {}
          nullable: true
          readOnly: true
        level_of_assurance:
          type: string
          nullable: true
        verified_at:
          type: string
          format: date-time
          nullable: true
        signature_valid:
          type: boolean
          nullable: true
          description: >-
            تكون القيمة True بمجرد التحقق من توقيع بيانات الاعتماد؛ وتكون null
            لبيانات الاعتماد المحاكاة.
        credential_type:
          type: string
          nullable: true
      required:
        - attributes
        - country
        - credential_type
        - error
        - expires_at
        - identity
        - interaction
        - level_of_assurance
        - next_action
        - outcome
        - signature_valid
        - simulated
        - status
        - verified_at
        - wallet
    DigitalIdWalletApiWalletVerificationFieldErrors:
      type: object
      description: 'أخطاء التحقق من صحة الطلب: كل حقل مرفوض مع رسائله.'
      additionalProperties:
        type: array
        items:
          type: string
    DigitalIdWalletApiWallet:
      type: object
      properties:
        id:
          type: string
          description: معرّف الدليل للمحفظة، مثل bankid_se.
        name:
          type: string
        issuing_authority:
          type: string
          nullable: true
      required:
        - id
        - issuing_authority
        - name
    DigitalIdWalletApiWalletVerificationResultOutcomeEnum:
      enum:
        - pending
        - verified
        - cancelled
        - timeout
        - failed
      type: string
      description: |-
        * `pending` - قيد الانتظار
        * `verified` - تم التحقق
        * `cancelled` - ألغاها المستخدم
        * `timeout` - انتهت المهلة
        * `failed` - فشلت
    DigitalIdWalletApiInteractionEnum:
      enum:
        - redirect
        - in_app
        - digital_credentials
      type: string
      description: |-
        * `redirect` - redirect
        * `in_app` - in_app
        * `digital_credentials` - digital_credentials
    DigitalIdWalletApiWalletNextAction:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/DigitalIdWalletApiWalletNextActionTypeEnum'
          description: >-
            redirect: إرسال متصفح المستخدم إلى url. confirm_in_app: إظهار
            verification_code للمستخدم، ليتحقق من مطابقته للرمز في تطبيق محفظته
            ويؤكد من هناك؛ ثم إجراء استقصاء دوري. request_digital_credential:
            عبر إجراء من المستخدم على المصدر (origin) الذي بدأت منه، اطلب من
            المحفظة باستخدام digital_credentials.request، ثم أرسل النتيجة
            المستلمة إلى POST .../verifications/{request_id}/response/.


            * `redirect` - redirect

            * `confirm_in_app` - confirm_in_app

            * `request_digital_credential` - request_digital_credential
        url:
          type: string
          format: uri
          description: 'لحالة redirect فقط: حيث يسجل المستخدم الدخول باستخدام المحفظة.'
        digital_credentials:
          allOf:
            - $ref: >-
                #/components/schemas/DigitalIdWalletApiWalletDigitalCredentialsRequest
          description: >-
            لحالة request_digital_credential فقط: الطلب الذي يتم تسليمه إلى
            المحفظة.
        verification_code:
          type: string
          description: >-
            لـ confirm_in_app فقط: رمز المقارنة المكون من 4 أرقام والذي يعرضه
            تطبيق المحفظة أيضاً.
        poll_interval_seconds:
          type: integer
          description: >-
            لـ confirm_in_app فقط: معدل استدعاء POST
            .../verifications/{request_id}/poll/ للحصول على استجابة فورية. تُجري
            Didit أيضاً استطلاعاً لعمليات تسجيل الدخول المعلقة في الخلفية، لذلك
            يبلّغ الـ webhook عن النتيجة حتى لو لم تقم بالاستطلاع.
      required:
        - type
    DigitalIdWalletApiWalletIdentity:
      type: object
      properties:
        full_name:
          type: string
          nullable: true
        first_name:
          type: string
          nullable: true
        last_name:
          type: string
          nullable: true
        date_of_birth:
          type: string
          format: date
          nullable: true
        nationality:
          type: string
          nullable: true
          description: >-
            الجنسية بتنسيق ISO3، فقط عندما تؤكدها المحفظة (لا يتم استنتاجها
            أبداً).
        issuing_state:
          type: string
          description: الدولة بتنسيق ISO3 التي أصدر مخططها الهوية.
      required:
        - date_of_birth
        - first_name
        - full_name
        - issuing_state
        - last_name
        - nationality
    DigitalIdWalletApiWalletNextActionTypeEnum:
      enum:
        - redirect
        - confirm_in_app
        - request_digital_credential
      type: string
      description: |-
        * `redirect` - redirect
        * `confirm_in_app` - confirm_in_app
        * `request_digital_credential` - request_digital_credential
    DigitalIdWalletApiWalletDigitalCredentialsRequest:
      type: object
      properties:
        protocol:
          type: string
          description: openid4vp-v1-signed.
        request:
          type: object
          additionalProperties: {}
          description: >-
            مرّره كما هو: navigator.credentials.get({digital: request}) في
            المتصفح، أو JSON.stringify(request) كـ requestJson لـ
            GetDigitalCredentialOption على Android. موقّع بواسطة Didit لتطبيقك.
      required:
        - protocol
        - request
  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.
    BearerAuth:
      type: http
      scheme: bearer
      description: token الوصول الخاص باعتماد العميل للتطبيق.

````

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