> ## 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: दस्तावेज़ OCR और प्रामाणिकता

> Didit के साथ 220+ देशों और 14,000+ प्रकार के पहचान दस्तावेज़ सत्यापित करें। प्रामाणिकता, OCR, MRZ, 2 सेकंड से कम अनुमान, प्रति उपयोग मूल्य, कोई अनुबंध नहीं।



## OpenAPI

````yaml hi/openapi-25.json POST /v3/id-verification/
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/:
    post:
      tags:
        - Standalone APIs
      summary: पहचान सत्यापन (दस्तावेज़ OCR + धोखाधड़ी जाँच)
      description: >-
        एक ही कॉल में किसी पहचान दस्तावेज़ का OCR करें और दस्तावेज़ धोखाधड़ी की
        जांच करें: यह निकाले गए धारक फ़ील्ड, पार्स किया गया MRZ, एक
        `Approved`/`Declined`/`In Review` `status`, और पाए गए प्रत्येक मुद्दे की
        व्याख्या करने वाली `warnings` सूची लौटाता है। 220+ देशों और क्षेत्रों के
        14,000+ दस्तावेज़ प्रकारों का समर्थन करता है।


        **यह कैसे काम करता है।** दस्तावेज़ की `front_image` (आवश्यक) और दो-तरफ़ा
        दस्तावेज़ों के लिए `back_image` भेजें। बिना क्रॉप की गई फ़ोटो अपलोड करें
        जिनमें दस्तावेज़ के चारों कोने दिखाई दे रहे हों; सेवा दस्तावेज़ का पता
        लगाती है, उसे संरेखित करती है और स्वयं क्रॉप करती है, इसलिए पहले से
        क्रॉप न करें। दस्तावेज़ को स्वचालित रूप से वर्गीकृत किया जाता है (आपको
        कभी भी देश या दस्तावेज़ प्रकार घोषित करने की आवश्यकता नहीं होती है),
        विज़ुअल ज़ोन को OCR से पढ़ा जाता है, और MRZ तथा किसी भी बारकोड को डिकोड
        किया जाता है। क्रॉस-चेक फिर तिथियों, संख्या प्रारूपों और MRZ चेक अंकों
        को मान्य करते हैं, और विज़ुअल ज़ोन की तुलना MRZ से करते हैं।
        `perform_document_liveness=true` के साथ, स्क्रीन रीप्ले, मुद्रित
        प्रतियों और पोर्ट्रेट हेरफेर के लिए छवियों की अतिरिक्त स्क्रीनिंग की
        जाती है।


        **निर्णय तर्क।** `status` `Approved` रहता है जब तक कि कम से कम एक
        चेतावनी अस्वीकृति का कारण न बने। धोखाधड़ी और गंभीर विफलता जोखिम हमेशा
        अस्वीकृत करते हैं: `DOCUMENT_EXPIRED`, `SCREEN_CAPTURE_DETECTED`,
        `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED`,
        `PUBLIC_DOCUMENT_IMAGE_DETECTED`, साथ ही निष्कर्षण विफलताएं
        (`NAME_NOT_DETECTED`, `DATE_OF_BIRTH_NOT_DETECTED`,
        `DOCUMENT_NUMBER_NOT_DETECTED`)। (`PORTRAIT_IMAGE_NOT_DETECTED`,
        `INVALID_DATE`, और `MRZ_NOT_DETECTED` वर्कफ़्लो सत्रों में मौजूद होते
        हैं लेकिन इस स्टैंडअलोन endpoint द्वारा कभी उत्पन्न नहीं किए जाते हैं।
        `COULD_NOT_DETECT_DOCUMENT_TYPE` यहाँ तब लौटाया जाता है जब फ्रंट इमेज
        उच्च विश्वास के साथ किसी ज्ञात आधिकारिक दस्तावेज़ डिज़ाइन से मेल नहीं
        खाती है, और यह अनुरोध को अस्वीकृत कर देता है।) तीन जोखिम समूह प्रति
        अनुरोध `invalid_mrz_action`, `inconsistent_data_action`, और
        `expiration_date_not_detected_action` (`DECLINE` या `NO_ACTION`) के
        माध्यम से कॉन्फ़िगर करने योग्य हैं। अन्य सभी चेतावनियाँ (जैसे
        `POSSIBLE_DUPLICATED_USER`) केवल जानकारी के लिए हैं और अपने आप कभी
        अस्वीकृत नहीं करती हैं। जब `perform_document_liveness=true` (डिफ़ॉल्ट)
        हो और जालसाज़ी जांच कोई उपयोगी स्कोर नहीं लौटाती है (प्रदाता विफल हो
        गया, गैर-200 उत्तर दिया, या `status="ERR"` के साथ HTTP 200 उत्तर दिया),
        तो कॉल `Approved` के बजाय `status: "In Review"` और एक
        `DOCUMENT_LIVENESS_NOT_COMPUTED` चेतावनी (`log_type: "warning"`) के साथ
        `200` लौटाती है: जो जांच नहीं चली वह इस बात का सबूत नहीं है कि दस्तावेज़
        असली है। यह एस्केलेशन कॉन्फ़िगर करने योग्य नहीं है और कभी भी `Declined`
        को ओवरराइड नहीं करता है; `perform_document_liveness=false` के साथ जांच
        छोड़ दी जाती है और स्थिति पहले की तरह शेष चेतावनियों का पालन करती है। एक
        दस्तावेज़ जिसे बिल्कुल भी संसाधित नहीं किया जा सकता है, `{"error":
        "COULD_NOT_RECOGNIZE_DOCUMENT"}` के साथ `400` लौटाता है; एक पढ़ने योग्य
        लेकिन समस्याग्रस्त दस्तावेज़ `status: "Declined"` के साथ `200` लौटाता
        है; केवल HTTP कोड ही नहीं, हमेशा `id_verification.status` और
        `id_verification.warnings` की जांच करें।


        **बिलिंग।** प्रत्येक `200` रिस्पॉन्स एक ID Verification API क्रेडिट का
        उपभोग करता है (आपके प्लान क्रेडिट या टॉप-अप बैलेंस से भुगतान किया जाता
        है)। जब संगठन का बैलेंस कॉल को कवर नहीं कर सकता है, तो endpoint किसी भी
        छवि प्रसंस्करण से पहले अपर्याप्त-क्रेडिट त्रुटि के साथ `403` लौटाता है।


        **सत्र स्थायित्व (`save_api_request`, डिफ़ॉल्ट `true`)।** जब `true` होता
        है, तो कॉल को API-प्रकार के सत्र के रूप में बनाए रखा जाता है: यह
        Business Console में दिखाई देता है, लौटाया गया `request_id` एक वास्तविक
        सत्र id होता है जिसे आप `GET /v3/session/{sessionId}/decision/` को पास
        कर सकते हैं, क्रॉप की गई दस्तावेज़/पोर्ट्रेट छवियां संग्रहीत की जाती हैं
        और अल्पकालिक मीडिया URL (`https://<media-host>/ocr/...`) के रूप में
        लौटाई जाती हैं, और आपके कॉन्फ़िगर किए गए webhook endpoints पर एक
        `status.updated` webhook भेजा जाता है। जब `false` होता है, तो कुछ भी
        संग्रहीत नहीं किया जाता है, `request_id` एक बार का सहसंबंध UUID होता है,
        और `portrait_image`/`front_image`/`back_image` इनलाइन बेस64-एन्कोडेड
        JPEG स्ट्रिंग्स के रूप में लौटाए जाते हैं।


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


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


        **रेट लिमिट।** सभी POST/PATCH/DELETE endpoints पर प्रति API कुंजी 300
        अनुरोध/मिनट का साझा राइट बजट; इससे अधिक होने पर `429` लौटता है।
      operationId: post_v3id-verification
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - front_image
              properties:
                front_image:
                  type: string
                  format: binary
                  description: >-
                    पहचान दस्तावेज़ का सामने का भाग। स्वीकृत एक्सटेंशन: `tiff`,
                    `jpg`, `jpeg`, `png`, `webp`, `pdf`। अधिकतम अपलोड आकार: **10
                    MB** (फ़ाइलें इससे बड़ी होने पर `400` के साथ अस्वीकृत कर दी
                    जाती हैं)। OCR से पहले PDF को एक इमेज के रूप में रेंडर किया
                    जाता है; एन्क्रिप्टेड PDF के लिए `front_image_password`
                    आवश्यक है। इमेज स्वचालित रूप से ~0.5 MB तक कंप्रेस की जाती
                    हैं और EXIF ओरिएंटेशन लागू किया जाता है। दस्तावेज़ के सभी
                    चारों कोनों को दृश्यमान रखते हुए पूरा, अनक्रॉप किया गया
                    कैप्चर अपलोड करें।
                front_image_password:
                  type: string
                  description: >-
                    `front_image` को डिक्रिप्ट करने का पासवर्ड जब यह एक
                    एन्क्रिप्टेड PDF हो। बिना (या गलत) पासवर्ड के एन्क्रिप्टेड
                    PDF भेजने पर `400` मिलता है।
                  writeOnly: true
                back_image:
                  type: string
                  format: binary
                  description: >-
                    दस्तावेज़ का पिछला भाग — जब भी दस्तावेज़ में यह हो, इसे
                    भेजें (कई पहचान पत्रों के पीछे MRZ या बारकोड होता है; इसे
                    छोड़ने पर रिस्पॉन्स में MRZ और पिछले भाग के फ़ील्ड खाली रह
                    जाते हैं — यह endpoint अनुपलब्ध-MRZ चेतावनी नहीं उठाता है)।
                    `front_image` के समान प्रारूप और आकार सीमाएँ। छोड़ दिए जाने
                    पर, रिस्पॉन्स में `back_image` और पिछले भाग के फ़ील्ड `null`
                    होते हैं।
                back_image_password:
                  type: string
                  description: >-
                    `back_image` को डिक्रिप्ट करने का पासवर्ड जब यह एक
                    एन्क्रिप्टेड PDF हो।
                  writeOnly: true
                perform_document_liveness:
                  type: boolean
                  default: true
                  description: >-
                    प्रेज़ेंटेशन धोखाधड़ी के लिए दोनों छवियों को स्क्रीन करता
                    है: स्क्रीन रीप्ले (`SCREEN_CAPTURE_DETECTED`), प्रिंट की गई
                    प्रतियां (`PRINTED_COPY_DETECTED`), और पोर्ट्रेट हेरफेर
                    (`PORTRAIT_MANIPULATION_DETECTED`)। इनमें से कोई भी मिलने पर
                    इसे स्वतः अस्वीकृत कर दिया जाता है। डिफ़ॉल्ट रूप से सक्षम;
                    धोखाधड़ी स्क्रीनिंग को छोड़ने और लेटेंसी कम करने के लिए
                    `false` पर सेट करें। सक्षम होने पर और प्रदाता द्वारा कोई
                    उपयोगी स्कोर न लौटाए जाने पर, रिस्पॉन्स `Approved` के बजाय
                    `DOCUMENT_LIVENESS_NOT_COMPUTED` चेतावनी के साथ `In Review`
                    होता है।
                  example: true
                minimum_age:
                  type: integer
                  nullable: true
                  default: null
                  minimum: 1
                  maximum: 120
                  description: >-
                    स्वीकृत और मान्य (1–120) लेकिन इस endpoint द्वारा **वर्तमान
                    में लागू नहीं किया गया** — यह इस फ़ील्ड से कभी भी
                    `MINIMUM_AGE_NOT_MET` चेतावनी उत्पन्न नहीं करता है। लौटाए गए
                    `date_of_birth`/`age` से आयु नियमों को लागू करें, या आयु
                    प्रतिबंधों वाले सत्यापन सत्र वर्कफ़्लो का उपयोग करें।
                expiration_date_not_detected_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    जब कोई समाप्ति तिथि नहीं पढ़ी जा सकी
                    (`EXPIRATION_DATE_NOT_DETECTED`) तो क्या कार्रवाई करें।
                    डिफ़ॉल्ट `NO_ACTION` क्योंकि कई पहचान दस्तावेज़ों पर कोई
                    समाप्ति तिथि मुद्रित नहीं होती है। ध्यान दें: एक *पता लगाई
                    गई और समाप्त हो चुकी* समाप्ति तिथि इस विकल्प की परवाह किए
                    बिना हमेशा अस्वीकार (`DOCUMENT_EXPIRED`) करती है।
                invalid_mrz_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: DECLINE
                  description: >-
                    निकाले गए MRZ के चेक-डिजिट सत्यापन में विफल होने
                    (`MRZ_VALIDATION_FAILED`) पर क्या कार्रवाई की जाए। इस
                    endpoint पर अनुपलब्ध MRZ कोई चेतावनी ट्रिगर नहीं करता है।
                    केवल उन दस्तावेज़ों के लिए प्रासंगिक है जिनमें MRZ होता है।
                    `REVIEW` इस endpoint पर समर्थित नहीं है और `400` लौटाता है।
                inconsistent_data_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: DECLINE
                  description: >-
                    जब निकाला गया डेटा आंतरिक रूप से असंगत हो तो क्या कार्रवाई
                    करें: `DATA_INCONSISTENT`,
                    `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` (दृश्य क्षेत्र
                    MRZ से मेल नहीं खाता), या
                    `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`।
                critical_field_occlusion_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: DECLINE
                  description: >-
                    जब कैप्चर पर कोई महत्वपूर्ण मुद्रित फ़ील्ड भौतिक रूप से ढका
                    हुआ था (`CRITICAL_FIELD_OCCLUSION_DETECTED`) - एक पहचान
                    संख्या, एक नाम, जन्म तिथि, या समाप्ति तिथि, तो क्या कार्रवाई
                    करें। इस endpoint के अन्य दस्तावेज़-अखंडता जोखिमों की तरह,
                    डिफ़ॉल्ट रूप से अस्वीकृत करता है: वे नंबर ढके होना जिनसे
                    रिपोर्ट का मिलान किया जाता है, एक जानकारी छिपाए गए दस्तावेज़
                    जैसा दिखता है। ढके हुए फ़ील्ड के लिए पढ़े गए मान को दोनों ही
                    स्थितियों में निष्कर्षण से हटा दिया जाता है, इसलिए संबंधित
                    `*_NOT_DETECTED` चेतावनी आमतौर पर इसके साथ आती है। इस
                    endpoint पर `REVIEW` समर्थित नहीं है और यह `400` लौटाता है।
                document_or_personal_number_format_mismatch_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    जब कोई संख्या उस दस्तावेज़ प्रकार के लिए उसके जारीकर्ता
                    प्राधिकरण द्वारा उपयोग किए जाने वाले प्रारूप से मेल नहीं
                    खाती है (`DOCUMENT_NUMBER_FORMAT_MISMATCH`,
                    `PERSONAL_NUMBER_FORMAT_MISMATCH`) तो क्या कार्रवाई करें।
                    डिफ़ॉल्ट `NO_ACTION`, जो स्थिति को बदले बिना चेतावनी की
                    रिपोर्ट करता है। इस endpoint पर `REVIEW` समर्थित नहीं है और
                    यह `400` लौटाता है।
                preferred_characters:
                  type: string
                  enum:
                    - latin
                    - non_latin
                  default: latin
                  description: >-
                    उन दस्तावेज़ों पर नाम/पते फ़ील्ड के लिए पसंदीदा लिपि जो
                    लैटिन और गैर-लैटिन दोनों पाठ (अरबी, सिरिलिक, CJK, …) प्रिंट
                    करते हैं। `latin` लिप्यंतरित/लैटिन मान लौटाता है;
                    `non_latin` मूल लिपि को प्राथमिकता देता है।
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    `true` (डिफ़ॉल्ट) होने पर, कॉल को API-प्रकार के सत्र के रूप
                    में बनाए रखता है — Business Console में दृश्यमान, लौटाए गए
                    `request_id` का उपयोग करके `GET
                    /v3/session/{sessionId}/decision/` के माध्यम से प्राप्त करने
                    योग्य, `status.updated` webhook के माध्यम से घोषित, और
                    दस्तावेज़ छवियों को मीडिया URL के रूप में लौटाया जाता है।
                    `false` होने पर, कुछ भी संग्रहीत नहीं किया जाता है,
                    `request_id` एक अस्थायी UUID होता है, और छवियां इनलाइन
                    base64 JPEG स्ट्रिंग्स के रूप में लौटाई जाती हैं।
                  example: true
                vendor_data:
                  type: string
                  description: >-
                    वैकल्पिक अपारदर्शी स्ट्रिंग (आपकी आंतरिक उपयोगकर्ता ID,
                    ईमेल, UUID…) जो स्थायी सत्र पर संग्रहीत होती है और रिस्पॉन्स
                    में वापस भेजी जाती है। इसका उपयोग अपने स्वयं के रिकॉर्ड के
                    साथ API कॉल को सहसंबंधित करने और बाद में सत्रों को फ़िल्टर
                    करने के लिए करें।
                  example: user-123
                metadata:
                  type: object
                  additionalProperties: true
                  description: >-
                    सत्र के साथ संग्रहीत वैकल्पिक JSON ऑब्जेक्ट (जब
                    `save_api_request=true`) और रिस्पॉन्स में वापस प्रतिध्वनित
                    होता है। मल्टीपार्ट अनुरोधों में, इसे JSON-एन्कोडेड स्ट्रिंग
                    फ़ील्ड (उदा. `metadata={"flow":"onboarding"}`) के रूप में
                    भेजें — इसे एक ऑब्जेक्ट में पार्स किया जाता है।
                  example:
                    flow: onboarding
            example:
              front_image: (binary JPEG/PNG/PDF of the document front)
              back_image: (binary JPEG/PNG/PDF of the document back)
              perform_document_liveness: true
              save_api_request: true
              vendor_data: user-123
              metadata:
                flow: onboarding
      responses:
        '200':
          description: >-
            दस्तावेज़ संसाधित। `id_verification.status` `Approved`, `Declined`,
            या `In Review` है; हर संसूचित समस्या को `id_verification.warnings`
            में सूचीबद्ध किया गया है। `In Review` तब लौटाया जाता है जब अनुरोधित
            दस्तावेज़-लाइवनेस जांच से कोई उपयोगी परिणाम प्राप्त नहीं हुआ
            (`DOCUMENT_LIVENESS_NOT_COMPUTED`)। समस्याग्रस्त दस्तावेज़ भी
            `status: "Declined"` के साथ `200` लौटाता है — केवल HTTP कोड ही नहीं,
            बल्कि बॉडी का भी निरीक्षण करें। जब `save_api_request=true` हो, तो
            `request_id` स्थायी सत्र id होती है और छवि फ़ील्ड अल्पकालिक मीडिया
            URL होते हैं; `save_api_request=false` के साथ वे इनलाइन base64 JPEG
            स्ट्रिंग होते हैं।
          content:
            application/json:
              examples:
                Approved:
                  summary: >-
                    दो तरफा पहचान पत्र साफ़ पढ़ा गया (सहेजा गया — छवियाँ मीडिया
                    URL के रूप में)
                  value:
                    request_id: 11d219ed-d59c-4b1d-8d65-9b933f12d5b8
                    id_verification:
                      status: Approved
                      document_type: Identity Card
                      document_subtype: ID_CARD_GENERIC
                      document_number: CBX164224
                      personal_number: 20446581H
                      portrait_image: >-
                        https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-portrait_image-8c2f.jpg?signature=...
                      front_image: >-
                        https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-front_image-4a1e.jpg?signature=...
                      back_image: >-
                        https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-back_image-77b0.jpg?signature=...
                      front_image_camera_front: null
                      back_image_camera_front: null
                      front_image_camera_front_face_match_score: null
                      back_image_camera_front_face_match_score: null
                      front_image_quality_score:
                        focus_score: 78
                        brightness_score: 83.2
                        brightness_issue: ok
                        is_document_fully_visible: true
                        resolution_score: 40.7
                        overall_score: 70.2
                      back_image_quality_score:
                        focus_score: 100
                        brightness_score: 95.6
                        brightness_issue: ok
                        is_document_fully_visible: true
                        resolution_score: 43
                        overall_score: 84.4
                      date_of_birth: '1980-01-13'
                      age: 46
                      expiration_date: '2032-03-31'
                      date_of_issue: '2022-03-31'
                      issuing_state: ESP
                      issuing_state_name: Spain
                      first_name: Julio Francisco
                      last_name: Fores Sena
                      full_name: Julio Francisco Fores Sena
                      gender: M
                      address: >-
                        Brda. Urb. El Cardonal 0052 52 Po3 B,Taco,San Cristobal
                        De La Laguna,Santa Cruz De Tenerife
                      formatted_address: >-
                        Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de
                        Tenerife, Spain
                      place_of_birth: Valencia, Valencia
                      marital_status: UNKNOWN
                      nationality: ESP
                      extra_fields:
                        first_surname: Fores
                        second_surname: Sena
                      mrz:
                        surname: FORES SENA
                        name: JULIO FRANCISCO
                        country: ESP
                        nationality: ESP
                        birth_date: '800113'
                        expiry_date: '320331'
                        sex: M
                        document_type: ID
                        document_number: CBX164224
                        optional_data: 20446581H
                        optional_data_2: ''
                        birth_date_hash: '9'
                        expiry_date_hash: '8'
                        document_number_hash: '3'
                        final_hash: '3'
                        personal_number: 20446581H
                        warnings: []
                        errors: []
                        mrz_type: TD1
                        mrz_string: |-
                          IDESPCBX164224320446581H<<<<<<
                          8001139M3203318ESP<<<<<<<<<<<3
                          FORES<SENA<<JULIO<FRANCISCO<<<
                        mrz_key: CBX164224380011393203318
                      parsed_address:
                        street_1: Avenida el Cardonal 52
                        street_2: b
                        city: La Laguna
                        region: Canarias
                        country: ES
                        postal_code: '38108'
                        address_type: Avenida
                        formatted_address: >-
                          Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de
                          Tenerife, Spain
                        raw_results:
                          address_components:
                            - long_name: b
                              short_name: b
                              types:
                                - subpremise
                            - long_name: '52'
                              short_name: '52'
                              types:
                                - street_number
                            - long_name: Avenida el Cardonal
                              short_name: Av. el Cardonal
                              types:
                                - route
                            - long_name: La Laguna
                              short_name: La Laguna
                              types:
                                - locality
                                - political
                            - long_name: Spain
                              short_name: ES
                              types:
                                - country
                                - political
                            - long_name: '38108'
                              short_name: '38108'
                              types:
                                - postal_code
                          formatted_address: >-
                            Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz
                            de Tenerife, Spain
                          geometry:
                            location:
                              lat: 28.4501161
                              lng: -16.3004407
                            location_type: ROOFTOP
                          types:
                            - street_address
                            - subpremise
                        document_location:
                          latitude: 28.4501161
                          longitude: -16.3004407
                        label: Spain Identity Card Address
                        is_verified: true
                        category: Residential
                      warnings: []
                      barcodes: []
                    vendor_data: user-123
                    metadata:
                      flow: onboarding
                    created_at: '2026-06-12T02:21:56.013573+00:00'
                Declined - expired document:
                  summary: समय-सीमा समाप्त ID कार्ड का केवल सामने का अपलोड
                  value:
                    request_id: f61681b8-9422-4378-ac3e-04c6a247fb45
                    id_verification:
                      status: Declined
                      document_type: Identity Card
                      document_subtype: ID_CARD_GENERIC
                      document_number: BNK123072
                      personal_number: 21771255F
                      portrait_image: >-
                        https://<media-host>/ocr/f61681b8-9422-4378-ac3e-04c6a247fb45-portrait_image-1d9a.jpg?signature=...
                      front_image: >-
                        https://<media-host>/ocr/f61681b8-9422-4378-ac3e-04c6a247fb45-front_image-5c2b.jpg?signature=...
                      back_image: null
                      front_image_camera_front: null
                      back_image_camera_front: null
                      front_image_camera_front_face_match_score: null
                      back_image_camera_front_face_match_score: null
                      front_image_quality_score:
                        focus_score: 100
                        brightness_score: 95.7
                        brightness_issue: ok
                        is_document_fully_visible: true
                        resolution_score: 22.2
                        overall_score: 79.3
                      back_image_quality_score: null
                      date_of_birth: '1997-01-30'
                      age: 29
                      expiration_date: '2025-11-26'
                      date_of_issue: null
                      issuing_state: ESP
                      issuing_state_name: Spain
                      first_name: Lucia
                      last_name: Marin Castro
                      full_name: Lucia Marin Castro
                      gender: F
                      address: null
                      formatted_address: null
                      place_of_birth: null
                      marital_status: UNKNOWN
                      nationality: ESP
                      extra_fields:
                        first_surname: Marin
                        second_surname: Castro
                      mrz: {}
                      parsed_address: null
                      warnings:
                        - risk: DOCUMENT_EXPIRED
                          feature: ID_VERIFICATION
                          additional_data: null
                          log_type: error
                          short_description: Document expired
                          long_description: >-
                            The document's expiration date has passed, rendering
                            it no longer valid for use.
                      barcodes: []
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T02:25:48.117204+00:00'
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      `save_api_request=true` होने पर सहेजी गई सत्र ID (`GET
                      /v3/session/{sessionId}/decision/` के साथ उपयोग योग्य);
                      अन्यथा एक क्षणिक सहसंबंध UUID।
                  id_verification:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                          - In Review
                        description: >-
                          `Approved` जब कोई चेतावनी अस्वीकृति में नहीं बदलती है
                          और अनुरोधित दस्तावेज़-लाइवनेस जांच ने एक उपयोगी परिणाम
                          दिया है; `In Review` जब उस अनुरोधित जांच ने कोई उपयोगी
                          परिणाम नहीं दिया (`DOCUMENT_LIVENESS_NOT_COMPUTED`);
                          `Declined` जब कोई चेतावनी अस्वीकृति में बदल जाती है —
                          `warnings` सूची बताती है कि ऐसा क्यों है।
                      document_type:
                        type: string
                        nullable: true
                        description: >-
                          पहचाने गए दस्तावेज़ प्रकार का प्रदर्शित नाम: `Identity
                          Card`, `Passport`, `Driver's License`, `Residence
                          Permit`, `Health Insurance Card`, या `Tax Card`। जब
                          दस्तावेज़ को वर्गीकृत नहीं किया जा सका तो `null`।
                        example: Identity Card
                      document_subtype:
                        type: string
                        nullable: true
                        description: >-
                          उपलब्ध होने पर अधिक विस्तृत उपप्रकार (उदा.
                          `ID_CARD_GENERIC`, `EPASSPORT`)।
                        example: ID_CARD_GENERIC
                      document_number:
                        type: string
                        nullable: true
                        example: CBX164224
                      personal_number:
                        type: string
                        nullable: true
                        description: >-
                          कुछ दस्तावेज़ों पर मुद्रित द्वितीयक
                          व्यक्तिगत/राष्ट्रीय संख्या।
                        example: 20446581H
                      portrait_image:
                        type: string
                        nullable: true
                        description: >-
                          दस्तावेज़ से क्रॉप की गई पोर्ट्रेट फ़ोटो।
                          `save_api_request=true` (डिफ़ॉल्ट) होने पर एक
                          अल्पकालिक मीडिया URL (`https://<media-host>/ocr/...`);
                          `save_api_request=false` होने पर एक इनलाइन
                          base64-एन्कोडेड JPEG स्ट्रिंग। कोई पोर्ट्रेट न मिलने
                          पर `null`।
                      front_image:
                        type: string
                        nullable: true
                        description: >-
                          दस्तावेज़ के सामने वाले भाग का संरेखित क्रॉप। सहेजे
                          जाने पर मीडिया URL, अन्यथा इनलाइन base64 JPEG।
                      back_image:
                        type: string
                        nullable: true
                        description: >-
                          दस्तावेज़ के पिछले भाग का संरेखित क्रॉप। `null` जब कोई
                          `back_image` अपलोड नहीं किया गया था।
                      front_image_camera_front:
                        type: string
                        nullable: true
                        description: >-
                          इस endpoint पर हमेशा `null` (केवल कैमरा-कैप्चर सत्यापन
                          सत्रों में पॉप्युलेट होता है)।
                      back_image_camera_front:
                        type: string
                        nullable: true
                        description: इस endpoint पर हमेशा `null`।
                      front_image_camera_front_face_match_score:
                        type: number
                        nullable: true
                        description: इस endpoint पर हमेशा `null`।
                      back_image_camera_front_face_match_score:
                        type: number
                        nullable: true
                        description: इस endpoint पर हमेशा `null`।
                      front_image_quality_score:
                        type: object
                        nullable: true
                        description: >-
                          अपलोड की गई इमेज के लिए कैप्चर-गुणवत्ता डायग्नोस्टिक्स
                          (जब साइड प्रदान नहीं किया गया था या स्कोरिंग विफल रही
                          तो `null`)। सभी स्कोर 0–100 हैं।
                        properties:
                          focus_score:
                            type: number
                            format: float
                            description: >-
                              दस्तावेज़ क्रॉप का पैनापन (तीक्ष्णता) (अधिक मान
                              अधिक पैना दर्शाता है)।
                          brightness_score:
                            type: number
                            format: float
                            description: एक्सपोज़र गुणवत्ता (जितना अधिक हो उतना बेहतर)।
                          brightness_issue:
                            type: string
                            nullable: true
                            description: >-
                              जब एक्सपोज़र ठीक हो तब `ok`, अन्यथा पहचानी गई
                              समस्या (उदा. बहुत गहरा / बहुत चमकीला)।
                          is_document_fully_visible:
                            type: boolean
                            nullable: true
                            description: क्या दस्तावेज़ के चारों कोने फ़्रेम के अंदर हैं।
                          resolution_score:
                            type: number
                            format: float
                            description: दस्तावेज़ क्षेत्र का प्रभावी रिज़ॉल्यूशन।
                          overall_score:
                            type: number
                            format: float
                            description: समग्र गुणवत्ता स्कोर।
                      back_image_quality_score:
                        type: object
                        nullable: true
                        description: >-
                          अपलोड की गई इमेज के लिए कैप्चर-गुणवत्ता डायग्नोस्टिक्स
                          (जब साइड प्रदान नहीं किया गया था या स्कोरिंग विफल रही
                          तो `null`)। सभी स्कोर 0–100 हैं।
                        properties:
                          focus_score:
                            type: number
                            format: float
                            description: >-
                              दस्तावेज़ क्रॉप का पैनापन (तीक्ष्णता) (अधिक मान
                              अधिक पैना दर्शाता है)।
                          brightness_score:
                            type: number
                            format: float
                            description: एक्सपोज़र गुणवत्ता (जितना अधिक हो उतना बेहतर)।
                          brightness_issue:
                            type: string
                            nullable: true
                            description: >-
                              जब एक्सपोज़र ठीक हो तब `ok`, अन्यथा पहचानी गई
                              समस्या (उदा. बहुत गहरा / बहुत चमकीला)।
                          is_document_fully_visible:
                            type: boolean
                            nullable: true
                            description: क्या दस्तावेज़ के चारों कोने फ़्रेम के अंदर हैं।
                          resolution_score:
                            type: number
                            format: float
                            description: दस्तावेज़ क्षेत्र का प्रभावी रिज़ॉल्यूशन।
                          overall_score:
                            type: number
                            format: float
                            description: समग्र गुणवत्ता स्कोर।
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                        example: '1980-01-13'
                      age:
                        type: integer
                        nullable: true
                        description: >-
                          धारक की आयु वर्षों में, जिसकी गणना `date_of_birth` से
                          की गई है।
                        example: 46
                      expiration_date:
                        type: string
                        format: date
                        nullable: true
                        example: '2032-03-31'
                      date_of_issue:
                        type: string
                        format: date
                        nullable: true
                        example: '2022-03-31'
                      issuing_state:
                        type: string
                        nullable: true
                        description: जारीकर्ता देश (ISO 3166-1 alpha-3)।
                        example: ESP
                      issuing_state_name:
                        type: string
                        nullable: true
                        example: Spain
                      first_name:
                        type: string
                        nullable: true
                        example: Julio Francisco
                      last_name:
                        type: string
                        nullable: true
                        example: Fores Sena
                      full_name:
                        type: string
                        nullable: true
                        example: Julio Francisco Fores Sena
                      gender:
                        type: string
                        nullable: true
                        description: प्रिंट/डिटेक्ट न होने पर `M`, `F`, या `null`।
                        example: M
                      address:
                        type: string
                        nullable: true
                        description: दस्तावेज़ पर ठीक वैसा ही मुद्रित पता।
                      formatted_address:
                        type: string
                        nullable: true
                        description: '`address` का जियोकोडेड, सामान्यीकृत संस्करण।'
                      place_of_birth:
                        type: string
                        nullable: true
                        example: Valencia, Valencia
                      marital_status:
                        type: string
                        nullable: true
                        description: >-
                          `UNKNOWN`, जब तक कि दस्तावेज़ पर वैवाहिक स्थिति
                          मुद्रित न हो।
                        example: UNKNOWN
                      nationality:
                        type: string
                        nullable: true
                        description: धारक की राष्ट्रीयता (ISO 3166-1 alpha-3)।
                        example: ESP
                      extra_fields:
                        type: object
                        nullable: true
                        additionalProperties: true
                        description: >-
                          दस्तावेज़-विशिष्ट अतिरिक्त विवरण जिनका कोई समर्पित
                          कॉलम नहीं है (उदाहरण के लिए स्पैनिश ID पर
                          `first_surname`/`second_surname`, ड्राइविंग लाइसेंस पर
                          लाइसेंस श्रेणियाँ)।
                      mrz:
                        type: object
                        description: >-
                          पार्स किया गया मशीन-रीडेबल ज़ोन। जब दस्तावेज़ में कोई
                          MRZ न हो या उसे पढ़ा न जा सके, तो एक **रिक्त
                          ऑब्जेक्ट** (`{}`) — उस स्थिति में `warnings` सूची भी
                          देखें। MRZ के अंदर की तिथियाँ रॉ `YYMMDD` फ़ॉर्मेट का
                          उपयोग करती हैं।
                        properties:
                          surname:
                            type: string
                            example: FORES SENA
                          name:
                            type: string
                            example: JULIO FRANCISCO
                          country:
                            type: string
                            description: जारीकर्ता देश (ISO 3166-1 alpha-3)।
                            example: ESP
                          nationality:
                            type: string
                            description: धारक की राष्ट्रीयता (ISO 3166-1 alpha-3)।
                            example: ESP
                          birth_date:
                            type: string
                            description: MRZ से प्राप्त रॉ जन्म तिथि (`YYMMDD`)।
                            example: '800113'
                          expiry_date:
                            type: string
                            description: MRZ से प्राप्त रॉ समाप्ति तिथि (`YYMMDD`)।
                            example: '320331'
                          sex:
                            type: string
                            example: M
                          document_type:
                            type: string
                            description: MRZ दस्तावेज़-प्रकार कोड (उदा. `ID`, `P`)।
                            example: ID
                          document_number:
                            type: string
                            example: CBX164224
                          optional_data:
                            type: string
                            nullable: true
                            example: 20446581H
                          optional_data_2:
                            type: string
                            nullable: true
                            example: ''
                          birth_date_hash:
                            type: string
                            description: जन्म तिथि के लिए MRZ चेक डिजिट।
                            example: '9'
                          expiry_date_hash:
                            type: string
                            description: समाप्ति तिथि के लिए MRZ चेक डिजिट।
                            example: '8'
                          document_number_hash:
                            type: string
                            description: दस्तावेज़ संख्या के लिए MRZ चेक डिजिट।
                            example: '3'
                          final_hash:
                            type: string
                            description: कंपोजिट MRZ चेक डिजिट।
                            example: '3'
                          personal_number:
                            type: string
                            nullable: true
                            example: 20446581H
                          warnings:
                            type: array
                            items:
                              type: string
                            description: गैर-घातक MRZ पार्सिंग चेतावनियाँ।
                          errors:
                            type: array
                            items:
                              type: string
                            description: >-
                              MRZ चेक-डिजिट/पार्सिंग त्रुटियाँ। गैर-रिक्त
                              त्रुटियाँ `MRZ_VALIDATION_FAILED` चेतावनी के रूप
                              में सामने आती हैं।
                          mrz_type:
                            type: string
                            description: >-
                              MRZ लेआउट: `TD1` (पहचान पत्र, 3 पंक्तियाँ), `TD2`,
                              या `TD3` (पासपोर्ट, 2 पंक्तियाँ)।
                            example: TD1
                          mrz_string:
                            type: string
                            description: >-
                              पढ़ा गया रॉ MRZ टेक्स्ट, `\n` द्वारा अलग की गई
                              पंक्तियाँ।
                          mrz_key:
                            type: string
                            description: >-
                              क्रॉस-चेक के लिए उपयोग की जाने वाली कंपोजिट कुंजी
                              (दस्तावेज़ संख्या + चेक डिजिट)।
                      parsed_address:
                        type: object
                        nullable: true
                        description: >-
                          `address` का संरचित, जियोकोडेड ब्रेकडाउन। जब दस्तावेज़
                          में कोई पता नहीं होता है या इसे पार्स नहीं किया जा
                          सका, तब `null`।
                        properties:
                          street_1:
                            type: string
                            nullable: true
                            example: Avenida el Cardonal 52
                          street_2:
                            type: string
                            nullable: true
                            example: b
                          city:
                            type: string
                            nullable: true
                            example: La Laguna
                          region:
                            type: string
                            nullable: true
                            example: Canarias
                          country:
                            type: string
                            nullable: true
                            description: ISO 3166-1 alpha-2 देश कोड।
                            example: ES
                          postal_code:
                            type: string
                            nullable: true
                            example: '38108'
                          address_type:
                            type: string
                            nullable: true
                            example: Avenida
                          formatted_address:
                            type: string
                            nullable: true
                            description: कैनोनिकल जियोकोडेड पता स्ट्रिंग।
                            example: >-
                              Av. el Cardonal, 52, b, 38108 La Laguna, Santa
                              Cruz de Tenerife, Spain
                          raw_results:
                            type: object
                            additionalProperties: true
                            description: >-
                              उन्नत उपभोक्ताओं के लिए रॉ जियोकोडिंग payload
                              (`address_components`, `geometry.location`,
                              `place_id`, …)।
                          document_location:
                            type: object
                            nullable: true
                            properties:
                              latitude:
                                type: number
                              longitude:
                                type: number
                            description: दस्तावेज़ के पते के जियोकोडेड निर्देशांक।
                          label:
                            type: string
                            nullable: true
                            description: पता किस दस्तावेज़ फ़ील्ड से पढ़ा गया था।
                            example: Spain Identity Card Address
                          is_verified:
                            type: boolean
                            description: क्या जियोकोडिंग ने पुष्टि की कि पता मौजूद है।
                          category:
                            type: string
                            nullable: true
                            description: पते की श्रेणी (उदा. `Residential`, `Commercial`)।
                            example: Residential
                      warnings:
                        type: array
                        description: >-
                          बिना किसी जोखिम वाली स्वीकृति पर खाली। प्रत्येक
                          प्रविष्टि एक पहचाने गए जोखिम की व्याख्या करती है;
                          `log_type: "error"` वाली प्रविष्टियाँ `status` को
                          `Declined` पर सेट करती हैं, और
                          `DOCUMENT_LIVENESS_NOT_COMPUTED` (`log_type:
                          "warning"`) इसे `In Review` पर सेट करता है।
                        items:
                          type: object
                          properties:
                            risk:
                              type: string
                              description: >-
                                मशीन-पठनीय जोखिम कोड। हमेशा अस्वीकार किए जाने
                                वाले जोखिम: `DOCUMENT_EXPIRED`,
                                `MINIMUM_AGE_NOT_MET`,
                                `PORTRAIT_IMAGE_NOT_DETECTED`,
                                `SCREEN_CAPTURE_DETECTED`,
                                `PRINTED_COPY_DETECTED`,
                                `PORTRAIT_MANIPULATION_DETECTED`,
                                `PUBLIC_DOCUMENT_IMAGE_DETECTED`,
                                `INVALID_DATE`, `COULD_NOT_RECOGNIZE_DOCUMENT`
                                (केवल 400, कभी चेतावनी नहीं),
                                `DOCUMENT_NUMBER_NOT_DETECTED`,
                                `COULD_NOT_DETECT_DOCUMENT_TYPE`,
                                `NAME_NOT_DETECTED`,
                                `DATE_OF_BIRTH_NOT_DETECTED`। अनुरोध विकल्पों
                                द्वारा नियंत्रित: `MRZ_NOT_DETECTED` /
                                `MRZ_VALIDATION_FAILED` (`invalid_mrz_action`),
                                `DATA_INCONSISTENT` /
                                `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` /
                                `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`
                                (`inconsistent_data_action`),
                                `EXPIRATION_DATE_NOT_DETECTED`
                                (`expiration_date_not_detected_action`)। अन्य
                                जोखिम (उदा. `POSSIBLE_DUPLICATED_USER`)
                                सूचनात्मक हैं। `DOCUMENT_LIVENESS_NOT_COMPUTED`
                                तब उत्पन्न होता है जब
                                `perform_document_liveness=true` हो लेकिन
                                जालसाज़ी जांच से कोई उपयोगी स्कोर न मिला हो; यह
                                `status` को `In Review` पर सेट करता है।
                                `COULD_NOT_DETECT_DOCUMENT_TYPE` तब भी लौटाया
                                जाता है जब दस्तावेज़ का अग्र भाग उच्च विश्वास के
                                साथ किसी ज्ञात आधिकारिक दस्तावेज़ डिज़ाइन से मेल
                                नहीं खाता, उदाहरण के लिए कोई संपादित या कंप्यूटर
                                जनित दस्तावेज़, या ऐसा डिज़ाइन जो अभी समर्थित
                                नहीं है।
                              example: DOCUMENT_EXPIRED
                            feature:
                              type: string
                              enum:
                                - ID_VERIFICATION
                              description: >-
                                सुविधा जिसने चेतावनी उत्पन्न की। इस endpoint पर
                                हमेशा `ID_VERIFICATION`।
                            additional_data:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                कुछ जोखिमों के लिए अतिरिक्त संदर्भ (उदा.
                                `POSSIBLE_DUPLICATED_USER` में
                                `duplicated_session_id` शामिल है); अधिकांश के
                                लिए `null`।
                            log_type:
                              type: string
                              enum:
                                - error
                                - warning
                                - information
                              description: >-
                                गंभीरता। `error` चेतावनियाँ `status` को
                                `Declined` में बदल देती हैं; `warning` (केवल
                                `DOCUMENT_LIVENESS_NOT_COMPUTED`, जब अनुरोधित
                                जालसाजी जाँच से कोई उपयोगी स्कोर नहीं मिला)
                                `status` को `In Review` में बदल देती है;
                                `information` प्रविष्टियाँ केवल सलाहकारी होती
                                हैं और स्थिति को कभी नहीं बदलती हैं।
                            short_description:
                              type: string
                              description: जोखिम का मानव-पठनीय एक पंक्ति का सारांश।
                            long_description:
                              type: string
                              description: जोखिम का मानव-पठनीय स्पष्टीकरण।
                      barcodes:
                        type: array
                        description: >-
                          दस्तावेज़ से डिकोड किए गए बारकोड (PDF417, QR, …)। जब
                          दस्तावेज़ में कोई नहीं होता है या कोई भी पढ़ा नहीं जा
                          सकता है, तो खाली होता है।
                        items:
                          type: object
                          properties:
                            type:
                              type: string
                              description: >-
                                बारकोड प्रकार (उदा. `PDF417`, `QR_CODE`,
                                `UNKNOWN`)।
                            position:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: छवि में बारकोड का स्थान, जब उपलब्ध हो।
                            data:
                              type: string
                              description: डिकोड किया गया payload।
                            data_raw:
                              type: string
                              description: रॉ (डिकोड न किया गया) payload, जब भिन्न हो।
                            side:
                              type: string
                              nullable: true
                              description: '`front` या `back`।'
                  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)।
        '400':
          description: >-
            सत्यापन या प्रोसेसिंग त्रुटि। फ़ील्ड-स्तरीय समस्याएं DRF का मानक
            एनवेलप (प्रत्येक समस्याग्रस्त फ़ील्ड के लिए संदेशों का एक एरे)
            लौटाती हैं। एन्क्रिप्टेड-PDF समस्याएं `{"detail": ...}` लौटाती हैं।
            ऐसी दस्तावेज़ इमेज जिसमें किसी दस्तावेज़ की बिल्कुल भी पहचान नहीं की
            जा सकती है, वह `{"error": "COULD_NOT_RECOGNIZE_DOCUMENT"}` लौटाती
            है। PDF अपलोड अतिरिक्त रूप से "The submitted PDF file is corrupted
            or invalid." या बिना किसी पेज वाली त्रुटि के साथ विफल हो सकते हैं।
          content:
            application/json:
              examples:
                Missing front image:
                  summary: फ़ॉर्म डेटा में `front_image` शामिल नहीं है
                  value:
                    front_image:
                      - No file was submitted.
                Unsupported file extension:
                  summary: फ़ाइल एक्सटेंशन tiff/jpg/jpeg/png/webp/pdf से बाहर है
                  value:
                    front_image:
                      - >-
                        File extension “txt” is not allowed. Allowed extensions
                        are: tiff, jpg, jpeg, png, webp, pdf.
                File too large:
                  summary: अपलोड 10 MB की सीमा से अधिक है
                  value:
                    front_image:
                      - File size should not exceed 10 MB
                Invalid option value:
                  summary: विकल्प केवल DECLINE या NO_ACTION स्वीकार करते हैं
                  value:
                    invalid_mrz_action:
                      - '"REVIEW" is not a valid choice.'
                Encrypted PDF:
                  summary: आवश्यक पासवर्ड के बिना PDF अपलोड की गई
                  value:
                    detail: >-
                      The PDF is encrypted. Please upload a decrypted PDF or a
                      photo instead.
                Wrong PDF password:
                  summary: >-
                    `front_image_password` / `back_image_password` PDF को
                    डिक्रिप्ट नहीं करता है
                  value:
                    detail: >-
                      The PDF password is incorrect. Please provide the correct
                      password.
                Document not recognized:
                  summary: छवि में किसी पहचान दस्तावेज़ का पता नहीं लगाया जा सका
                  value:
                    error: COULD_NOT_RECOGNIZE_DOCUMENT
                PDF conversion failure:
                  summary: अपलोड की गई PDF को छवि में परिवर्तित नहीं किया जा सका
                  value:
                    error: Failed to convert front image PDF.
        '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
        '503':
          $ref: '#/components/responses/DocumentProcessingBusy'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl -X POST 'https://verification.didit.me/v3/id-verification/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'front_image=@./id_front.jpg' \
              -F 'back_image=@./id_back.jpg' \
              -F 'perform_document_liveness=true' \
              -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.id_verification.verify(
                front_image=open("front_image.jpg", "rb"),
                back_image=open("back_image.jpg", "rb"),
                perform_document_liveness=True,
                save_api_request=True,
                vendor_data="user-123",
                metadata={"flow": "onboarding"},
            )
            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.idVerification.verify({
              front_image: await fileFromPath("front_image.jpg"),
              back_image: await fileFromPath("back_image.jpg"),
              perform_document_liveness: true,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "onboarding" },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDVerification.Verify(ctx, didit.IDVerificationVerifyParams{\n\tFrontImage:              didit.FileFromPath(\"front_image.jpg\"),\n\tBackImage:               didit.Some(didit.FileFromPath(\"back_image.jpg\")),\n\tPerformDocumentLiveness: didit.Bool(true),\n\tSaveAPIRequest:          didit.Bool(true),\n\tVendorData:              didit.String(\"user-123\"),\n\tMetadata:                didit.Some(map[string]any{\"flow\": \"onboarding\"}),\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.IdVerificationVerifyParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.idVerification().verify(IdVerificationVerifyParams.builder()
                    .frontImage(Path.of("front_image.jpg"))
                    .backImage(Path.of("back_image.jpg"))
                    .performDocumentLiveness(true)
                    .saveApiRequest(true)
                    .vendorData("user-123")
                    .metadata(Map.of("flow", "onboarding"))
                    .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->idVerification->verify([
                'front_image' => File::fromPath('front_image.jpg'),
                'back_image' => File::fromPath('back_image.jpg'),
                'perform_document_liveness' => true,
                'save_api_request' => true,
                'vendor_data' => 'user-123',
                'metadata' => ['flow' => 'onboarding'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.id_verification.verify(
              front_image: Pathname("front_image.jpg"),
              back_image: Pathname("back_image.jpg"),
              perform_document_liveness: true,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "onboarding" }
            )
            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.IdVerification.VerifyAsync(new
            IdVerificationVerifyParams

            {
                FrontImage = FileUpload.FromPath("front_image.jpg"),
                BackImage = FileUpload.FromPath("back_image.jpg"),
                PerformDocumentLiveness = true,
                SaveApiRequest = true,
                VendorData = "user-123",
                Metadata = new Dictionary<string, object> { ["flow"] = "onboarding" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  responses:
    DocumentProcessingBusy:
      description: >-
        वर्तमान में बहुत सारे दस्तावेज़ प्रोसेस किए जा रहे हैं, इसलिए यह अपलोड
        प्रोसेस नहीं हुआ: कुछ भी संग्रहीत नहीं किया गया और किसी भी प्रयास का
        उपयोग नहीं किया गया। `Retry-After` में दिए गए सेकंड की संख्या के बाद वही
        फ़ाइल दोबारा भेजें। `code` के आधार पर शाखा चुनें, संदेश टेक्स्ट के आधार
        पर नहीं।
      headers:
        Retry-After:
          description: समान अनुरोध दोबारा भेजने से पहले प्रतीक्षा करने की अवधि (सेकंड में)।
          schema:
            type: integer
            example: 10
      content:
        application/json:
          schema:
            type: object
            required:
              - detail
              - code
            properties:
              detail:
                type: string
              code:
                type: string
                enum:
                  - document_processing_busy
          example:
            detail: We are busy processing documents. Please try again in a moment.
            code: document_processing_busy
  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.