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

# واجهة Passive Liveness API: كشف التزييف العميق

> كشف الأقنعة والصور المطبوعة وإعادة التشغيل والتزييف العميق من صورة واحدة. بدون تفاعل، زمن استدلال أقل من 2s، دفع حسب الاستخدام مع Didit.



## OpenAPI

````yaml ar/openapi-25.json POST /v3/passive-liveness/
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/passive-liveness/:
    post:
      tags:
        - Standalone APIs
      summary: كشف الحيوية السلبي
      description: >-
        اكتشف هجمات العرض — الصور المطبوعة، وإعادة تشغيل الشاشة، والأقنعة،
        والتزييف العميق — من صورة وجه واحدة. لا يلزم وجود فيديو، أو حركة، أو
        تفاعل من المستخدم.


        **كيف يعمل.** يتم تحليل الصورة بواسطة نموذج بيومتري؛ ويتم تقييم أكبر وجه
        تم اكتشافه واحتساب `score` الحيوية (0–100). تصبح `status` هي `Declined`
        عند إطلاق أي تحذير بدرجة خطورة `error`:

        - `NO_FACE_DETECTED` — لم يعثر نموذج الحيوية على أي وجه،

        - `LOW_LIVENESS_SCORE` — الدرجة تساوي أو تقل عن
        `face_liveness_score_decline_threshold` (القيمة الافتراضية `30`)،

        - `LIVENESS_FACE_ATTACK` — اكتشف النموذج هجوم العرض،

        - `FACE_IN_BLOCKLIST` / `POSSIBLE_FACE_IN_BLOCKLIST` — يطابق الوجه
        مدخلاً في قائمة الحظر الخاصة بالوجوه لديك.


        تُعد `MULTIPLE_FACES_DETECTED` إشارة بدرجة خطورة `warning` (لا تؤدي إلى
        الرفض)، وتُعد `DUPLICATED_FACE` / `POSSIBLE_DUPLICATED_FACE` إشارات
        بدرجة خطورة `information` تفيد بأن الوجه نفسه قد ظهر بالفعل في جلسة أخرى
        مقبولة (لا تؤدي إلى الرفض أبداً). تصف `face_quality` و`face_luminance`
        (0–100، قد تكون فارغة) جودة الالتقاط.


        **فحص قائمة الحظر والتكرار.** يتم تشغيله مع **كل** استدعاء — سواء مع
        `save_api_request` أو بدونها — عن طريق مطابقة الوجه المكتشف مع فهرس
        البحث بالوجه الخاص بتطبيقك. يتم استبعاد الوجوه السابقة التي تحمل نفس
        `vendor_data` من البحث في كامل الفهرس — وبذلك فإن إعادة تشغيل كشف
        الحيوية لنفس المستخدم لا تؤدي إلى إطلاق `DUPLICATED_FACE`، كما أن الوجه
        المدرج في قائمة الحظر والناتج عن جلسة تحمل نفس `vendor_data` الخاصة
        بالمتصل لا يتم تمييزه أيضاً (يتم تجاوز فحص `FACE_IN_BLOCKLIST` للوجوه
        التي تحمل نفس `vendor_data`).


        **الفوترة.** يستهلك كل رد `200` رصيداً واحداً من Passive Liveness API
        (يُدفع من رصيد خطتك أو رصيد شحن الحساب). يؤدي عدم كفاية الرصيد إلى إرجاع
        `403` قبل إجراء أي معالجة للصور.


        **الاحتفاظ بالجلسة وتسجيل الوجه (`save_api_request`، القيمة الافتراضية
        `true`).** عندما تكون القيمة `true`، يتم حفظ الاستدعاء كجلسة من نوع API
        (في Business Console، و`GET /v3/session/{sessionId}/decision/` عبر
        `request_id` المُرجع، وحدث webhook من نوع `status.updated`)، ويتم تخزين
        الصورة المرجعية واقتصاص الوجه، ويتم **تسجيل الوجه المكتشف في فهرس البحث
        بالوجه لديك** حتى تتمكن استدعاءات البحث بالوجه اللاحقة وعمليات التحقق من
        التكرار من مطابقته. عندما تكون القيمة `false`، يكون الاستدعاء لمرة
        واحدة: لا يتم تخزين أي شيء ولا يتم تسجيل الوجه (مع استمرار تشغيل فحص
        قائمة الحظر/التكرار).


        **البيئة التجريبية.** تتخطى مفاتيح API الخاصة بالبيئة التجريبية جميع
        عمليات المعالجة والفوترة: فبعد التحقق من صحة الطلب (المدخلات غير الصحيحة
        لا تزال تُرجع `400`)، يُرجع endpoint payload تجريبي ثابت بحالة
        `Approved`، ولا يتم الاحتفاظ بأي جلسة، ولا يُستهلك أي رصيد.


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


        **حد المعدل.** ميزانية كتابة مشتركة تبلغ 300 طلب/دقيقة لكل مفتاح API عبر
        جميع endpoints الخاصة بـ POST/PATCH/DELETE؛ يؤدي تجاوزها إلى إرجاع
        `429`.
      operationId: post_v3passive-liveness
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - user_image
              properties:
                user_image:
                  type: string
                  format: binary
                  description: >-
                    صورة وجه أمامية (مثل صورة سيلفي). الامتدادات المسموح بها:
                    `tiff`، `jpg`، `jpeg`، `png`، `webp`. الحد الأقصى لحجم
                    الرفع: **5 MB** (يتم رفض الملفات الأكبر حجماً بالرمز `400`).
                    يتم ضغط الصور تلقائياً إلى ~0.5 MB قبل المعالجة، لذا فإن دقة
                    الصورة العالية جداً لا تحسّن دقة النتائج. يجب أن تحتوي
                    الصورة على شخص واحد — عند وجود عدة وجوه، يتم تقييم الوجه
                    الأكبر ويُضاف تحذير `MULTIPLE_FACES_DETECTED`.
                face_liveness_score_decline_threshold:
                  type: number
                  format: float
                  default: 30
                  minimum: 0
                  maximum: 100
                  description: >-
                    حد درجة كشف الحيوية (0–100). تُصدر الدرجة المحسوبة التي تكون
                    **عند أو أقل من** هذه القيمة تحذير `LOW_LIVENESS_SCORE`
                    وتُعيّن `status` إلى `Declined`. القيمة الافتراضية `30`؛
                    ارفعها لاتباع نهج أكثر صرامة لمكافحة الانتحال. تُرجع القيم
                    خارج النطاق 0–100 الخطأ `400`.
                  example: 30
                rotate_image:
                  type: boolean
                  default: false
                  description: >-
                    عندما تكون `true`، تجرب الخدمة تدوير الإدخال بزيادات قدرها
                    90 درجة وتستخدم الاتجاه الذي يحقق أفضل كشف للوجه. مفيد عند
                    فقدان اتجاه EXIF. يضيف تأخيراً في الاستجابة.
                  example: false
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    عندما تكون `true` (الافتراضي)، يتم حفظ الاستدعاء كجلسة من
                    نوع API، وتخزين صور الوجه، وإرسال webhook من نوع
                    `status.updated`، وتسجيل الوجه المكتشف في فهرس البحث بالوجه
                    الخاص بك. عندما تكون `false`، يكون الاستدعاء لمرة واحدة فقط
                    — لا يتم تخزين أي شيء ولا يتم تسجيل الوجه. يعمل فحص قائمة
                    الحظر والتكرار في كلتا الحالتين.
                  example: true
                vendor_data:
                  type: string
                  description: >-
                    معرّف مبهم اختياري (معرّف المستخدم لديك، البريد الإلكتروني،
                    UUID...) يتم تخزينه في الجلسة المحفوظة وإعادته. يُستخدم
                    أيضاً لاستبعاد الجلسات السابقة التي تحتوي على نفس
                    `vendor_data` من فحص تكرار الوجه، بحيث لا تؤدي إعادة التحقق
                    من نفس المستخدم إلى ظهور `DUPLICATED_FACE`.
                  example: user-123
                metadata:
                  type: object
                  additionalProperties: true
                  description: >-
                    كائن JSON اختياري يُخزن مع الجلسة (عندما يكون
                    `save_api_request=true`) ويُعاد في الاستجابة. في طلبات
                    multipart، أرسله كحقل سلسلة نصية بترميز JSON — حيث يتم
                    تحليله إلى كائن.
                  example:
                    flow: withdrawal
            example:
              user_image: (binary JPEG/PNG selfie)
              face_liveness_score_decline_threshold: 30
              rotate_image: false
              save_api_request: true
              vendor_data: user-123
              metadata:
                flow: withdrawal
      responses:
        '200':
          description: >-
            اكتمل كشف الحيوية السلبي. يمثل `liveness.score` درجة ثقة النموذج من
            0 إلى 100 بأن الصورة تُظهر شخصاً حقيقياً؛ وتكون `status` هي
            `Approved` ما لم يُطلق تحذير بدرجة خطورة `error`. يُرجع الوجه
            المنتحل أو المدرج في قائمة الحظر الرمز `200` أيضاً — تحقق من
            `liveness.status` و`liveness.warnings`، وليس من رمز HTTP فقط. عندما
            تكون `save_api_request=true`، فإن `request_id` يمثل معرّف الجلسة
            المحفوظة.
          content:
            application/json:
              examples:
                Approved:
                  summary: وجه حي — لا توجد تحذيرات
                  value:
                    request_id: a1b2c3d4-e5f6-7890-1234-567890abcdef
                    liveness:
                      status: Approved
                      method: PASSIVE
                      score: 95
                      user_image:
                        entities:
                          - bbox:
                              - 661
                              - 728
                              - 1688
                              - 2188
                            confidence: 0.732973
                            age: 26.91
                            gender: male
                            race: null
                        best_angle: 0
                      warnings: []
                      face_quality: 84.21
                      face_luminance: 50.33
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                Declined - presentation attack:
                  summary: >-
                    وضع النموذج علامة تحذير لوجود انتحال (طباعة، إعادة تشغيل،
                    قناع…)
                  value:
                    request_id: f1c8c9b2-d3e4-4f5a-9b8c-7d6e5f4a3b2c
                    liveness:
                      status: Declined
                      method: PASSIVE
                      score: 12.5
                      user_image:
                        entities:
                          - bbox:
                              - 100
                              - 120
                              - 420
                              - 540
                            confidence: 0.81
                            age: 30.1
                            gender: female
                            race: null
                        best_angle: 0
                      warnings:
                        - risk: LOW_LIVENESS_SCORE
                          feature: LIVENESS
                          additional_data: null
                          log_type: error
                          short_description: Low liveness score
                          long_description: >-
                            The liveness check resulted in a low score,
                            indicating potential use of non-live facial
                            representations or poor-quality biometric data.
                        - risk: LIVENESS_FACE_ATTACK
                          feature: LIVENESS
                          additional_data: null
                          log_type: error
                          short_description: Liveness Face Attack
                          long_description: >-
                            The system detected a potential attempt to bypass
                            the liveness check.
                      face_quality: 72.4
                      face_luminance: 48.2
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                Declined - face on blocklist:
                  summary: وجه حي، ولكنه يطابق إدخالاً في قائمة الحظر
                  value:
                    request_id: 0b54a1de-22aa-4e0f-9c84-5a2b1f3c4d5e
                    liveness:
                      status: Declined
                      method: PASSIVE
                      score: 93.75
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 100
                              - 100
                            confidence: 0.722082
                            age: 27
                            gender: male
                            race: null
                        best_angle: 0
                      warnings:
                        - risk: FACE_IN_BLOCKLIST
                          feature: LIVENESS
                          additional_data:
                            blocklisted_session_id: 882c42d5-8a4d-4d20-8080-a22f57822c86
                            blocklisted_session_number: 3242
                            api_service: null
                          log_type: error
                          short_description: Face in blocklist
                          long_description: >-
                            The system identified a face in the blocklist, which
                            means the face is not allowed to be verified.
                      face_quality: null
                      face_luminance: null
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      معرّف الجلسة المحفوظة عندما تكون `save_api_request=true`
                      (يمكن استخدامه مع `GET
                      /v3/session/{sessionId}/decision/`)؛ وإلا فسيكون UUID
                      ارتباط مؤقت.
                  liveness:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                        description: >-
                          `Declined` عند إطلاق تحذير واحد على الأقل بمستوى خطورة
                          `error` (عدم وجود وجه، أو درجة منخفضة، أو هجوم العرض،
                          أو مطابقة في قائمة الحظر)؛ و`Approved` خلاف ذلك. لا
                          تتسبب مدخلات `warning`/`information` (وجوه متعددة،
                          تطابقات مكررة) في الرفض بمفردها أبداً.
                      method:
                        type: string
                        enum:
                          - PASSIVE
                        description: دائماً `PASSIVE` لهذا الـ endpoint.
                      score:
                        type: number
                        format: float
                        nullable: true
                        minimum: 0
                        maximum: 100
                        description: >-
                          درجة الثقة في كشف الحيوية (0–100، بمنزلتين عشريتين)
                          بأن الصورة تُظهر شخصًا حيًا وليس انتحالًا. تكون `null`
                          عندما لا يُرجع النموذج أي درجة ثقة.
                        example: 95
                      user_image:
                        type: object
                        description: نتائج كشف الوجه للصورة المُرسلة.
                        properties:
                          entities:
                            type: array
                            items:
                              type: object
                              properties:
                                bbox:
                                  type: array
                                  items:
                                    type: integer
                                  minItems: 4
                                  maxItems: 4
                                  description: >-
                                    المربع المحيط للوجه المكتشف كإحداثيات بكسل
                                    `[x_min, y_min, x_max, y_max]` في الصورة
                                    المُعالجة.
                                  example:
                                    - 661
                                    - 728
                                    - 1688
                                    - 2188
                                confidence:
                                  type: number
                                  format: float
                                  minimum: 0
                                  maximum: 1
                                  description: درجة الثقة في كشف الوجه (0–1).
                                  example: 0.732973
                                age:
                                  type: number
                                  format: float
                                  description: >-
                                    العمر المقدّر بالنموذج للوجه المكتشف،
                                    بالسنوات. لأغراض إعلامية فقط — لا يؤثر على
                                    قرار كشف الحيوية.
                                  example: 26.91
                                gender:
                                  type: string
                                  description: >-
                                    الجنس المتوقع بالنموذج للوجه المكتشف (`male`
                                    أو `female`). لأغراض إعلامية فقط.
                                  example: male
                                race:
                                  type: string
                                  nullable: true
                                  description: >-
                                    حقل محجوز — دائماً `null` في الاستجابات من
                                    هذا endpoint.
                                  example: null
                            description: إدخال واحد لكل وجه مكتشف. ويتم تقييم الوجه الأكبر.
                          best_angle:
                            type: integer
                            nullable: true
                            description: >-
                              زاوية التدوير (بالدرجات) التي حققت أفضل كشف للوجه؛
                              ولا تكون غير صفرية إلا عندما يصحح
                              `rotate_image=true` الاتجاه.
                            example: 0
                      warnings:
                        type: array
                        description: >-
                          إشارات المخاطر. الشدة `error` (تؤدي إلى الرفض):
                          `NO_FACE_DETECTED`، و`LOW_LIVENESS_SCORE` (الدرجة عند
                          الحد أو دونه)، و`LIVENESS_FACE_ATTACK`،
                          و`FACE_IN_BLOCKLIST`، و`POSSIBLE_FACE_IN_BLOCKLIST`.
                          الشدة `warning` (تتطلب مراجعة، دون رفض):
                          `MULTIPLE_FACES_DETECTED`. الشدة `information` (دون
                          رفض): `DUPLICATED_FACE`، و`POSSIBLE_DUPLICATED_FACE` —
                          حيث ظهر الوجه نفسه مسبقاً في جلسة مقبولة أخرى.
                        items:
                          type: object
                          properties:
                            risk:
                              type: string
                              enum:
                                - NO_FACE_DETECTED
                                - LOW_LIVENESS_SCORE
                                - LIVENESS_FACE_ATTACK
                                - MULTIPLE_FACES_DETECTED
                                - FACE_IN_BLOCKLIST
                                - POSSIBLE_FACE_IN_BLOCKLIST
                                - DUPLICATED_FACE
                                - POSSIBLE_DUPLICATED_FACE
                              description: رمز مخاطر مقروء آلياً.
                            feature:
                              type: string
                              enum:
                                - LIVENESS
                              description: >-
                                الميزة التي أصدرت التحذير. دائماً `LIVENESS` في
                                هذا الـ endpoint.
                            additional_data:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                `null` لمعظم التحذيرات. تحمل نتائج قائمة الحظر
                                `{blocklisted_session_id,
                                blocklisted_session_number, api_service}`؛ وتحمل
                                النتائج المكررة `{duplicated_session_id,
                                duplicated_session_number, api_service}` مشيرةً
                                إلى الجلسة المطابقة.
                            log_type:
                              type: string
                              enum:
                                - error
                                - warning
                                - information
                              description: >-
                                مستوى الخطورة. تحذيرات `error` تنقل `status` إلى
                                `Declined`؛ وإدخالات `warning` و`information`
                                استشارية ولا تؤدي إلى الرفض بمفردها أبداً.
                            short_description:
                              type: string
                              description: ملخص للمخاطر في سطر واحد مقروء للبشر.
                            long_description:
                              type: string
                              description: تفسير سهل القراءة للمخاطر.
                      face_quality:
                        type: number
                        format: float
                        nullable: true
                        minimum: 0
                        maximum: 100
                        description: >-
                          درجة جودة التقاط الوجه المكتشف، موحدة القياس بين 0
                          و100. تكون `null` إذا لم يتمكن النموذج من تقديم قيمة
                          موثوقة.
                        example: 84.21
                      face_luminance:
                        type: number
                        format: float
                        nullable: true
                        minimum: 0
                        maximum: 100
                        description: >-
                          سطوع الوجه المكتشف، مُطبَّع إلى 0–100. القيمة `null`
                          عندما يكون غير متاح.
                        example: 50.33
                  vendor_data:
                    type: string
                    nullable: true
                    description: نسخة مطابقة من `vendor_data` التي أرسلتها، أو `null`.
                  metadata:
                    type: object
                    nullable: true
                    additionalProperties: true
                    description: نسخة مطابقة من كائن `metadata` الذي أرسلته، أو `null`.
                  created_at:
                    type: string
                    format: date-time
                    description: >-
                      طابع زمني بتنسيق ISO 8601 (بالتوقيت العالمي المنسق UTC)
                      لوقت إنشاء الاستجابة، مثل
                      `2026-06-12T01:04:42.763237+00:00`.
        '400':
          description: >-
            خطأ في التحقق. يتم إرجاعه عندما تكون `user_image` مفقودة، أو يتجاوز
            حجمها 5 MB، أو يكون امتدادها غير مدعوم، أو تفشل عملية فك ترميز
            الصورة من جانب الخادم، أو عندما يكون أحد الخيارات خارج النطاق.
            تستخدم أخطاء الحقول غلاف `{field: [messages]}` الخاص بـ DRF؛ بينما
            تستخدم حالات فشل فك ترميز الصورة `{"error": ...}`.
          content:
            application/json:
              examples:
                Missing image:
                  summary: لم يتم تضمين `user_image` في بيانات النموذج
                  value:
                    user_image:
                      - No file was submitted.
                Invalid image format:
                  summary: امتداد مسموح به ولكن محتوى الصورة غير قابل لفك الترميز
                  value:
                    error: Invalid user image format.
                    code: invalid_image
                Unsupported file extension:
                  summary: امتداد الملف خارج tiff/jpg/jpeg/png/webp
                  value:
                    user_image:
                      - >-
                        File extension “txt” is not allowed. Allowed extensions
                        are: tiff, jpg, jpeg, png, webp.
                File too large:
                  summary: يتجاوز الملف المرفوع حد 5 ميجابايت
                  value:
                    user_image:
                      - File size should not exceed 5 MB
        '403':
          description: >-
            تم رفض الإذن. يُرجع عند فقدان الرأس `x-api-key`، وأيضاً عندما لا
            يتمكن رصيد المؤسسة الطالبة من تغطية الاستدعاء؛ ويُرجع المفتاح الخاطئ
            أو الملغى أو منتهي الصلاحية `401`. يؤدي المفتاح المفقود إلى إرجاع
            `403` مع `{"detail": ...}`؛ ويؤدي المفتاح الخاطئ أو الملغى أو منتهي
            الصلاحية إلى إرجاع `401`. يُرجع نقص الرصيد `403` مع `{"error": ...}`
            قبل إجراء أي معالجة للصور.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: لا يوجد رأس `x-api-key`، أو أن المفتاح غير صالح/ملغى
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: رصيد المؤسسة لا يمكنه تغطية تكلفة الاستدعاء
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '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/passive-liveness/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'user_image=@./selfie.jpg' \
              -F 'face_liveness_score_decline_threshold=30' \
              -F 'save_api_request=true' \
              -F 'vendor_data=user-123'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.passive_liveness.check(
                user_image=open("user_image.jpg", "rb"),
                face_liveness_score_decline_threshold=30.0,
                rotate_image=False,
                save_api_request=True,
                vendor_data="user-123",
                metadata={"flow": "withdrawal"},
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.passiveLiveness.check({
              user_image: await fileFromPath("user_image.jpg"),
              face_liveness_score_decline_threshold: 30.0,
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "withdrawal" },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.PassiveLiveness.Check(ctx, didit.PassiveLivenessCheckParams{\n\tUserImage:                         didit.FileFromPath(\"user_image.jpg\"),\n\tFaceLivenessScoreDeclineThreshold: didit.Float(30.0),\n\tRotateImage:                       didit.Bool(false),\n\tSaveAPIRequest:                    didit.Bool(true),\n\tVendorData:                        didit.String(\"user-123\"),\n\tMetadata:                          didit.Some(map[string]any{\"flow\": \"withdrawal\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import java.util.Map;

            import me.didit.Didit;

            import me.didit.types.PassiveLivenessCheckParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.passiveLiveness().check(PassiveLivenessCheckParams.builder()
                    .userImage(Path.of("user_image.jpg"))
                    .faceLivenessScoreDeclineThreshold(30.0)
                    .rotateImage(false)
                    .saveApiRequest(true)
                    .vendorData("user-123")
                    .metadata(Map.of("flow", "withdrawal"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;
            use Didit\File;

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

            $result = $didit->passiveLiveness->check([
                'user_image' => File::fromPath('user_image.jpg'),
                'face_liveness_score_decline_threshold' => 30.0,
                'rotate_image' => false,
                'save_api_request' => true,
                'vendor_data' => 'user-123',
                'metadata' => ['flow' => 'withdrawal'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.passive_liveness.check(
              user_image: Pathname("user_image.jpg"),
              face_liveness_score_decline_threshold: 30.0,
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "withdrawal" }
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Collections.Generic;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.PassiveLiveness.CheckAsync(new
            PassiveLivenessCheckParams

            {
                UserImage = FileUpload.FromPath("user_image.jpg"),
                FaceLivenessScoreDeclineThreshold = 30.0,
                RotateImage = false,
                SaveApiRequest = true,
                VendorData = "user-123",
                Metadata = new Dictionary<string, object> { ["flow"] = "withdrawal" },
            });

            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.