> ## 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: एक चरण स्वीकृत या अस्वीकृत करें

> Didit API से किसी एक सत्यापन चरण (OCR, लाइवनेस, चेहरा मिलान, AML, POA, फ़ोन…) को स्वीकृत, अस्वीकृत या समीक्षाधीन करें, अभी या सत्र पूरा होने के बाद।



सुविधा स्थिति अपडेट करने का प्रॉम्प्ट
        प्रॉम्प्ट को क्लिपबोर्ड पर कॉपी करें



      
      

\<pre>

\`Approve, decline, or move a SINGLE verification step (feature) of a Didit session to review, now or once the person finishes the flow.

Endpoint:
PATCH https://verification.didit.me/v3/session/{session_id}/features/{node_id}/update-status/

Authentication:
x-api-key (client API key) or a user-auth token. Privilege: write:sessions.

Path parameters:
\- session_id (UUID) — KYC or KYB; Didit resolves it against both session types.
\- node_id — the workflow graph node ID of the step (e.g. feature_ocr_1, feature_liveness_1, feature_aml_1). Use the literal "default" for non-graph (single-step) workflows where the step has no node ID.

Request body:
\- new_status (string, required): one of "Approved", "Declined", "In Review". Must differ from the step's current status.
\- comment (string, optional): your reason, saved in the session's activity and returned as the override's reason.
\- feature_type (string, optional): which kind of step to target, for example "LIVENESS", "AML", "FACE_MATCH", "ID_VERIFICATION". Needed when node_id is "default" (non-graph workflows, where steps have no node ID). An unknown value returns 400 { "feature_type": ["Unknown feature_type '...'."] }.
\- defer_until_flow_finishes (boolean, optional, default false): while the person is still in the flow, wait and apply the override when the flow finishes instead of at once.

When the override applies:
\- Omitted or false: it applies at once. If the person is still in the flow it is recorded as forced=true.
\- true while the person is still in the flow (session Not Started, In Progress or Resubmitted, and not finished): it is stored as "pending_until_flow_finishes" and applies when the flow finishes, after the flow reaches its own decision.
\- true after the flow ended: it applies at once.
\- A waiting override is cancelled instead when the person redoes the step before finishing, a newer override on the same step replaces it, the session leaves the flow unfinished (abandoned, expired, decided mid-flow), or you cancel it with POST /v3/session/{session_id}/features/overrides/{override_id}/cancel/.

Which steps this works on:
Every per-step feature record: OCR/ID, Liveness, Face Match, NFC, AML, Proof of Address (POA), Phone, Email, Database Validation, Questionnaire, and the KYB registry / documents / key-people checks.

Difference vs update-status:
\- update-status changes the OVERALL session decision (Approved/Declined/Resubmitted).
\- THIS endpoint changes ONE step's status. A session that already has a decision keeps it. If the session has no decision yet and its workflow is waiting on exactly this step, applying the override completes the step: the workflow moves on and a status node can set the session decision (and fire status.updated).

Not allowed:
\- Standalone API sessions (session_type = API) return 400.

curl example — approve the ID/OCR step:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/features/feature_ocr_1/update-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "new_status": "Approved", "comment": "Document manually verified" }'

Response: { session_id, node_id, feature_type, new_status, override }.
\- node_id is the step's workflow node, or null for a step without a node ("default" in a non-graph workflow).
\- new_status is the step's stored status: the requested one once the override applied, the unchanged one while it waits.
\- override: { id, node_id, feature_type, feature_model, previous_status, new_status, state ("applied" | "pending_until_flow_finishes" | "cancelled"), forced, reason, requested_by { email, name, type }, requested_at, applied_at, cancelled_at, cancel_reason }.

Side effects:
\- Fires a data.updated webhook when the override applies (at once, or when the flow finishes). Nothing is sent while it waits or when it is cancelled.
\- Records the override in the session's activity as FEATURE_OVERRIDE_PENDING, FEATURE_OVERRIDE_APPLIED or FEATURE_OVERRIDE_CANCELLED, with who made it; the request's entry carries your comment. In the decision's reviews array these entries appear with new_status null, and the request's entry has your reason in comment.

Failure modes:
\- 400: new_status invalid or unchanged, unknown feature_type, or the session is a standalone API session.
\- 401: the scoped API key has expired.
\- 403: missing credentials (a wrong, revoked or expired key gets 401), or the caller lacks write:sessions (a scoped key needs decisions write).
\- 404: session not found, or no feature has the given node_id.

Related: list overrides with GET /v3/session/{session_id}/features/overrides/ (see /sessions-api/list-feature-overrides); cancel a waiting one with POST /v3/session/{session_id}/features/overrides/{override_id}/cancel/ (see /sessions-api/cancel-feature-override).

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

यहाँ पेस्ट करें

## यह क्या करता हैएक सत्यापन सत्र अलग-अलग **सुविधाओं** (चरणों) से मिलकर बनता है: ID/OCR, लाइवनेस डिटेक्शन, चेहरा मिलान, AML, पते का प्रमाण, फ़ोन, आदि।
यह endpoint आपको उनमें से **एक** चरण की स्थिति `Approved`, `Declined`, या `In Review` पर सेट करने देता है।जब आप पूरे सत्र को स्वीकृत, अस्वीकृत या दोबारा खोलना चाहते हैं, तो [update-status](https://docs.didit.me/hi/sessions-api/update-status.md) का उपयोग करें।
जब आप केवल एक चरण पर निर्णय दर्ज करना चाहते हैं, जैसे अपनी समीक्षा प्रक्रिया के लिए चेहरा मिलान चरण को `Declined` चिह्नित करना, तब **इस** endpoint का उपयोग करें।जिस सत्र का पहले से निर्णय है, वह निर्णय बना रहता है: केवल चरण बदलता है।
यदि सत्र पर अभी कोई निर्णय नहीं है और उसका वर्कफ़्लो ठीक इसी चरण की प्रतीक्षा कर रहा है, तो ओवरराइड लागू होने पर चरण पूरा हो जाता है, जैसे सामान्य रूप से पूरा होने पर होता।
वर्कफ़्लो आगे बढ़ता है, बाद के चरण चलते हैं, और एक स्थिति नोड सत्र का निर्णय सेट कर सकता है और `status.updated` webhook भेज सकता है।## `node_id` से चरण चुननाग्राफ़-आधारित वर्कफ़्लो में हर चरण का एक `node_id` होता है (जैसे `feature_ocr_1`, `feature_liveness_1`, `feature_aml_1`)। इन्हें [सत्र निर्णय](https://docs.didit.me/hi/sessions-api/retrieve-session.md) में पाया जा सकता है। V3 निर्णय में हर सुविधा अपना `node_id` साथ लेकर आती है।**गैर-ग्राफ़ (एकल-चरण) वर्कफ़्लो** में अंतर्निहित सुविधा का कोई नोड ID नहीं होता। ऐसे चरण को लक्षित करने के लिए `nodeId` के रूप में शाब्दिक मान `default` भेजें।
चूँकि ऐसे वर्कफ़्लो के किसी भी चरण का नोड ID नहीं होता, इसलिए `feature_type` भी भेजें (जैसे `LIVENESS`, `AML` या `FACE_MATCH`) ताकि बताया जा सके कि आप किस चरण की बात कर रहे हैं।
अज्ञात `feature_type` पर `400` लौटता है।## व्यक्ति के फ़्लो पूरा होने तक प्रतीक्षा करेंडिफ़ॉल्ट रूप से ओवरराइड तुरंत लागू होता है।
यदि व्यक्ति अभी भी फ़्लो से गुज़र रहा है, तो यह चल रहे फ़्लो के अंतर्गत किसी चरण को बदलता है; तब ओवरराइड `forced: true` के साथ दर्ज होता है।प्रतीक्षा करने के लिए `defer_until_flow_finishes: true` सेट करें।
जब तक सत्र `Not Started`, `In Progress` या `Resubmitted` में है और व्यक्ति ने फ़्लो पूरा नहीं किया है, ओवरराइड `pending_until_flow_finishes` के रूप में संग्रहीत होता है।
यह तब लागू होता है जब व्यक्ति फ़्लो पूरा करता है और फ़्लो अपने निर्णय तक पहुँचता है।
जिस सत्र का फ़्लो पहले ही समाप्त हो चुका है, उस पर यह दोनों स्थितियों में तुरंत लागू होता है।प्रतीक्षारत ओवरराइड लागू होने के बजाय रद्द हो जाता है जब:- व्यक्ति पूरा करने से पहले चरण दोबारा करता है (`check_changed`),
- उसी चरण पर नया ओवरराइड उसकी जगह ले लेता है (`replaced`),
- सत्र अधूरे फ़्लो से बाहर चला जाता है: छोड़ा गया, समय-सीमा समाप्त, या फ़्लो के बीच निर्णय लिया गया (`session_closed`),
- आप [सुविधा ओवरराइड रद्द करें](https://docs.didit.me/hi/sessions-api/cancel-feature-override.md) से उसे रद्द करते हैं (`cancelled_by_reviewer`)।प्रतिक्रिया का `override` बताता है कि क्या हुआ: `state` `applied` या `pending_until_flow_finishes` होता है, और लागू होने पर `applied_at` सेट हो जाता है।
शीर्ष-स्तरीय `new_status` चरण की संग्रहीत स्थिति है, इसलिए ओवरराइड प्रतीक्षा करते समय यह नहीं बदलता।
किसी सत्र के हर ओवरराइड और यह देखने के लिए कि व्यक्ति अब भी फ़्लो में है या नहीं, [सुविधा ओवरराइड सूची देखें](https://docs.didit.me/hi/sessions-api/list-feature-overrides.md) का उपयोग करें।## KYC और KYB समर्थन**उपयोगकर्ता सत्यापन (KYC)** और **व्यवसाय सत्यापन (KYB)** सत्रों के लिए यह बिल्कुल एक जैसे काम करता है: Didit दोनों में `sessionId` को पहचानता है। समर्थित चरण प्रकारों में ID/OCR, लाइवनेस डिटेक्शन, चेहरा मिलान, NFC, AML, पते का प्रमाण, फ़ोन, ईमेल सत्यापन, डेटाबेस सत्यापन, प्रश्नावलियाँ, और KYB रजिस्ट्री, दस्तावेज़ तथा प्रमुख व्यक्तियों की जाँच शामिल हैं।> [!NOTE]
>
> स्टैंडअलोन API सत्र (जो स्टैंडअलोन सत्यापन APIs के ज़रिए बनाए गए हैं, `session_type = API`) पर अलग-अलग सुविधाओं की स्थिति नहीं बदली जा सकती। endpoint `400` लौटाता है।## उदाहरण> [tab] एक चरण स्वीकृत करें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/feature_ocr_1/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Approved",
>     "comment": "Document manually verified by compliance"
>   }'
> ```> [tab] चेहरा मिलान चरण अस्वीकृत करें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/feature_face_match/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Declined"
>   }'
> ```> [tab] एकल-चरण वर्कफ़्लो (डिफ़ॉल्ट नोड)
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/default/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "In Review",
>     "feature_type": "LIVENESS"
>   }'
> ```> [tab] व्यक्ति के फ़्लो पूरा करने की प्रतीक्षा करें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/feature_liveness_1/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Approved",
>     "comment": "Liveness retried with a reviewer present",
>     "defer_until_flow_finishes": true
>   }'
> ```## अपडेट के बाद क्या होता है- **webhook**: जब ओवरराइड लागू होता है, चाहे तुरंत या फ़्लो पूरा होने पर, तब `data.updated` इवेंट भेजा जाता है। प्रतीक्षा के दौरान या रद्द होने पर कुछ नहीं भेजा जाता।
- **गतिविधि**: हर ओवरराइड सत्र की **गतिविधि** में `FEATURE_OVERRIDE_PENDING`, `FEATURE_OVERRIDE_APPLIED` या `FEATURE_OVERRIDE_CANCELLED` के रूप में दर्ज होता है, साथ में कर्ता (API कुंजी, उपयोगकर्ता, या प्रतीक्षारत ओवरराइड लागू होने पर सिस्टम)। अनुरोध की प्रविष्टि में आपका `comment` कारण के रूप में होता है। [सत्र निर्णय](https://docs.didit.me/hi/sessions-api/retrieve-session.md) के `reviews` सरणी में ये प्रविष्टियाँ `new_status: null` के साथ दिखती हैं, और अनुरोध की प्रविष्टि में आपका कारण `comment` में होता है।
- **सत्र निर्णय**: जिस सत्र का पहले से निर्णय है, वह उसे बनाए रखता है। अंतिम निर्णय बदलने के लिए [update-status](https://docs.didit.me/hi/sessions-api/update-status.md) को अलग से कॉल करें।## अनुमति`write:sessions` विशेषाधिकार की आवश्यकता है, साथ ही या तो क्लाइंट API कुंजी (`x-api-key`) या उपयोगकर्ता प्राधिकरण हेडर चाहिए।
स्कोप्ड API कुंजी को निर्णयों पर लिखने की पहुँच चाहिए।## संबंधित- [सत्र की स्थिति अपडेट करें](https://docs.didit.me/hi/sessions-api/update-status.md): समग्र सत्र निर्णय बदलें।
- [AML हिट की स्थिति अपडेट करें](https://docs.didit.me/hi/sessions-api/update-aml-hit-status.md): अलग-अलग AML मिलानों की समीक्षा करें।
- [सत्र प्राप्त करें](https://docs.didit.me/hi/sessions-api/retrieve-session.md): निर्णय (और हर सुविधा का `node_id`) लाएँ।
- [Webhooks](https://docs.didit.me/hi/integration/webhooks.md): `data.updated` की सदस्यता लें।
- [सुविधा ओवरराइड सूची देखें](https://docs.didit.me/hi/sessions-api/list-feature-overrides.md): सत्र का हर ओवरराइड और उसकी स्थिति।
- [सुविधा ओवरराइड रद्द करें](https://docs.didit.me/hi/sessions-api/cancel-feature-override.md): प्रतीक्षारत ओवरराइड को लागू होने से रोकें।


## OpenAPI

````yaml hi/openapi-25.json PATCH /v3/session/{sessionId}/features/{nodeId}/update-status/
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/session/{sessionId}/features/{nodeId}/update-status/:
    patch:
      tags:
        - Sessions
      summary: व्यक्तिगत सुविधा (चरण) स्थिति अपडेट करें
      description: >-
        किसी सत्र के भीतर किसी एकल सत्यापन सुविधा (चरण) का स्टेटस सेट करें।
        वर्कफ़्लो ग्राफ़ के `nodeId` द्वारा उस सुविधा को लक्षित करें।
        बिना-ग्राफ़ वाले वर्कफ़्लो में, जिनके चरणों में कोई नोड नहीं होता है,
        `default` का उपयोग करें और यह बताने के लिए कि आपका आशय किस चरण से है,
        `feature_type` भी पास करें।


        यह उपयोगकर्ता सत्यापन (KYC) और व्यवसाय सत्यापन (KYB) दोनों सत्रों और
        प्रत्येक चरण प्रकार के लिए काम करता है: ID/OCR, Liveness, Face Match,
        NFC, AML, Proof of Address, Phone, Email, Database Validation,
        Questionnaire, और KYB रजिस्ट्री / दस्तावेज़ / प्रमुख व्यक्ति जाँचें। यह
        endpoint स्टैंडअलोन API सत्रों (`session_type = API`) के लिए उपलब्ध
        **नहीं** है।


        `new_status` का `Approved`, `Declined`, या `In Review` में से कोई एक
        होना आवश्यक है, और यह सुविधा के वर्तमान स्टेटस से भिन्न होना चाहिए।


        **ओवरराइड कब लागू होता है।** `defer_until_flow_finishes` के बिना (या
        `false` के साथ) ओवरराइड तुरंत लागू होता है, जैसा कि हमेशा होता था; जब
        व्यक्ति अभी भी फ़्लो में होता है, तो इसे `forced` के रूप में रिकॉर्ड
        किया जाता है। व्यक्ति के फ़्लो में रहते हुए (सत्र `Not Started`, `In
        Progress` या `Resubmitted` है और समाप्त नहीं हुआ है)
        `defer_until_flow_finishes: true` के साथ, ओवरराइड को
        `pending_until_flow_finishes` के रूप में संग्रहीत किया जाता है और फ़्लो
        समाप्त होने पर लागू होता है, जब फ़्लो अपने स्वयं के निर्णय पर पहुँच जाता
        है। उस सत्र पर जिसका फ़्लो पहले ही समाप्त हो चुका है, यह दोनों ही मामलों
        में तुरंत लागू होता है। इसके बजाय प्रतीक्षा कर रहा ओवरराइड तब रद्द हो
        जाता है जब व्यक्ति समाप्त करने से पहले अपने चरण को दोबारा करता है, जब
        उसी जाँच पर कोई नया ओवरराइड इसे प्रतिस्थापित कर देता है, जब सत्र फ़्लो
        को अधूरा छोड़ देता है (छोड़ा गया, समय-सीमा समाप्त, या फ़्लो के बीच में
        निर्णय लिया गया), या जब आप इसे `POST
        /v3/session/{sessionId}/features/overrides/{overrideId}/cancel/` से रद्द
        करते हैं। किसी सत्र के ओवरराइड्स को `GET
        /v3/session/{sessionId}/features/overrides/` से सूचीबद्ध करें।


        **सत्र पर प्रभाव।** जिस सत्र का निर्णय पहले से मौजूद है, वह उसे बनाए
        रखता है: केवल जाँच बदलती है। जब सत्र का अभी तक कोई निर्णय नहीं हुआ है और
        इसका वर्कफ़्लो ठीक इसी चरण की प्रतीक्षा कर रहा है, तो ओवरराइड लागू करने
        से चरण पूरा हो जाता है: वर्कफ़्लो आगे बढ़ता है, बाद के चरण चलते हैं, और
        एक स्टेटस नोड सत्र निर्णय सेट कर सकता है और `status.updated` ट्रिगर कर
        सकता है।


        **Webhooks और गतिविधि।** ओवरराइड लागू होने पर (तुरंत, या फ़्लो समाप्त
        होने पर) एक `data.updated` webhook ट्रिगर होता है, इसके प्रतीक्षा करने
        के दौरान या इसके रद्द होने पर कभी नहीं। प्रत्येक ओवरराइड को सत्र की
        गतिविधि में `FEATURE_OVERRIDE_PENDING`, `FEATURE_OVERRIDE_APPLIED` या
        `FEATURE_OVERRIDE_CANCELLED` के रूप में रिकॉर्ड किया जाता है, साथ ही यह
        भी दर्ज होता है कि इसे किसने किया था; अनुरोध की प्रविष्टि में आपकी
        `comment` शामिल होती है।


        अपनी API कुंजी (`x-api-key`) या `write:sessions` विशेषाधिकार वाले
        उपयोगकर्ता प्राधिकरण हेडर के साथ प्रमाणित करें; एक स्कोप्ड API कुंजी को
        निर्णयों के लिए राइट एक्सेस की आवश्यकता होती है।
      operationId: patch_v3_session_update_feature_status
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            सत्यापन सत्र का UUID। उपयोगकर्ता (KYC) और व्यवसाय (KYB) दोनों सत्र
            ID स्वीकार करता है — सेवा दोनों सत्र प्रकारों में ID को रिज़ॉल्व
            करती है।
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - in: path
          name: nodeId
          required: true
          description: >-
            अपडेट की जाने वाली सुविधा का वर्कफ़्लो ग्राफ़ नोड ID (उदाहरण के लिए
            `feature_ocr_1`)। गैर-ग्राफ़ (एकल-चरण) वर्कफ़्लो के लिए लिटरल मान
            `default` का उपयोग करें जहां सुविधा का कोई नोड ID नहीं है।
          schema:
            type: string
            example: feature_ocr_1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - new_status
              properties:
                new_status:
                  type: string
                  description: >-
                    इस सुविधा के लिए लक्षित स्थिति। वर्तमान मान से भिन्न होनी
                    चाहिए।
                  enum:
                    - Approved
                    - Declined
                    - In Review
                  example: Approved
                comment:
                  type: string
                  description: >-
                    इस सुविधा परिवर्तन के लिए सत्र के समीक्षा ट्रेल पर रिकॉर्ड
                    किया गया वैकल्पिक फ़्री-टेक्स्ट नोट।
                  example: Document manually verified by compliance.
                feature_type:
                  type: string
                  enum:
                    - ID_VERIFICATION
                    - OCR
                    - OCR_BACK
                    - NFC
                    - LIVENESS
                    - FACE
                    - AGE_ESTIMATION
                    - AGE_VERIFICATION
                    - FACE_SEARCH
                    - FACE_MATCH
                    - IP_ANALYSIS
                    - AML
                    - PHONE
                    - PHONE_VERIFICATION
                    - EMAIL
                    - EMAIL_VERIFICATION
                    - POA
                    - PROOF_OF_ADDRESS
                    - DATABASE_VALIDATION
                    - DATA_VALIDATION
                    - QUESTIONNAIRE
                    - DOCUMENT_AI
                    - KYB_REGISTRY
                    - KYB_DOCUMENTS
                    - KYB_KEY_PEOPLE
                    - BANK_VERIFICATION
                    - GEOLOCATION
                  description: >-
                    किस प्रकार के चरण को लक्षित करना है। गैर-ग्राफ़ वर्कफ़्लो
                    (`nodeId` = `default`) पर आवश्यक है, जहाँ कोई भी चरण नोड
                    साझा नहीं करता है; अन्यथा वैकल्पिक। एक अज्ञात मान `400`
                    लौटाता है।
                  example: LIVENESS
                defer_until_flow_finishes:
                  type: boolean
                  default: false
                  description: >-
                    जब व्यक्ति अभी भी फ़्लो में है, तो ओवरराइड को तुरंत लागू
                    करने के बजाय `pending_until_flow_finishes` के रूप में स्टोर
                    करें और फ़्लो समाप्त होने पर लागू करें। छोड़े जाने पर या
                    `false` होने पर, ओवरराइड तुरंत लागू होता है। ऐसे सत्र पर
                    जिसका फ़्लो पहले ही समाप्त हो चुका है, यह दोनों ही मामलों
                    में तुरंत लागू होता है।
                  example: false
            examples:
              Apply Now:
                summary: ID चरण को तुरंत स्वीकृत करें
                value:
                  new_status: Approved
                  comment: Document manually verified by compliance.
              Wait For The Flow:
                summary: व्यक्ति द्वारा फ़्लो पूरा करने के बाद लाइवनेस चरण स्वीकृत करें
                value:
                  new_status: Approved
                  comment: Liveness retried with a reviewer present.
                  defer_until_flow_finishes: true
              Non-graph Workflow:
                summary: >-
                  नोड्स के बिना किसी वर्कफ़्लो के लाइवनेस चरण को लक्षित करें
                  (nodeId = default)
                value:
                  new_status: In Review
                  feature_type: LIVENESS
      responses:
        '200':
          description: >-
            ओवरराइड रिकॉर्ड किया गया था। `new_status` चेक की संग्रहीत स्थिति है:
            ओवरराइड लागू होने के बाद अनुरोधित स्थिति, फ़्लो पूरा होने की
            प्रतीक्षा करते समय अपरिवर्तित स्थिति। `override` बताता है कि क्या
            हुआ।
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_id:
                    type: string
                    format: uuid
                  node_id:
                    type: string
                    nullable: true
                    description: >-
                      अपडेट किए गए चरण का वर्कफ़्लो नोड, या बिना नोड वाले चरण के
                      लिए `null` (गैर-ग्राफ़ वर्कफ़्लो में `default` पाथ)।
                    example: feature_ocr_1
                  feature_type:
                    type: string
                    description: >-
                      अपडेट की गई सुविधा का मॉडल नाम (उदा. `KYC`, `Face`,
                      `FaceMatch`, `AML`, `POA`)।
                    example: KYC
                  new_status:
                    type: string
                    description: >-
                      जाँच की संग्रहीत स्थिति: ओवरराइड लागू होने के बाद अनुरोध
                      की गई स्थिति, जबकि ओवरराइड प्रवाह पूरा होने की प्रतीक्षा
                      करता है तो अपरिवर्तित स्थिति।
                    example: Approved
                  override:
                    $ref: '#/components/schemas/FeatureStatusOverride'
                required:
                  - session_id
                  - node_id
                  - feature_type
                  - new_status
                  - override
              examples:
                Applied:
                  summary: ओवरराइड तुरंत लागू हो गया
                  value:
                    session_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    node_id: feature_ocr_1
                    feature_type: KYC
                    new_status: Approved
                    override:
                      id: 7c9e6679-7425-40de-944b-e07fc1f90ae7
                      node_id: feature_ocr_1
                      feature_type: ''
                      feature_model: KYC
                      previous_status: In Review
                      new_status: Approved
                      state: applied
                      forced: false
                      reason: Document manually verified by compliance.
                      requested_by:
                        email: reviewer@example.com
                        name: Alex Reviewer
                        type: CONSOLE_USER
                      requested_at: '2026-10-13T09:15:00Z'
                      applied_at: '2026-10-13T09:15:00Z'
                      cancelled_at: null
                      cancel_reason: null
                Waiting For The Flow:
                  summary: defer_until_flow_finishes जबकि व्यक्ति अभी भी फ़्लो में है
                  value:
                    session_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    node_id: feature_liveness_1
                    feature_type: Face
                    new_status: Declined
                    override:
                      id: 9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3
                      node_id: feature_liveness_1
                      feature_type: ''
                      feature_model: Face
                      previous_status: Declined
                      new_status: Approved
                      state: pending_until_flow_finishes
                      forced: false
                      reason: Liveness retried with a reviewer present.
                      requested_by:
                        email: reviewer@example.com
                        name: Alex Reviewer
                        type: CONSOLE_USER
                      requested_at: '2026-10-13T09:15:00Z'
                      applied_at: null
                      cancelled_at: null
                      cancel_reason: null
        '400':
          description: >-
            सत्यापन त्रुटि। तब लौटाई जाती है जब `new_status` अमान्य हो या
            अपरिवर्तित हो, जब `feature_type` अज्ञात हो, या जब सत्र एक स्टैंडअलोन
            API सत्र हो।
          content:
            application/json:
              examples:
                Same Status:
                  summary: new_status वर्तमान स्थिति के बराबर है
                  value:
                    new_status:
                      - The new status is the same as the current status.
                API Session:
                  summary: स्टैंडअलोन API सत्रों पर सुविधा स्थिति नहीं बदली जा सकती
                  value:
                    - Cannot change feature status for API sessions.
                Unknown feature_type:
                  summary: feature_type एक ज्ञात चरण प्रकार नहीं है
                  value:
                    feature_type:
                      - Unknown feature_type 'SELFIE'.
        '401':
          description: स्कोप्ड API कुंजी की समय-सीमा समाप्त हो गई है।
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: अपनी समाप्ति तिथि पार कर चुकी स्कोप्ड API कुंजी
                  value:
                    detail: This API key has expired.
        '403':
          description: क्रेडेंशियल मौजूद नहीं हैं या अपर्याप्त अनुमतियां हैं।
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: अनुपलब्ध या अमान्य x-api-key
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: API कुंजी में write:sessions का अभाव है
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: निर्णयों के लिए राइट एक्सेस के बिना स्कोप्ड API कुंजी
                  value:
                    detail: This API key has no write access to decisions.
        '404':
          description: सत्र नहीं मिला, या इसमें दिए गए `nodeId` वाली कोई सुविधा नहीं है।
          content:
            application/json:
              examples:
                Session Not Found:
                  summary: अज्ञात session_id
                  value:
                    detail: Session not found.
                Feature Not Found:
                  summary: इस node_id के लिए कोई सुविधा नहीं है
                  value:
                    detail: >-
                      No feature found with node_id 'feature_ocr_1' in this
                      session.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X PATCH \
              https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/features/feature_ocr_1/update-status/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "new_status": "Approved",
                "comment": "Document manually verified by compliance."
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.update_feature_status(
                "11111111-2222-3333-4444-555555555555",
                "feature_ocr_1",
                new_status="Approved",
                comment="Document manually verified by compliance.",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            const result = await didit.sessions.updateFeatureStatus(
              "11111111-2222-3333-4444-555555555555",
              "feature_ocr_1",
              {
                new_status: "Approved",
                comment: "Document manually verified by compliance.",
              },
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateFeatureStatus(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_ocr_1\", didit.SessionsUpdateFeatureStatusParams{\n\tNewStatus: \"Approved\",\n\tComment:   didit.String(\"Document manually verified by compliance.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.SessionsUpdateFeatureStatusParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().updateFeatureStatus("11111111-2222-3333-4444-555555555555",
            "feature_ocr_1", SessionsUpdateFeatureStatusParams.builder()
                    .newStatus(SessionsUpdateFeatureStatusParams.NewStatus.of("Approved"))
                    .comment("Document manually verified by compliance.")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->updateFeatureStatus('11111111-2222-3333-4444-555555555555',
            'feature_ocr_1', [
                'new_status' => 'Approved',
                'comment' => 'Document manually verified by compliance.',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.sessions.update_feature_status(
              "11111111-2222-3333-4444-555555555555",
              "feature_ocr_1",
              new_status: "Approved",
              comment: "Document manually verified by compliance."
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.UpdateFeatureStatusAsync("11111111-2222-3333-4444-555555555555",
            "feature_ocr_1", new SessionsUpdateFeatureStatusParams

            {
                NewStatus = "Approved",
                Comment = "Document manually verified by compliance.",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    FeatureStatusOverride:
      type: object
      description: >-
        `PATCH /v3/session/{sessionId}/features/{nodeId}/update-status/` के साथ
        किए गए चेक (सुविधा) स्थिति का एक ओवरराइड: यह क्या बदलता है, क्या यह लागू
        हुआ या अभी भी व्यक्ति द्वारा फ़्लो पूरा करने की प्रतीक्षा कर रहा है,
        किसने अनुरोध किया और क्यों।
      required:
        - id
        - node_id
        - feature_type
        - feature_model
        - previous_status
        - new_status
        - state
        - forced
        - reason
        - requested_by
        - requested_at
        - applied_at
        - cancelled_at
        - cancel_reason
      properties:
        id:
          type: string
          format: uuid
          description: ओवरराइड का पहचानकर्ता। इसे रद्द करने वाले endpoint पर पास करें।
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        node_id:
          type: string
          description: >-
            अनुरोध में नामित वर्कफ़्लो नोड (नोड के बिना वाले चरण के लिए
            `default`)।
          example: feature_ocr_1
        feature_type:
          type: string
          description: >-
            अनुरोध द्वारा पास किया गया `feature_type`, या यदि कोई पास नहीं किया
            गया तो खाली स्ट्रिंग।
          example: ''
        feature_model:
          type: string
          description: >-
            ओवरराइड की गई जाँच का प्रकार, उदाहरण के लिए `KYC`, `Face`, `AML` या
            `GeolocationCheck`।
          example: KYC
        previous_status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: ओवरराइड का अनुरोध किए जाने के समय जाँच की स्थिति।
          example: In Review
        new_status:
          type: string
          enum:
            - Approved
            - Declined
            - In Review
          description: वह स्थिति जिसे ओवरराइड सेट करता है।
          example: Approved
        state:
          type: string
          enum:
            - applied
            - pending_until_flow_finishes
            - cancelled
          description: >-
            `applied`: जांच की नई स्थिति है। `pending_until_flow_finishes`:
            ओवरराइड प्रतीक्षा करता है और तब लागू होता है जब व्यक्ति फ़्लो पूरा
            करता है। `cancelled`: इसने प्रतीक्षा की और कभी लागू नहीं हुआ
            (`cancel_reason` देखें)।
          example: applied
        forced:
          type: boolean
          description: >-
            `true` जब ओवरराइड तुरंत लागू हो गया, जबकि व्यक्ति अभी भी फ़्लो में
            था।
          example: false
        reason:
          type: string
          nullable: true
          description: अनुरोध के साथ भेजा गया `comment`, या `null`।
          example: Document manually verified by compliance.
        requested_by:
          type: object
          nullable: true
          description: ओवरराइड का अनुरोध किसने किया, या ज्ञात न होने पर `null`।
          properties:
            email:
              type: string
              format: email
              nullable: true
              description: >-
                कंसोल उपयोगकर्ता का ईमेल, या API कुंजियों और सिस्टम के लिए
                `null`।
              example: reviewer@example.com
            name:
              type: string
              nullable: true
              description: अनुरोधकर्ता का डिस्प्ले नाम, या `null`।
              example: Alex Reviewer
            type:
              type: string
              enum:
                - CONSOLE_USER
                - API_KEY
                - SYSTEM
              description: >-
                अनुरोध किसने किया: एक कंसोल उपयोगकर्ता, एक API कुंजी, या स्वयं
                Didit।
              example: CONSOLE_USER
        requested_at:
          type: string
          format: date-time
          description: ओवरराइड का अनुरोध कब किया गया था।
          example: '2026-10-13T09:15:00Z'
        applied_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            जब जाँच ने नई स्थिति ग्रहण की, या प्रतीक्षा करते समय या रद्द हो जाने
            पर `null`।
          example: '2026-10-13T09:15:00Z'
        cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: जब एक प्रतीक्षारत ओवरराइड रद्द कर दिया गया था, या `null`।
          example: null
        cancel_reason:
          type: string
          nullable: true
          enum:
            - cancelled_by_reviewer
            - replaced
            - check_changed
            - session_closed
            - null
          description: >-
            प्रतीक्षारत ओवरराइड कभी लागू क्यों नहीं हुआ, या `null`।
            `cancelled_by_reviewer`: कैंसल endpoint से रद्द किया गया।
            `replaced`: उसी जाँच पर नए ओवरराइड ने इसे बदल दिया। `check_changed`:
            व्यक्ति ने फ़्लो पूरा करने से पहले जाँच को दोबारा किया।
            `session_closed`: व्यक्ति द्वारा इसे पूरा करने से पहले सत्र फ़्लो से
            बाहर हो गया (छोड़ा गया, समय-सीमा समाप्त, या फ़्लो के बीच में निर्णय
            लिया गया)।
          example: null
  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.