> ## 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: 1:N चेहरा डुप्लिकेट और फ्रॉड रिंग

> Didit का POST /v3/face-search/ सत्यापित उपयोगकर्ताओं में 1:N चेहरा खोज करता है। डुप्लिकेट और फ्रॉड रिंग पहचानें। 2s से कम इनफरेंस, प्रति कॉल भुगतान।



## OpenAPI

````yaml hi/openapi-25.json POST /v3/face-search/
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/face-search/:
    post:
      tags:
        - Standalone APIs
      summary: चेहरा खोज
      description: >-
        अपने एप्लिकेशन के चेहरा खोज इंडेक्स के विरुद्ध किसी चेहरे की इमेज (1:N)
        खोजें — सत्यापन सत्रों से नामांकित चेहरे, सहेजे गए स्टैंडअलोन API कॉल,
        सीधे उपयोगकर्ता-प्रोफ़ाइल फ़ेस अपलोड, और आपकी ब्लॉक/अनुमति सूचियाँ — और
        रैंक किए गए समानता मिलान के साथ-साथ ब्लॉकलिस्ट और डुप्लिकेट चेतावनियाँ
        प्राप्त करें।


        **यह कैसे काम करता है।** `user_image` में पाए गए सबसे बड़े चेहरे को
        एम्बेड किया जाता है और आपके एप्लिकेशन के दायरे में इंडेक्स के विरुद्ध
        खोजा जाता है। समानता न्यूनतम सीमा से ऊपर के अधिकतम **5 मिलान**,
        `matches` में लौटाए जाते हैं, प्रत्येक में `similarity_percentage`, मूल
        सत्र (`session_id`, `session_number`, `status`, `vendor_data`), उस सत्र
        के दस्तावेज़ सत्यापन के दौरान निकाले गए `user_details`, `is_blocklisted`
        / `is_allowlisted` फ़्लैग, और एक `source` डिस्क्रिमिनेटर (`session`,
        `imported`, या `list_entry`) शामिल होता है।


        - `search_type=most_similar` (डिफ़ॉल्ट) प्रत्येक नामांकित चेहरे को
        समानता के आधार पर रैंक करता है — डिडुप्लीकेशन और धोखाधड़ी-रिंग जांच के
        लिए इसका उपयोग करें।

        - `search_type=blocklisted_or_approved` उम्मीदवारों को ब्लॉकलिस्ट किए गए
        चेहरों, अनुमति सूची वाले चेहरों, स्वीकृत सत्रों के चेहरों और इंपोर्ट किए
        गए उपयोगकर्ता-प्रोफ़ाइल चेहरों तक सीमित करता है, जिसमें ब्लॉकलिस्ट की गई
        प्रविष्टियों को पहले रैंक किया जाता है — जब प्राथमिक लक्ष्य ब्लॉकलिस्ट
        स्क्रीनिंग हो तो इसका उपयोग करें।


        `status` केवल तभी `Declined` होता है जब `FACE_IN_BLOCKLIST` या
        `POSSIBLE_FACE_IN_BLOCKLIST` चेतावनी ट्रिगर होती है; `DUPLICATED_FACE` /
        `POSSIBLE_DUPLICATED_FACE` (`information`) और `MULTIPLE_FACES_DETECTED`
        (`warning`) कभी भी अस्वीकृत नहीं करते हैं। Passive Liveness के विपरीत,
        यह endpoint समान `vendor_data` वाले पिछले सत्रों को मिलान से बाहर
        **नहीं** करता है। एक पैसिव-लाइवनेस विश्लेषण आंतरिक रूप से भी चलता है और
        स्थायी सत्र के साथ संग्रहीत होता है, लेकिन इसका परिणाम इस रिस्पॉन्स का
        हिस्सा नहीं है।


        **बिलिंग।** प्रत्येक `200` रिस्पॉन्स एक Face Search API क्रेडिट की खपत
        करता है (आपके प्लान क्रेडिट या टॉप-अप बैलेंस से भुगतान किया जाता है)।
        अपर्याप्त बैलेंस किसी भी इमेज प्रोसेसिंग से पहले `403` लौटाता है।


        **सत्र स्थायित्व और चेहरा नामांकन (`save_api_request`, डिफ़ॉल्ट
        `true`)।** जब `true` होता है, तो कॉल को एक API-प्रकार के सत्र के रूप में
        बनाए रखा जाता है (Business Console, लौटाए गए `request_id` के माध्यम से
        `GET /v3/session/{sessionId}/decision/`, `status.updated` webhook) और
        खोजे गए चेहरे को आपके चेहरा खोज इंडेक्स में नामांकित किया जाता है। Face
        Search कॉल द्वारा नामांकित चेहरों को भविष्य के Face Search परिणामों से
        बाहर रखा जाता है, ताकि बार-बार की जाने वाली खोजें कभी एक-दूसरे से मेल न
        खाएं। जब `false` होता है, तो कॉल वन-शॉट होती है: कुछ भी संग्रहीत नहीं
        किया जाता है, चेहरा नामांकित नहीं होता है, और `match_image_url` मान
        डाउनलोड करने योग्य URL के बजाय आंतरिक स्टोरेज पथ होते हैं।


        **सैंडबॉक्स।** सैंडबॉक्स API कुंजियाँ सभी प्रोसेसिंग और बिलिंग को छोड़
        देती हैं: अनुरोध सत्यापन के बाद (गलत रूप से संरचित इनपुट अभी भी `400`
        लौटाता है), endpoint एक स्थिर `Approved` मॉक payload लौटाता है, कोई सत्र
        स्थायी नहीं होता है, और कोई क्रेडिट खपत नहीं होता है।


        **प्रमाणीकरण।** अपने एप्लिकेशन की API कुंजी `x-api-key` हेडर में भेजें।
        अनुपलब्ध या अमान्य क्रेडेंशियल `403` (`{"detail": "You do not have
        permission to perform this action."}`) लौटाते हैं — यह API कभी भी `401`
        नहीं लौटाती है।


        **रेट लिमिट।** सभी POST/PATCH/DELETE endpoints पर प्रति API कुंजी 300
        requests/min का साझा राइट बजट; इससे अधिक होने पर `429` मिलता है।
      operationId: post_v3face-search
      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 तक कंप्रेस की जाती हैं, इसलिए बहुत उच्च
                    रिज़ॉल्यूशन सटीकता में सुधार नहीं करते हैं। इमेज में कम से
                    कम एक डिटेक्ट किया जा सकने वाला चेहरा होना चाहिए — अन्यथा
                    endpoint `400` लौटाता है। जब कई चेहरे मौजूद होते हैं, तो
                    सबसे बड़े चेहरे की खोज की जाती है और
                    `MULTIPLE_FACES_DETECTED` चेतावनी जोड़ी जाती है।
                search_type:
                  type: string
                  default: most_similar
                  enum:
                    - most_similar
                    - blocklisted_or_approved
                  description: >-
                    सर्च नीति। `most_similar` (डिफ़ॉल्ट) आपके एप्लिकेशन में
                    प्रत्येक नामांकित चेहरे को समानता के आधार पर रैंक करता है।
                    `blocklisted_or_approved` उम्मीदवारों को ब्लॉकलिस्ट किए गए
                    चेहरों, अनुमति प्राप्त चेहरों, स्वीकृत सत्रों के चेहरों और
                    इंपोर्ट किए गए उपयोगकर्ता-प्रोफ़ाइल चेहरों तक सीमित करता है
                    — जिसमें ब्लॉकलिस्ट की गई प्रविष्टियों को सबसे पहले रैंक
                    किया जाता है।
                  example: most_similar
                rotate_image:
                  type: boolean
                  default: false
                  description: >-
                    जब `true` होता है, तो सेवा इनपुट के 90-डिग्री घुमावों का
                    प्रयास करती है और उस ओरिएंटेशन का उपयोग करती है जिससे सबसे
                    अच्छा फ़ेस डिटेक्शन प्राप्त होता है। तब उपयोगी होता है जब
                    EXIF ओरिएंटेशन गायब हो। विलंबता जोड़ता है।
                  example: false
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    जब `true` (डिफ़ॉल्ट) होता है, तो कॉल को API-प्रकार के सत्र
                    के रूप में सुरक्षित रखा जाता है, `status.updated` webhook
                    उत्सर्जित किया जाता है, `match_image_url` मानों को प्री-साइन
                    किया जाता है, और खोजे गए चेहरे को आपके चेहरा खोज इंडेक्स में
                    नामांकित किया जाता है (चेहरा खोज नामांकन भविष्य की खोजों से
                    बाहर रखे जाते हैं)। जब `false` होता है, तो खोज वन-शॉट होती
                    है — कोई सत्र संग्रहीत नहीं किया जाता है और चेहरा नामांकित
                    नहीं किया जाता है।
                  example: true
                vendor_data:
                  type: string
                  description: >-
                    वैकल्पिक अपारदर्शी पहचानकर्ता (आपकी उपयोगकर्ता ID, ईमेल,
                    UUID…) जो स्थायी सत्र पर संग्रहीत होता है और वापस भेजा जाता
                    है। यह खोज परिणामों से समान-उपयोगकर्ता के चेहरों को बाहर
                    नहीं करता है।
                  example: user-123
                metadata:
                  type: object
                  additionalProperties: true
                  description: >-
                    सत्र के साथ संग्रहीत (जब `save_api_request=true`) और वापस
                    लौटाया जाने वाला वैकल्पिक JSON ऑब्जेक्ट। मल्टीपार्ट अनुरोधों
                    में, इसे JSON-एन्कोडेड स्ट्रिंग फ़ील्ड के रूप में भेजें —
                    इसे एक ऑब्जेक्ट में पार्स किया जाता है।
                  example:
                    flow: dedup_check
            example:
              user_image: (binary JPEG/PNG selfie)
              search_type: most_similar
              rotate_image: false
              save_api_request: true
              vendor_data: user-123
              metadata:
                flow: dedup_check
      responses:
        '200':
          description: >-
            चेहरा खोज पूर्ण। `face_search.matches` समानता के क्रम में अधिकतम 5
            समान चेहरों को रखता है; एक खाली ऐरे का अर्थ है कि किसी भी नामांकित
            चेहरे ने समानता की न्यूनतम सीमा को पार नहीं किया। `status` केवल
            ब्लॉकलिस्ट हिट पर ही `Declined` होता है — अकेले डुप्लिकेट मिलान
            `Approved` लौटाते हैं, इसलिए केवल `status` ही नहीं, बल्कि `matches`
            और `warnings` की भी जांच करें। जब `save_api_request=true` हो, तो
            `request_id` सुरक्षित रखा गया सत्र आईडी होता है। प्रत्येक मिलान में
            `source` (`session`, `imported`, `list_entry`, या
            `retained_template`), `vendor_user_id`, और `biometric_template_id`
            होता है; एक `retained_template` मिलान स्रोत सत्र के हटाए जाने के बाद
            रखे गए छवि-मुक्त बायोमेट्रिक टेम्पलेट से आता है और इसमें सत्र
            फ़ील्ड, `match_image_url`, और `user_details`, `null` होते हैं।
          content:
            application/json:
              examples:
                Blocklist hit (Declined):
                  summary: चेहरा ब्लॉकलिस्ट किए गए चेहरे से मेल खाता है
                  value:
                    request_id: a1b2c3d4-e5f6-7890-1234-567890abcdef
                    face_search:
                      status: Declined
                      total_matches: 1
                      matches:
                        - session_id: 882c42d5-8a4d-4d20-8080-a22f57822c86
                          session_number: 323442
                          similarity_percentage: 99.99
                          source: session
                          vendor_data: user-1
                          verification_date: '2025-01-01T00:00:00Z'
                          user_details:
                            full_name: Jane Marie Doe
                            document_type: ID
                            document_number: X1234567
                          match_image_url: https://<media-host>/face/3f6a1c2e/reference.jpg
                          status: Approved
                          is_blocklisted: true
                          is_allowlisted: false
                          api_service: null
                          vendor_user_id: 2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f
                          biometric_template_id: null
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 120
                              - 120
                            confidence: 0.732973
                        best_angle: 0
                      warnings:
                        - risk: FACE_IN_BLOCKLIST
                          feature: LIVENESS
                          additional_data:
                            blocklisted_session_id: 882c42d5-8a4d-4d20-8080-a22f57822c86
                            blocklisted_session_number: 323442
                            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.
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                Duplicate found (Approved):
                  summary: >-
                    चेहरा पहले ही किसी अन्य स्वीकृत सत्र में दिखाई दे चुका है —
                    केवल सूचनात्मक, कोई अस्वीकृति नहीं
                  value:
                    request_id: 5e0c3a1f-7b2d-4c8e-9f10-2a3b4c5d6e7f
                    face_search:
                      status: Approved
                      total_matches: 1
                      matches:
                        - session_id: 1f2e3d4c-5b6a-7980-1122-334455667788
                          session_number: 1024
                          similarity_percentage: 87.42
                          source: session
                          vendor_data: user-9
                          verification_date: '2025-11-20T09:15:00Z'
                          user_details: null
                          match_image_url: https://<media-host>/face/9c8b7a6d/reference.jpg
                          status: Approved
                          is_blocklisted: false
                          is_allowlisted: false
                          api_service: PASSIVE_LIVENESS
                          vendor_user_id: 2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f
                          biometric_template_id: null
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 120
                              - 120
                            confidence: 0.732973
                        best_angle: 0
                      warnings:
                        - risk: DUPLICATED_FACE
                          feature: LIVENESS
                          additional_data:
                            duplicated_session_id: 1f2e3d4c-5b6a-7980-1122-334455667788
                            duplicated_session_number: 1024
                            api_service: PASSIVE_LIVENESS
                          log_type: information
                          short_description: Duplicated face from other approved session
                          long_description: >-
                            The system identified a duplicated face from another
                            approved session, requiring further investigation.
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                No matches (Approved):
                  summary: नामांकित कोई भी चेहरा समानता की न्यूनतम सीमा से अधिक नहीं था
                  value:
                    request_id: 9d8c7b6a-5f4e-3d2c-1b0a-998877665544
                    face_search:
                      status: Approved
                      total_matches: 0
                      matches: []
                      user_image:
                        entities:
                          - bbox:
                              - 40
                              - 40
                              - 120
                              - 120
                            confidence: 0.732973
                        best_angle: 0
                      warnings: []
                    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` होने पर सहेजी गई सत्र ID (`GET
                      /v3/session/{sessionId}/decision/` के साथ उपयोग योग्य);
                      अन्यथा एक क्षणिक सहसंबंध UUID।
                  face_search:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                        description: >-
                          `Declined` केवल तब जब कोई `FACE_IN_BLOCKLIST` या
                          `POSSIBLE_FACE_IN_BLOCKLIST` चेतावनी ट्रिगर हुई हो।
                          डुप्लिकेट मिलान और एकाधिक-चेहरे वाली चेतावनियाँ कभी भी
                          अस्वीकृत नहीं करती हैं।
                      total_matches:
                        type: integer
                        description: '`matches` में प्रविष्टियों की संख्या (0–5)।'
                        example: 1
                      matches:
                        type: array
                        maxItems: 5
                        description: >-
                          आपके चेहरा खोज इंडेक्स से अधिकतम 5 चेहरे जो समानता
                          थ्रेशोल्ड से अधिक हैं, समानता के आधार पर क्रमबद्ध (जब
                          `search_type=blocklisted_or_approved` हो तो ब्लॉकलिस्ट
                          की गई प्रविष्टियों को पहले स्थान पर रखा जाता है)। जब
                          कोई नामांकित चेहरा पर्याप्त रूप से समान न हो तो यह
                          खाली होता है।
                        items:
                          type: object
                          properties:
                            session_id:
                              type: string
                              format: uuid
                              nullable: true
                              description: >-
                                उस सत्यापन सत्र का Id जिससे मिलान किया गया चेहरा
                                संबंधित है। `null` जब `source`, `imported`,
                                `list_entry` या `retained_template` हो।
                              example: 882c42d5-8a4d-4d20-8080-a22f57822c86
                            session_number:
                              type: integer
                              nullable: true
                              description: >-
                                Business Console में दिखाई गई मानव-पठनीय सत्र
                                संख्या। गैर-सत्र मिलानों के लिए `null`।
                              example: 323442
                            similarity_percentage:
                              type: number
                              format: float
                              minimum: 0
                              maximum: 100
                              description: >-
                                प्रस्तुत चेहरे और मिलान किए गए चेहरे के बीच
                                समानता (0–100)।
                              example: 99.99
                            source:
                              type: string
                              enum:
                                - session
                                - imported
                                - list_entry
                                - retained_template
                              description: >-
                                मिलान किए गए चेहरे को कहाँ से एनरोल किया गया था:
                                `session` — एक सत्यापन सत्र या सहेजी गई स्वतंत्र
                                API कॉल; `imported` — सीधे उपयोगकर्ता प्रोफ़ाइल
                                पर अपलोड किया गया चेहरा; `list_entry` — आपकी
                                सूचियों में से किसी एक से जुड़ा चेहरा;
                                `retained_template` — उपयोगकर्ता पर संग्रहीत एक
                                छवि-मुक्त बायोमेट्रिक टेम्पलेट, जो
                                `/v3/biometric-templates/` के अंतर्गत सूचीबद्ध
                                है।
                            vendor_data:
                              type: string
                              nullable: true
                              description: >-
                                आयातित और बनाए रखे गए टेम्पलेट चेहरों के लिए
                                मिलान किए गए सत्र या लिंक किए गए User का
                                `vendor_data`।
                              example: user-1
                            vendor_user_id:
                              type: string
                              format: uuid
                              nullable: true
                              description: >-
                                लिंक की गई उपयोगकर्ता id। सूची प्रविष्टियों और
                                बिना उपयोगकर्ता वाले सत्र मिलानों के लिए `null`।
                              example: 2f7c1a9e-4b28-4a6d-97f1-83576f80e1b4
                            biometric_template_id:
                              type: string
                              format: uuid
                              nullable: true
                              description: >-
                                प्रतिधारित बायोमेट्रिक टेम्पलेट का Id। केवल तभी
                                सेट किया जाता है जब `source`,
                                `retained_template` हो; अन्यथा `null`।
                              example: null
                            verification_date:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                मिलान किया गया चेहरा मूल रूप से कब कैप्चर किया
                                गया था, या प्रतिधारित टेम्पलेट कब बनाया गया था
                                (`YYYY-MM-DDThh:mm:ssZ`)। `list_entry` मिलानों
                                के लिए `null`।
                              example: '2025-01-01T00:00:00Z'
                            user_details:
                              type: object
                              nullable: true
                              description: >-
                                मिलान किए गए सत्र के दस्तावेज़ सत्यापन के दौरान
                                निकाला गया पहचान डेटा। जब मिलान किए गए सत्र में
                                कोई दस्तावेज़ डेटा नहीं होता है (उदा. केवल
                                लाइवनेस वाले सत्र) तो `null` और
                                `retained_template` मिलानों के लिए हमेशा `null`।
                                `source: imported` मिलानों के लिए यह इसके बजाय
                                उपयोगकर्ता प्रोफ़ाइल से भरा जाता है: `full_name`
                                सेट, `document_type`/`document_number` null।
                              properties:
                                full_name:
                                  type: string
                                  nullable: true
                                  example: Jane Marie Doe
                                document_type:
                                  type: string
                                  nullable: true
                                  example: ID
                                document_number:
                                  type: string
                                  nullable: true
                                  example: X1234567
                            match_image_url:
                              type: string
                              nullable: true
                              description: >-
                                `save_api_request=true` होने पर मिलान किए गए
                                चेहरे की संदर्भ छवि का समय-सीमित URL
                                (`https://<media-host>/...`)।
                                `save_api_request=false` होने पर यह एक आंतरिक
                                स्टोरेज पाथ होता है जिसे सीधे डाउनलोड नहीं किया
                                जा सकता। `retained_template` मिलानों के लिए
                                हमेशा `null` क्योंकि बनाए रखे गए टेम्पलेट्स में
                                कोई छवि नहीं होती है।
                              example: https://<media-host>/face/3f6a1c2e/reference.jpg
                            status:
                              type: string
                              nullable: true
                              description: >-
                                मिलान किए गए सत्र की स्थिति (`Approved`,
                                `Declined`, `In Review`, …)।
                                `imported`/`list_entry` मिलानों के लिए `null`।
                              example: Approved
                            is_blocklisted:
                              type: boolean
                              description: >-
                                `true` जब मिलान किया गया चेहरा आपकी फ़ेस
                                ब्लॉकलिस्ट में हो। कोई भी पर्याप्त रूप से समान
                                ब्लॉकलिस्ट किया गया मिलान खोज को अस्वीकृत कर
                                देता है।
                            is_allowlisted:
                              type: boolean
                              description: >-
                                `true` जब मिलान किया गया चेहरा आपकी किसी अनुमति
                                सूची (allowlist) में हो। अनुमति सूची में शामिल
                                मिलान डुप्लिकेट चेतावनियों को दबा देते हैं।
                            api_service:
                              type: string
                              nullable: true
                              description: >-
                                तब सेट किया जाता है जब मिलान किया गया चेहरा किसी
                                स्टैंडअलोन API कॉल (उदा. `PASSIVE_LIVENESS`)
                                द्वारा नामांकित किया गया था; नियमित सत्यापन
                                सत्रों और इंपोर्ट किए गए चेहरों के लिए `null`।
                              example: null
                      user_image:
                        type: object
                        description: >-
                          सबमिट की गई छवि के लिए चेहरा-पहचान परिणाम। यहाँ की
                          प्रविष्टियों में केवल `bbox` और `confidence` होते हैं।
                        properties:
                          entities:
                            type: array
                            description: >-
                              प्रत्येक पहचाने गए चेहरे के लिए एक प्रविष्टि। सबसे
                              बड़े चेहरे की खोज की जाती है।
                            items:
                              type: object
                              properties:
                                bbox:
                                  type: array
                                  items:
                                    type: integer
                                  minItems: 4
                                  maxItems: 4
                                  description: >-
                                    पिक्सल में बाउंडिंग बॉक्स `[x_min, y_min,
                                    x_max, y_max]`।
                                  example:
                                    - 40
                                    - 40
                                    - 120
                                    - 120
                                confidence:
                                  type: number
                                  format: float
                                  minimum: 0
                                  maximum: 1
                                  description: चेहरा-पहचान विश्वास (0–1)।
                                  example: 0.732973
                          best_angle:
                            type: integer
                            description: >-
                              रोटेशन (डिग्री) जिसने चेहरे का सर्वोत्तम डिटेक्शन
                              उत्पन्न किया; केवल तभी गैर-शून्य जब
                              `rotate_image=true` ने ओरिएंटेशन को ठीक किया। इस
                              endpoint पर कभी भी null नहीं (मॉडल द्वारा इसे
                              छोड़े जाने पर डिफ़ॉल्ट रूप से 0)।
                            example: 0
                      warnings:
                        type: array
                        description: >-
                          जोखिम सिग्नल। `FACE_IN_BLOCKLIST` /
                          `POSSIBLE_FACE_IN_BLOCKLIST` (`error`) खोज को अस्वीकार
                          करते हैं; `MULTIPLE_FACES_DETECTED` (`warning`) और
                          `DUPLICATED_FACE` / `POSSIBLE_DUPLICATED_FACE`
                          (`information`) सलाहकारी हैं।
                        items:
                          type: object
                          properties:
                            risk:
                              type: string
                              enum:
                                - MULTIPLE_FACES_DETECTED
                                - FACE_IN_BLOCKLIST
                                - POSSIBLE_FACE_IN_BLOCKLIST
                                - DUPLICATED_FACE
                                - POSSIBLE_DUPLICATED_FACE
                              description: मशीन-पठनीय जोखिम कोड।
                            feature:
                              type: string
                              enum:
                                - LIVENESS
                              description: >-
                                सुविधा जिसने चेतावनी उत्पन्न की। इस endpoint पर
                                हमेशा `LIVENESS`।
                            additional_data:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                `MULTIPLE_FACES_DETECTED` के लिए `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: जोखिम का मानव-पठनीय स्पष्टीकरण।
                  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 से
            अधिक हो, इसका एक्सटेंशन असमर्थित हो, या जब सबमिट की गई इमेज में
            **कोई चेहरा डिटेक्ट नहीं होता है**। फ़ील्ड त्रुटियां DRF के `{field:
            [messages]}` एनवेलप का उपयोग करती हैं; चेहरा डिटेक्शन विफलताएं
            `{"error": ...}` का उपयोग करती हैं।
          content:
            application/json:
              examples:
                No face detected:
                  summary: >-
                    छवि ठीक से डीकोड हो जाती है लेकिन उसमें पता लगाया जा सकने
                    वाला कोई चेहरा नहीं है
                  value:
                    error: No face detected in the image
                Missing image:
                  summary: '`user_image` फ़ॉर्म डेटा में शामिल नहीं है'
                  value:
                    user_image:
                      - No file was submitted.
                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 MB की सीमा से अधिक है
                  value:
                    user_image:
                      - File size should not exceed 5 MB
        '403':
          description: >-
            अनुमति अस्वीकृत। तब लौटाया जाता है जब `x-api-key` हेडर अनुपलब्ध हो,
            और तब भी जब कॉल करने वाले संगठन का बैलेंस कॉल को कवर नहीं कर सकता;
            गलत, निरस्त या समय-सीमा समाप्त कुंजी `401` लौटाती है। अनुपलब्ध कुंजी
            `{"detail": ...}` के साथ `403` लौटाती है; गलत, निरस्त या समय-सीमा
            समाप्त कुंजी `401` लौटाती है। क्रेडिट की कमी किसी भी इमेज प्रोसेसिंग
            से पहले `{"error": ...}` के साथ `403` लौटाती है।
          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: >-
            रेट लिमिट पार हो गई। POST/PATCH/DELETE endpoints प्रति मिनट प्रति
            API कुंजी 300 राइट अनुरोधों का बजट साझा करते हैं (लेन-देन निर्माण और
            इवेंट इनजेशन का 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/face-search/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'user_image=@./selfie.jpg' \
              -F 'search_type=most_similar' \
              -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.face_search.search(
                user_image=open("user_image.jpg", "rb"),
                search_type="most_similar",
                rotate_image=False,
                save_api_request=True,
                vendor_data="user-123",
                metadata={"flow": "dedup_check"},
            )
            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.faceSearch.search({
              user_image: await fileFromPath("user_image.jpg"),
              search_type: "most_similar",
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "dedup_check" },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FaceSearch.Search(ctx, didit.FaceSearchSearchParams{\n\tUserImage:      didit.FileFromPath(\"user_image.jpg\"),\n\tSearchType:     didit.Some(didit.FaceSearchSearchParamsSearchType(\"most_similar\")),\n\tRotateImage:    didit.Bool(false),\n\tSaveAPIRequest: didit.Bool(true),\n\tVendorData:     didit.String(\"user-123\"),\n\tMetadata:       didit.Some(map[string]any{\"flow\": \"dedup_check\"}),\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.FaceSearchSearchParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.faceSearch().search(FaceSearchSearchParams.builder()
                    .userImage(Path.of("user_image.jpg"))
                    .searchType(FaceSearchSearchParams.SearchType.of("most_similar"))
                    .rotateImage(false)
                    .saveApiRequest(true)
                    .vendorData("user-123")
                    .metadata(Map.of("flow", "dedup_check"))
                    .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->faceSearch->search([
                'user_image' => File::fromPath('user_image.jpg'),
                'search_type' => 'most_similar',
                'rotate_image' => false,
                'save_api_request' => true,
                'vendor_data' => 'user-123',
                'metadata' => ['flow' => 'dedup_check'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.face_search.search(
              user_image: Pathname("user_image.jpg"),
              search_type: "most_similar",
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "dedup_check" }
            )
            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.FaceSearch.SearchAsync(new
            FaceSearchSearchParams

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

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        आपकी एप्लिकेशन की API कुंजी, Business Console में Developers -> API keys
        से। प्राथमिक कुंजी के पास पूर्ण एक्सेस होता है। एक नामित कुंजी को स्कोप
        किया जा सकता है: प्रति संसाधन none, read या write, कुछ वर्कफ़्लो या
        स्वीकृत सत्रों तक सीमित, IP पतों की सूची तक सीमित, और समाप्ति तिथि तक
        सीमित। 401 का अर्थ है कि कुंजी गलत है, निरस्त कर दी गई है या उसकी
        समय-सीमा समाप्त हो गई है; 403 का अर्थ है कि कोई कुंजी नहीं भेजी गई थी,
        कुंजी के पास इस संसाधन या कार्रवाई का एक्सेस नहीं है, या अनुरोध उसकी IP
        सूची से बाहर के पते से आया था; सत्र रूट पर 404 का अर्थ है कि सत्र कुंजी
        के वर्कफ़्लो या स्थितियों से बाहर है। मीडिया एक्सेस के बिना एक कुंजी को
        छवि, वीडियो और PDF URL null के रूप में प्राप्त होते हैं, और सत्र write
        के बिना एक कुंजी को सत्र लिंक और token null के रूप में प्राप्त होते हैं।
        देखें https://docs.didit.me/console/api-keys।

````

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