> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# स्टेप-अप सत्यापन बनाएँ | Didit Authentication API

> Didit में POST /step-up/ संवेदनशील कार्रवाई से पहले आपके स्टेप-अप नियम लागू करता है और required false, या व्यक्ति के लिए सत्यापन URL लौटाता है।

> [!WARNING]
>
> प्रमाणीकरण नया है। ये एंडपॉइंट आपके एप्लिकेशन के जारीकर्ता द्वारा उपलब्ध कराए जाते हैं, जैसे `https://<name>.auth.didit.me`, और ये कभी आपकी Didit API कुंजी स्वीकार नहीं करते।

आपके `return_to` पर मौजूद `step_up` और `status` क्वेरी पैरामीटर केवल आपके एप्लिकेशन को जाँच करने का संकेत देते हैं। कोई कार्रवाई करने से पहले, [स्टेप-अप प्राप्त करें](https://docs.didit.me/hi/authentication/api-reference/retrieve-step-up.md) से स्टेप-अप की जानकारी प्राप्त करें और तभी आगे बढ़ें जब `status` `approved` हो।


## OpenAPI

````yaml hi/openapi-authentication.json POST /step-up/
openapi: 3.0.3
info:
  title: Didit Authentication API
  version: 1.0.0
  description: >-
    Didit Authentication के सर्वर-फेसिंग endpoints, जो आपके एप्लिकेशन के अंतिम
    उपयोगकर्ताओं के लिए साइन-इन उत्पाद है। Authentication **नया** है और
    2026-11-01 रिलीज़ में प्रोडक्शन में पहुँचेगा।


    ## बेस URL


    प्रत्येक एप्लिकेशन अपना स्वयं का OpenID Connect issuer होता है, और नीचे दिया
    गया प्रत्येक endpoint उस issuer के रूट पर सर्व किया जाता है:


    - लाइव एप्लिकेशन के लिए `https://<name>.auth.didit.me`, या सैंडबॉक्स
    एप्लिकेशन के लिए `https://<name>.sandbox.auth.didit.me`।

    - आपका अपना कस्टम डोमेन, एक बार सक्रिय हो जाने के बाद। यह फिर डिफ़ॉल्ट होस्ट
    को issuer के रूप में बदल देता है: नए tokens इसे `iss` में नामित करते हैं,
    डिस्कवरी इसकी ओर इंगित करती है और पब्लिश करने योग्य कुंजी बदल जाती है।
    डिफ़ॉल्ट होस्ट के तहत जारी किए गए एक्सेस tokens रीफ़्रेश होने तक
    `/session/`, `/step-up/` और `/monitoring-token/` पर विफल हो जाते हैं।


    लाइव और सैंडबॉक्स अलग-अलग एप्लिकेशन हैं, इसलिए वे अलग-अलग कुंजियों वाले
    अलग-अलग issuers हैं। पब्लिश करने योग्य कुंजी `pk_live_` (लाइव) या `pk_test_`
    (सैंडबॉक्स) होती है, जिसके बाद बिना किसी ट्रेलिंग स्लैश के issuer का अनपैडेड
    base64url एन्कोडिंग होता है: issuer खोजने के लिए इसे डिकोड करें। यह एक
    सार्वजनिक पहचानकर्ता है, कोई क्रेडेंशियल नहीं।


    वही JSON endpoints
    `https://apx.didit.me/auth/v2/authentication/{application_id}/` के अंतर्गत
    भी सर्व किए जाते हैं। Tokens हमेशा उपरोक्त issuer का नाम देते हैं, चाहे
    उन्हें किसी भी पते ने जारी किया हो।


    ## क्रेडेंशियल्स


    ये endpoints कभी भी आपकी Didit API कुंजी या कंसोल token स्वीकार नहीं करते
    हैं।


    - डिस्कवरी, JWKS और `POST /token/` कोई क्रेडेंशियल नहीं लेते हैं। क्लाइंट
    सार्वजनिक होते हैं: कोई client secret नहीं होता है, और एक ऑथराइजेशन कोड अपने
    PKCE सत्यापनकर्ता (`S256`) से बंधा होता है। `client_id` आपकी एप्लिकेशन ID
    है।

    - `/session/`, `/step-up/` और `/monitoring-token/` व्यक्ति का एक्सेस token
    लेते हैं: `Authorization: Bearer <access_token>`। प्रत्येक सफल कॉल को सत्र
    पर गतिविधि माना जाता है, इसलिए यह सत्र के निष्क्रिय टाइमआउट को पुनः आरंभ
    करता है।


    ## अनुरोध बॉडी


    बॉडी स्वीकार करने वाला प्रत्येक endpoint JSON, फ़ॉर्म-एन्कोडेड और मल्टीपार्ट
    बॉडी स्वीकार करता है। यह दस्तावेज़ JSON को सूचीबद्ध करता है, साथ ही `POST
    /token/` के लिए फ़ॉर्म-एन्कोडेड बॉडी को भी, जैसा कि OAuth क्लाइंट भेजते हैं।
    जो फ़ील्ड endpoint स्वीकार नहीं करता है, उस पर `400 {"<field>":
    "unknown_field"}` मिलता है।


    ## Tokens


    - **Access token**: हेडर `typ: at+jwt` वाला एक ES256 JWT, जो अधिकतम 5 मिनट
    के लिए और कभी भी अपने सत्र से अधिक समय के लिए मान्य नहीं होता है। Claims:
    `AccessTokenClaims`।

    - **ID token**: हेडर `typ: JWT` वाला एक ES256 JWT। Claims: `IDTokenClaims`।
    इसे कभी भी एक्सेस token के रूप में स्वीकार नहीं किया जाता है।

    - **Refresh token**: एक रैंडम स्ट्रिंग जो प्रत्येक उपयोग पर रोटेट होती है।
    पहले से उपयोग किया गया रीफ़्रेश token दोबारा भेजने से सत्र रद्द हो जाता है।


    `GET /.well-known/jwks.json` से प्राप्त कुंजियों के साथ किसी token को
    सत्यापित करें: एल्गोरिदम `ES256` होना चाहिए, `typ` को token प्रकार से मेल
    खाना चाहिए, `iss` आपके द्वारा कॉन्फ़िगर किए गए issuer के बराबर होना चाहिए और
    `aud` आपकी एप्लिकेशन ID होनी चाहिए। ऑफ़लाइन सत्यापन किसी रद्द किए गए सत्र को
    केवल तभी देखता है जब उसका एक्सेस token समाप्त हो जाता है; `GET /session/`
    इसका त्वरित चेक है।


    ## त्रुटियाँ


    | बॉडी | कब |

    | --- | --- |

    | `{"error": "<code>"}` | `POST /token/` से त्रुटियाँ, सभी स्टेटस `400` के
    साथ, [RFC 6749 section
    5.2](https://www.rfc-editor.org/rfc/rfc6749#section-5.2) के बॉडी प्रारूप
    में: `invalid_grant`, `invalid_client` और Didit का `mfa_required`। सर्विस
    त्रुटियाँ: `temporarily_unavailable`, `monitoring_unavailable`,
    `monitoring_disabled`। |

    | `{"<field>": ["<message>"]}` या `{"<field>": "<code>"}` | एक अनुरोध फ़ील्ड
    सत्यापन में विफल रहा। `non_field_errors` सभी फ़ील्ड्स में लागू नियम को इंगित
    करता है, और `unknown_field` उस फ़ील्ड को जिसे endpoint स्वीकार नहीं करता है।
    |

    | `{"detail": "<message>"}` | `401` (`invalid_token`), `403`
    (`origin_not_allowed`), `404` (अज्ञात एप्लिकेशन या step-up) और `429` (रेट
    लिमिट)। साथ ही पार्स न की जा सकने वाली बॉडी के लिए `400` (`JSON parse error
    - ...`), endpoint द्वारा समर्थित न होने वाले मेथड के लिए `405` और असमर्थित
    `Content-Type` के लिए `415`। |


    `401` में `WWW-Authenticate: Bearer` भी शामिल होता है, और `429` में सेकंड
    में `Retry-After` शामिल होता है।


    दो अस्वीकृतियाँ JSON नहीं हैं। जो पता issuer नहीं है, उसे इन endpoints तक
    पहुँचने से पहले ही अस्वीकार कर दिया जाता है, उदाहरण के लिए किसी अप्रयुक्त
    `*.auth.didit.me` नाम के लिए रिक्त `404` के साथ। एक `step_up_id` जो UUID
    नहीं है, उसे एक `404` पेज मिलता है।


    ## रेट लिमिट


    एक अनुरोध को दो लेयर्स को पार करना होता है।


    **Endpoint सीमाएँ**, प्रति क्लाइंट IP पता, प्रति एप्लिकेशन और प्रति endpoint
    गिनी जाती हैं:


    - डिस्कवरी और JWKS: 1,200 अनुरोध प्रति मिनट और 12,000 प्रति घंटा।

    - अन्य प्रत्येक endpoint: 30 अनुरोध प्रति मिनट और 300 प्रति घंटा। `GET` और
    `DELETE /session/` एक ही गणना साझा करते हैं।


    सीमा पार होने पर: `429 {"detail": "Too many requests from this IP address.
    Please wait before trying again. Expected available in 60 seconds."}`, या
    प्रति घंटा सीमा के लिए `3600 seconds`।


    **बॉट सुरक्षा**, प्रत्येक `POST` और `DELETE` पर। इसके बकेट एप्लिकेशन के सभी
    `POST` और `DELETE` अनुरोधों द्वारा साझा किए जाते हैं, जिसमें होस्ट किए गए
    साइन-इन चरण भी शामिल हैं, और यह लगातार रिफिल होते हैं:


    - 60 अनुरोध प्रति मिनट प्रति क्लाइंट IP पता।

    - 30 अनुरोध प्रति मिनट प्रति डिवाइस, उन अनुरोधों के लिए जो अपने डिवाइस की
    पहचान करते हैं, जैसा कि ब्राउज़र और नेटिव SDK करते हैं।

    - पूरे एप्लिकेशन के लिए 3,000 अनुरोध प्रति मिनट, प्रत्येक IP पते पर। Token
    रीफ़्रेश (`POST /token/` साथ में `grant_type=refresh_token`) इसके बजाय अपने
    स्वयं के बकेट का उपयोग करते हैं: पूरे एप्लिकेशन के लिए 6,000 प्रति मिनट।


    बकेट की सीमा पार होने पर: `429 {"detail": "rate_limited Expected available
    in N seconds."}` (N के 1 होने पर `1 second.`)। प्रति-IP बकेट सभी endpoints
    में फैला होता है, इसलिए एक पता जो token, step-up और साइन-आउट कॉल को मिलाता
    है, वह किसी भी endpoint सीमा तक पहुँचने से पहले ही इसे खाली कर सकता है।
    एप्लिकेशन बकेट एप्लिकेशन के प्रत्येक क्लाइंट की गणना करता है, जिसमें
    ब्राउज़र भी शामिल हैं।


    दोनों लेयर्स endpoint के चलने से पहले उत्तर देती हैं, इसलिए जिस अनुरोध को
    `429` मिला वह निष्पादित नहीं हुआ: `Retry-After` के बाद पुनः प्रयास करें,
    जिसमें रीफ़्रेश भी शामिल है।


    ## ब्राउज़र अनुरोध


    एक अनुरोध जिसमें `Origin` हेडर होता है, उसे एप्लिकेशन के अपने मूल या इसके
    अनुमत मूल में से किसी एक से आना चाहिए, अन्यथा इसे `403 origin_not_allowed`
    प्राप्त होता है। सर्वर-टू-सर्वर अनुरोध कोई `Origin` नहीं भेजते हैं।


    ## यहाँ क्या शामिल नहीं है


    ये रूट होस्टेड पेज, ब्राउज़र और नेटिव SDK और AI एजेंटों को सर्व करते हैं। वे
    सर्वर अनुबंध का हिस्सा नहीं हैं, और सर्वर SDK उन्हें कॉल नहीं करते हैं:


    - साइन-इन चरण: `POST /authorize/`, `POST /password/`, `/email/*`,
    `/phone/*`, `/password-reset/*`, `/passkeys/*`, `/mfa/*`, `/social/*` और
    `/protection/complete/`।

    - होस्टेड पेज और कॉलबैक: `/sign-in`, `/magic`, `/invite`, `/reset`,
    `/verify/`, `/sso/*`, `/wallet/callback/`, `/logo/` और `/.well-known/` के
    अंतर्गत नेटिव ऐप एसोसिएशन फ़ाइलें।

    - एजेंट एक्सेस: `/agents/*` और `/grants/`, जिसमें `GET /agents/session/`
    शामिल है, जो किसी AI एजेंट के एक्सेस token के लिए लाइव चेक है। एजेंट एक्सेस
    अनुबंध के इस संस्करण का हिस्सा नहीं है।

    - Authentication के लिए कंसोल प्रबंधन API, जो कंसोल सत्र लेता है।


    Authentication इवेंट्स अभी webhook के रूप में डिलीवर नहीं किए जाते हैं,
    इसलिए यह दस्तावेज़ किसी webhook को परिभाषित नहीं करता है।
servers:
  - url: https://{issuer}
    description: 'आपकी एप्लिकेशन का जारीकर्ता: इसका साइन-इन मूल।'
    variables:
      issuer:
        default: your-app.auth.didit.me
        description: >-
          जारीकर्ता का होस्ट: `<name>.auth.didit.me` (लाइव),
          `<name>.sandbox.auth.didit.me` (सैंडबॉक्स) या आपका सक्रिय कस्टम डोमेन।
security: []
tags:
  - name: Issuer
    description: टोकन सत्यापित करने के लिए डिस्कवरी और साइनिंग कीज़।
  - name: Tokens
    description: प्राधिकरण कोड और रीफ़्रेश ग्रांट।
  - name: Sessions
    description: एक्सेस token के पीछे के सत्र की जांच करें और उसे समाप्त करें।
  - name: Step-ups
    description: किसी संवेदनशील कार्रवाई से पहले सत्यापन।
  - name: Monitoring
    description: लेन-देन निगरानी इवेंट के लिए डिवाइस क्रेडेंशियल्स।
paths:
  /step-up/:
    post:
      tags:
        - Step-ups
      summary: एक स्टेप-अप बनाएँ
      description: >-
        एप्लिकेशन के लिए आपके द्वारा सेट किए गए स्टेप-अप नियमों का उपयोग करके
        पूछता है कि क्या संवेदनशील कार्रवाई से पहले व्यक्ति को सत्यापित करना
        होगा।


        - `200 {"required": false}`: कोई नियम लागू नहीं होता, आगे बढ़ें।

        - `201`: व्यक्ति को `verification_url` पर भेजें। वे
        `step_up=<id>&status=approved` के साथ `return_to` पर वापस आते हैं, लेकिन
        वह क्वेरी कुछ भी साबित नहीं करती: `GET /step-up/{step_up_id}/` के साथ
        स्टेप-अप पढ़ें और केवल `approved` पर कार्रवाई करें।


        स्टेप-अप कभी भी फ़ेल-ओपन नहीं होता: सत्यापन अनुपलब्ध होने पर, कार्रवाई
        ब्लॉक रहती है।
      operationId: authentication_create_step_up
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StepUpRequest'
            examples:
              Payout:
                summary: पेआउट से पहले
                value:
                  action: payout
                  amount: '900.00'
                  currency: USD
                  return_to: https://app.example.com/payouts/confirm
              Bank:
                summary: बैंक खाता बदलने से पहले
                value:
                  action: bank
                  return_to: https://app.example.com/settings/bank
      responses:
        '200':
          description: कोई नियम लागू नहीं होता।
          headers:
            Cache-Control:
              description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
              schema:
                type: string
                example: no-store
            Pragma:
              description: हमेशा `no-cache`।
              schema:
                type: string
                example: no-cache
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StepUpNotRequired'
              examples:
                NotRequired:
                  summary: आगे बढ़ें
                  value:
                    required: false
        '201':
          description: व्यक्ति को पहले सत्यापित करना होगा।
          headers:
            Cache-Control:
              description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
              schema:
                type: string
                example: no-store
            Pragma:
              description: हमेशा `no-cache`।
              schema:
                type: string
                example: no-cache
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StepUpRequired'
              examples:
                Required:
                  summary: भुगतान से पहले एक सेल्फ़ी
                  value:
                    id: 94efc2c3-ca84-42fe-900b-6fb61669a7a1
                    rule: payout
                    method: selfie
                    status: pending
                    level: null
                    amount: '900.00'
                    currency: USD
                    created_at: '2026-10-17T10:41:14.894632Z'
                    completed_at: null
                    expires_at: '2026-10-17T11:11:14.894581Z'
                    required: true
                    verification_url: >-
                      https://your-app.auth.didit.me/verify/?verification=1nSX7HJCXAP9XPA9AeJfQxIuPk2GkG0dGSOzCA2Zpww
                    expires_in: 1800
        '400':
          description: >-
            एक फ़ील्ड अनुपलब्ध या अमान्य है। `return_to: invalid_redirect_uri`
            का अर्थ है कि एक नियम लागू होता है और `return_to` एप्लिकेशन के
            रीडायरेक्ट URI में से एक नहीं है।
          headers:
            Cache-Control:
              description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
              schema:
                type: string
                example: no-store
            Pragma:
              description: हमेशा `no-cache`।
              schema:
                type: string
                example: no-cache
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FieldErrors'
              examples:
                MissingAmount:
                  summary: बिना राशि वाला पेआउट
                  value:
                    amount:
                      - required
                InvalidReturnTo:
                  summary: अपंजीकृत return_to
                  value:
                    return_to: invalid_redirect_uri
                UnknownAction:
                  summary: असमर्थित कार्रवाई
                  value:
                    action:
                      - '"withdraw" is not a valid choice.'
        '401':
          $ref: '#/components/responses/InvalidToken'
        '403':
          $ref: '#/components/responses/OriginNotAllowed'
        '404':
          $ref: '#/components/responses/ApplicationNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/TemporarilyUnavailable'
      security:
        - AccessToken: []
components:
  schemas:
    StepUpRequest:
      type: object
      description: संवेदनशील कार्रवाई जो व्यक्ति करने वाला है।
      required:
        - action
        - return_to
      additionalProperties: false
      properties:
        action:
          type: string
          enum:
            - payout
            - bank
            - contact
          description: >-
            `payout` (निकासी या स्थानांतरण), `bank` (बैंक खाता जोड़ना या बदलना)
            या `contact` (ईमेल या फ़ोन नंबर बदलना)। पेआउट पर नया-डिवाइस नियम भी
            लागू होता है।
        amount:
          type: string
          pattern: ^[0-9]{1,16}(\.[0-9]{1,2})?$
          description: >-
            `payout` के लिए आवश्यक: राशि, अधिकतम दो दशमलव स्थानों तक। JSON
            संख्या भी स्वीकार की जाती है।
          example: '900.00'
        currency:
          type: string
          pattern: ^[A-Z]{3}$
          description: >-
            `amount` का ISO 4217 कोड। डिफ़ॉल्ट रूप से पेआउट नियम की करेंसी पर
            सेट होता है; किसी अन्य करेंसी में पेआउट की हमेशा जाँच की जाती है।
          example: USD
        return_to:
          type: string
          maxLength: 2048
          description: >-
            सत्यापन करने के बाद व्यक्ति कहाँ वापस लौटता है, जिसमें
            `step_up=<id>&status=approved` जोड़ा जाता है। जब कोई नियम लागू होता
            है, तो यह एप्लिकेशन के रीडायरेक्ट URI में से एक होना चाहिए; जब कोई
            नियम लागू नहीं होता है, तो इसकी जांच नहीं की जाती है।
          example: https://app.example.com/payouts/confirm
    StepUpNotRequired:
      type: object
      description: 'कोई नियम लागू नहीं होता: कार्रवाई जारी रखें।'
      required:
        - required
      properties:
        required:
          type: boolean
          enum:
            - false
    StepUpRequired:
      description: एक नया स्टेप-अप। व्यक्ति को `verification_url` पर भेजें।
      allOf:
        - $ref: '#/components/schemas/StepUp'
        - type: object
          required:
            - required
            - verification_url
            - expires_in
          properties:
            required:
              type: boolean
              enum:
                - true
            verification_url:
              type: string
              format: uri
              description: >-
                होस्टेड पेज जहाँ व्यक्ति सत्यापित करता है; इसे व्यक्ति के
                ब्राउज़र में खोलें। यह तब तक काम करता है जब तक स्टेप-अप स्वीकृत
                नहीं हो जाता या उसकी समय-सीमा समाप्त नहीं हो जाती, इसलिए जिस
                व्यक्ति को अस्वीकृत किया गया था, वह इससे पुनः प्रयास कर सकता है।
              example: >-
                https://your-app.auth.didit.me/verify/?verification=1nSX7HJCXAP9XPA9AeJfQxIuPk2GkG0dGSOzCA2Zpww
            expires_in:
              type: integer
              description: 'स्टेप-अप के खुले रहने के सेकंड: 1800।'
              example: 1800
    FieldErrors:
      title: Field errors
      type: object
      description: >-
        फ़ील्ड के अनुसार सत्यापन त्रुटियां। मान संदेशों की एक सूची है, या एक एकल
        कोड (`unknown_field`, `invalid_redirect_uri`) है। `non_field_errors`
        फ़ील्ड्स में फैले नियमों को रखता है।
      additionalProperties:
        oneOf:
          - type: string
          - type: array
            items:
              type: string
    StepUp:
      type: object
      description: एक सत्यापन जिसे व्यक्ति को कार्रवाई से पहले पास करना होगा।
      required:
        - id
        - rule
        - method
        - status
        - level
        - amount
        - currency
        - created_at
        - completed_at
        - expires_at
      properties:
        id:
          type: string
          format: uuid
          example: 94efc2c3-ca84-42fe-900b-6fb61669a7a1
        rule:
          type: string
          enum:
            - payout
            - device
            - bank
            - contact
          description: >-
            वह नियम जिसने इसका अनुरोध किया था। जब कई लागू होते हैं, तो सबसे
            मजबूत विधि वाला नियम।
          example: payout
        method:
          type: string
          enum:
            - liveness
            - selfie
            - full_id
          description: >-
            व्यक्ति क्या करता है: `liveness`, `selfie` (Didit के पास पहले से
            मौजूद चेहरे से मेल खाने वाली लाइवनेस) या `full_id` (दस्तावेज़ और
            सेल्फ़ी)। जब Didit के पास उस व्यक्ति का कोई चेहरा मौजूद नहीं होता
            है, तो उनके द्वारा `verification_url` खोलने पर `selfie` बदलकर
            `full_id` हो जाता है।
          example: selfie
        status:
          type: string
          enum:
            - pending
            - review
            - approved
            - declined
            - expired
            - superseded
          description: >-
            केवल `approved` पर कार्रवाई करें। `review` आपकी टीम की समीक्षा की
            प्रतीक्षा करता है। जब तक `verification_url` काम कर रहा है,
            `declined` अंतिम नहीं है: व्यक्ति पुनः प्रयास कर सकता है, और
            स्टेप-अप `pending` पर वापस आ जाता है। `superseded` का अर्थ है कि
            किसी अन्य जांच ने इसके सत्यापन का कार्यभार संभाल लिया है, या परिणाम
            इस स्टेप-अप के लिए नहीं था: एक नया बनाएं।
          example: pending
        level:
          type: string
          nullable: true
          enum:
            - liveness
            - liveness_face_match
            - full_id
            - null
          description: एक बार स्वीकृत होने के बाद, सत्यापन जिस स्तर तक पहुँचा।
          example: null
        amount:
          type: string
          nullable: true
          description: पेआउट राशि, दो दशमलव स्थान।
          example: '900.00'
        currency:
          type: string
          nullable: true
          example: USD
        created_at:
          type: string
          format: date-time
          example: '2026-10-17T10:41:14.894632Z'
        completed_at:
          type: string
          format: date-time
          nullable: true
          example: null
        expires_at:
          type: string
          format: date-time
          description: >-
            निर्माण के 30 मिनट बाद। स्टेप-अप को पढ़ने पर पहले कोई भी परिणाम
            एकत्र किया जाता है जिस तक इसका सत्यापन पहुंचा था, इसलिए यह इस समय के
            बाद भी `approved`, `review` या `declined` पढ़ सकता है; जो अभी भी
            `pending` है वह `expired` पढ़ता है।
          example: '2026-10-17T11:11:14.894581Z'
    Detail:
      type: object
      required:
        - detail
      properties:
        detail:
          type: string
          example: invalid_token
    OAuthError:
      title: OAuth error
      type: object
      description: एक OAuth त्रुटि (RFC 6749 धारा 5.2) या एक सेवा त्रुटि।
      required:
        - error
      properties:
        error:
          type: string
          example: invalid_grant
  responses:
    InvalidToken:
      description: >-
        एक्सेस token अनुपस्थित, विकृत, समय-सीमा समाप्त, किसी अन्य जारीकर्ता या
        कुंजी द्वारा हस्ताक्षरित, एक ID token, एक एजेंट token है, या रीफ़्रेश
        द्वारा प्रतिस्थापित किया गया है; या इसका सत्र निरस्त कर दिया गया था,
        निष्क्रिय हो गया था, अपनी जीवन अवधि पार कर चुका था या अब आपकी MFA नीति
        को पूरा नहीं करता है, या इसके व्यक्ति को ब्लॉक कर दिया गया था या उनका
        ईमेल अब सत्यापित नहीं है। व्यक्ति को फिर से साइन-इन के माध्यम से भेजें।
      headers:
        WWW-Authenticate:
          description: '`Bearer`।'
          schema:
            type: string
            example: Bearer
        Cache-Control:
          description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
          schema:
            type: string
            example: no-store
        Pragma:
          description: हमेशा `no-cache`।
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            InvalidToken:
              summary: अस्वीकृत एक्सेस टोकन
              value:
                detail: invalid_token
    OriginNotAllowed:
      description: >-
        अनुरोध में एक ऐसा `Origin` था जो न तो एप्लिकेशन का अपना है और न ही इसके
        स्वीकृत ओरिजिन में है। सर्वर अनुरोध कोई `Origin` नहीं भेजते हैं।
      headers:
        Cache-Control:
          description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
          schema:
            type: string
            example: no-store
        Pragma:
          description: हमेशा `no-cache`।
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            OriginNotAllowed:
              summary: ऑरिजिन की अनुमति नहीं है
              value:
                detail: origin_not_allowed
    ApplicationNotFound:
      description: >-
        पता किसी एप्लिकेशन का है, लेकिन इसके लिए प्रमाणीकरण सक्रिय नहीं है;
        `apx.didit.me` पते पर, एप्लिकेशन ID अज्ञात है। जो पता किसी एप्लिकेशन का
        नहीं है, उसे endpoint तक पहुंचने से पहले ही अस्वीकार कर दिया जाता है, और
        वह रिस्पॉन्स JSON नहीं होता है।
      headers:
        Cache-Control:
          description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
          schema:
            type: string
            example: no-store
        Pragma:
          description: हमेशा `no-cache`।
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            ApplicationNotFound:
              summary: अज्ञात एप्लिकेशन
              value:
                detail: No Configuration matches the given query.
    RateLimited:
      description: >-
        इस endpoint के लिए इस IP पते से बहुत सारे अनुरोध आए हैं, या `POST` या
        `DELETE` पर बॉट सुरक्षा बकेट खाली है। कुछ भी निष्पादित नहीं हुआ:
        `Retry-After` सेकंड प्रतीक्षा करें, फिर पुनः प्रयास करें।
      headers:
        Retry-After:
          description: पुनः प्रयास करने से पहले प्रतीक्षा करने के सेकंड।
          schema:
            type: integer
            example: 60
        Cache-Control:
          description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
          schema:
            type: string
            example: no-store
        Pragma:
          description: हमेशा `no-cache`।
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            RateLimited:
              summary: Endpoint सीमा
              value:
                detail: >-
                  Too many requests from this IP address. Please wait before
                  trying again. Expected available in 60 seconds.
            BotProtection:
              summary: बॉट सुरक्षा सीमा (POST और DELETE)
              value:
                detail: rate_limited Expected available in 2 seconds.
    TemporarilyUnavailable:
      description: >-
        अनुरोध जिस सेवा पर निर्भर करता है वह कुछ समय के लिए अनुपलब्ध है। बैकऑफ़
        के साथ पुनः प्रयास करें।
      headers:
        Cache-Control:
          description: 'हमेशा `no-store`: इस रिस्पॉन्स को कभी कैश न करें।'
          schema:
            type: string
            example: no-store
        Pragma:
          description: हमेशा `no-cache`।
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OAuthError'
          examples:
            TemporarilyUnavailable:
              summary: बाद में पुनः प्रयास करें
              value:
                error: temporarily_unavailable
  securitySchemes:
    AccessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        `POST /token/` से व्यक्ति का एक्सेस token: हेडर `typ: at+jwt` वाला एक
        ES256 JWT, जो अधिकतम 5 मिनट के लिए मान्य है। यह आपकी Didit API कुंजी
        नहीं है।

````

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