> ## 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 के PATCH /v3/session/{id}/update-status/ से KYC और KYB सत्र को स्वीकृत, अस्वीकृत या समीक्षाधीन करें। कोई मासिक न्यूनतम नहीं।



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



      
      

\<pre>

\`Manually approve, decline, or re-open a Didit verification session.

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

Authentication:
Use the x-api-key header with your Didit API key (or a user-auth token). Privilege: write:sessions.

Path parameter:
\- session_id (UUID) — KYC or KYB; Didit resolves it against both session types.

Request body:
\- new_status (string, required) — One of "Approved", "Declined", "Resubmitted". Any other value is rejected.
\- comment (string, optional) — Free-text note saved on the audit trail (visible in the Console review log).
\- nodes_to_resubmit (array, required when new_status="Resubmitted") — Which feature steps the user must redo. Each entry: { "node_id": "feature_poa_1", "feature": "POA" }. KYB-only nodes "KYB_REGISTRY" and "KYB_KEY_PEOPLE" cannot be resubmitted directly (the parent recomputes from child KYCs).
\- send_email (boolean, optional, default false): if true, email the person. "Approved" and "Declined" send their decision email; "Resubmitted" sends a fresh hosted link with the reasons.
\- email_address (string, required when send_email=true).
\- email_language (string, optional, default "en") — ISO 639-1.
\- email_preview_token (string, optional): the preview_token from Preview Decision Email ("Approved", "Declined") or Preview Resubmission Email ("Resubmitted"). Only valid with send_email=true; without it the request returns 400 { "email_preview_token": ["A preview receipt is only valid when the email is sent."] }. The update then sends exactly the previewed email, or returns 409 before changing anything if the email or the session changed since the preview.

Optional preview step (all three statuses):
1\. Preview the email. Neither call changes the session or sends anything.
\- Approved or Declined: POST https://verification.didit.me/v3/session/{session_id}/decision-email-preview/ with { "new_status": "Approved", "email_language": "en" } (see /sessions-api/preview-decision-email).
\- Resubmitted: POST https://verification.didit.me/v3/session/{session_id}/resubmission-preview/ with { "nodes_to_resubmit": [...], "email_language": "en" } (see /sessions-api/preview-resubmission). email_address is optional there; without it the email goes to the person's own address.
2\. Check subject, html, recipient, will_be_sent and not_sent_reason in the response.
3\. Confirm here with the same new_status (and the same nodes_to_resubmit for Resubmitted), send_email=true, email_address=<recipient>, email_language=<the language you previewed>, email_preview_token=<preview_token>.
The receipt expires after 15 minutes.

Allowed transitions:
Current status must be one of: Approved, Declined, In Review, Kyc Expired, Abandoned, Resubmitted. Otherwise the API returns 400 { "detail": "Only sessions with status Approved, Declined, In Review, Kyc Expired, Abandoned, Resubmitted can be updated. Current status: ..." }.
Setting "Approved" or "Declined" on a session that already has that status is a no-op: 200, nothing changes, and no webhook or email goes out. Setting "Resubmitted" on a session that is already Resubmitted returns 400 ["The new status is the same as the current status."].

curl example — approve after manual review:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/update-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"new_status": "Approved",
"comment": "Cleared after compliance review."
}'

curl example: approve and send the email you previewed:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/update-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"new_status": "Approved",
"send_email": true,
"email_address": "<recipient from the preview>",
"email_language": "en",
"email_preview_token": "<preview_token from the preview>"
}'

curl example — request resubmission of the proof-of-address step:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/update-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"new_status": "Resubmitted",
"nodes_to_resubmit": [{ "node_id": "feature_poa_1", "feature": "POA" }],
"comment": "Please upload a clearer proof of address",
"send_email": true,
"email_address": "user@example.com"
}'

Response: { "session_id": "<uuid>" } only. Fetch the refreshed session with GET /v3/session/{session_id}/decision/.

Side effects:
\- Fires a status.updated webhook (plus user.status.updated or business.status.updated alias).
\- Writes an entry to the Console review trail with the actor and your comment.
\- "Approved" or "Declined" with send_email=true emails the decision to email_address. Preview Decision Email tells you beforehand whether it will be sent (for example, not to the contact_details address of a session created without contact_details.send_notification_emails=true).
\- "Resubmitted" sends the user back to the steps in nodes_to_resubmit, resets the session expiration window, and (if send_email=true) emails the user a fresh link. What those steps returned before stays readable: the decision endpoint returns it with include=resubmissions (see Retrieve Session).

Failure modes:
\- 400: invalid new_status (only "Approved", "Declined" and "Resubmitted" are accepted), current status not allowed, nothing to resubmit, send_email=true without email_address, or email_preview_token without send_email=true. Field errors look like { "<field>": ["..."] }.
\- 401: the scoped API key has expired.
\- 403: { "detail": "..." } when credentials are missing or invalid, the caller lacks write:sessions (a scoped API key needs decisions write), or the session belongs to another application.
\- 404: { "detail": "Not found." } when no session with this session_id exists.
\- 409: { "detail": "This email preview changed or expired. Preview the message again before confirming." } when email_preview_token no longer matches the email or the session, or is older than 15 minutes. Nothing changed and no email was sent: preview again.
\- 429 - { "detail": "..." } when a resubmit that only targets backend-only features (AML, DATABASE_VALIDATION, IP_ANALYSIS) repeats within 30 seconds of the previous resubmit. Those features re-run automatically with no user interaction, so an immediate repeat cannot change the outcome; honor the Retry-After header instead of retrying in a loop (e.g. from a webhook handler).

Idempotency:
Repeating "Approved" or "Declined" returns 200 and changes nothing. Repeating "Resubmitted" returns 400.

Next step:
After updating, call GET /v3/session/{session_id}/decision/ to fetch the refreshed payload — see /sessions-api/retrieve-session.

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

\</pre>



      
      

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

## KYC और KYB समर्थनयह endpoint **उपयोगकर्ता सत्यापन (KYC)** और **व्यवसाय सत्यापन (KYB)** सत्रों के लिए बिल्कुल एक जैसे काम करता है। Didit `session_id` को दोनों प्रकार के सत्रों पर हल करता है; स्थिति-परिवर्तन की जाँच दोनों के लिए समान है (दोनों पर स्थितियों की एक ही सूची लागू होती है)।प्रतिक्रिया में केवल `session_id` होता है।
जब आपके आगे के तर्क को सत्र के प्रकार के आधार पर बदलना हो, तब [सत्र प्राप्त करें](https://docs.didit.me/hi/sessions-api/retrieve-session.md) से `session_kind` पढ़ें।## अनुमत परिवर्तनआप किसी सत्र को `Approved`, `Declined`, या `Resubmitted` में बदल सकते हैं।
कोई भी अन्य `new_status`, जिसमें `In Review` भी शामिल है, `400` लौटाता है।
सत्र की वर्तमान स्थिति `Approved`, `Declined`, `In Review`, `Kyc Expired`, `Abandoned`, या `Resubmitted` में से एक होनी चाहिए; अन्यथा API `400` लौटाता है।जो सत्र पहले से वही स्थिति रखता है, उस पर `Approved` या `Declined` सेट करने से कुछ नहीं बदलता: API `200` लौटाता है, कुछ नहीं बदलता, कोई webhook नहीं भेजता और कोई ईमेल नहीं भेजता।
जो सत्र पहले से `Resubmitted` पर है, उस पर `Resubmitted` सेट करने पर `400` लौटता है (`The new status is the same as the current status.`)।जिस पुनः सबमिशन के `nodes_to_resubmit` में केवल बैकएंड-only फ़ीचर (`AML`, `DATABASE_VALIDATION`, `IP_ANALYSIS`) हों, वह अपने आप चलता है और उपयोगकर्ता की किसी कार्रवाई के बिना सत्र को किसी निर्णय वाली स्थिति में लौटा देता है।
ऐसे पुनः सबमिशन को 30 सेकंड के भीतर दोहराने पर `Retry-After` हेडर के साथ `429 Too Many Requests` लौटता है, क्योंकि तुरंत दोहराने से अलग परिणाम नहीं आ सकता।
जब भी आपको `In Review` स्थिति मिले, webhook हैंडलर से अपने आप पुनः सबमिट न करें: पहले निष्कर्ष की समीक्षा करें या अंतर्निहित डेटा बदलें।## ईमेल का पूर्वावलोकन पहले करें`send_email: true` के साथ, `Approved` और `Declined` व्यक्ति को उसका निर्णय वाला ईमेल भेजते हैं, और `Resubmitted` उसे कारणों के साथ एक नया लिंक भेजता है।
आप कुछ भी बदलने से पहले वह ईमेल देख सकते हैं:1) `Approved` या `Declined` के लिए [निर्णय ईमेल का पूर्वावलोकन](https://docs.didit.me/hi/sessions-api/preview-decision-email.md) करें, या `Resubmitted` के लिए [पुनः सबमिशन ईमेल का पूर्वावलोकन](https://docs.didit.me/hi/sessions-api/preview-resubmission.md) करें।
2) प्रस्तुत `subject` और `html`, `recipient`, तथा `will_be_sent` / `not_sent_reason` जाँचें।
3) इस endpoint को उसी `new_status` के साथ कॉल करें (और पुनः सबमिशन के लिए वही `nodes_to_resubmit`), साथ में `send_email: true`, `email_address` जिसका मान `recipient` हो, वह `email_language` जिसका आपने पूर्वावलोकन किया था, और `email_preview_token` जिसका मान `preview_token` हो।कोई भी पूर्वावलोकन सत्र को नहीं बदलता और कुछ नहीं भेजता।
अपडेट ठीक वही ईमेल भेजता है जिसका आपने पूर्वावलोकन किया था।
रसीद 15 मिनट बाद समाप्त हो जाती है।
यदि पूर्वावलोकन के बाद प्राप्तकर्ता, भाषा, सत्र की स्थिति, प्रेषक या ईमेल बदल गया है, तो अपडेट कुछ भी बदलने से पहले `409` लौटाता है; फिर से पूर्वावलोकन करें और नई रसीद के साथ पुष्टि करें।
`send_email: true` के बिना `email_preview_token` भेजने पर `400` लौटता है।
पूर्वावलोकन चरण वैकल्पिक है: मौजूदा इंटीग्रेशन इसके बिना भी इस endpoint को कॉल करते रह सकते हैं।## उदाहरण> [tab] उपयोगकर्ता सत्यापन (KYC) सत्र को स्वीकृत करें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Approved",
>     "comment": "Cleared after manual review by compliance team"
>   }'
> ```> [tab] व्यवसाय सत्यापन (KYB) सत्र को अस्वीकृत करें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/bs-01HJX1.../update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Declined",
>     "comment": "Sanctioned subsidiary detected in ownership chain"
>   }'
> ```> [tab] पुनः सबमिशन का अनुरोध करें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/.../update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Resubmitted",
>     "nodes_to_resubmit": [
>       { "node_id": "feature_poa_1", "feature": "POA" }
>     ],
>     "comment": "Please upload a clearer proof of address",
>     "send_email": true,
>     "email_address": "user@example.com"
>   }'
> ```> [tab] स्वीकृत करें और पूर्वावलोकित ईमेल भेजें
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/.../update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Approved",
>     "send_email": true,
>     "email_address": "user@example.com",
>     "email_language": "en",
>     "email_preview_token": "PREVIEW_TOKEN_FROM_THE_PREVIEW"
>   }'
> ```## अनुमतिइसके लिए `write:sessions` विशेषाधिकार चाहिए। यही विशेषाधिकार दोनों प्रकारों पर लागू होता है।## संबंधित- [सत्यापन स्थितियाँ](https://docs.didit.me/hi/integration/verification-statuses.md) — स्थिति-मशीन का संदर्भ।
- [सत्र प्राप्त करें](https://docs.didit.me/hi/sessions-api/retrieve-session.md) — अपडेट के बाद निर्णय प्राप्त करें।
- [सत्र का अवलोकन](https://docs.didit.me/hi/sessions-api/overview.md) — सत्र के प्रकार की पहचान।
- [निर्णय ईमेल का पूर्वावलोकन](https://docs.didit.me/hi/sessions-api/preview-decision-email.md): Approved या Declined ईमेल भेजने से पहले देखें।
- [पुनः सबमिशन ईमेल का पूर्वावलोकन](https://docs.didit.me/hi/sessions-api/preview-resubmission.md): पुनः सबमिशन ईमेल भेजने से पहले देखें।


## OpenAPI

````yaml hi/openapi-25.json PATCH /v3/session/{sessionId}/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}/update-status/:
    patch:
      tags:
        - Sessions
      summary: >-
        सत्यापन सत्र के लिए स्वीकृत करें, अस्वीकृत करें, या पुनः सबमिशन का
        अनुरोध करें
      description: >-
        KYC या KYB सत्यापन सत्र के अंतिम निर्णय को मैन्युअल रूप से ओवरराइड करें।
        मैन्युअल निर्णय रिकॉर्ड करने के लिए `new_status` को `Approved` या
        `Declined` पर सेट करें, या विशिष्ट सत्यापन चरणों को साफ़ करने और
        उपयोगकर्ता को उसी सत्यापन URL के माध्यम से उन्हें फिर से करने की अनुमति
        देने के लिए `Resubmitted` पर सेट करें। यह endpoint उपयोगकर्ता (KYC) और
        व्यवसाय (KYB) दोनों सत्र ID स्वीकार करता है।


        सत्र के समीक्षा योग्य स्थिति में पहुँचने के बाद इसे कॉल करें: वर्तमान
        स्थिति `Approved`, `Declined`, `In Review`, `Kyc Expired`, `Abandoned`,
        या `Resubmitted` होनी चाहिए। जो सत्र अभी भी `Not Started`, `In
        Progress`, या `Awaiting User` हैं, या जो `Expired` के रूप में समाप्त हुए
        हैं, वे `400` लौटाते हैं। आपकी API कुंजी के पास `write:sessions` अनुमति
        होनी चाहिए (एक स्कोप्ड API कुंजी को निर्णयों के लिए राइट एक्सेस की
        आवश्यकता होती है)। योग्य-स्थिति की जाँच अनुरोध बॉडी के सत्यापन से पहले
        चलती है, इसलिए एक अयोग्य सत्र तब भी `Wrong Current Status` त्रुटि लौटाता
        है जब payload भी अमान्य हो।


        `Resubmitted` के लिए, यह चुनने के लिए `nodes_to_resubmit` पास करें कि
        उपयोगकर्ता को किन वर्कफ़्लो चरणों को फिर से करना होगा, या पुनः सबमिट
        करने योग्य स्थिति (`Declined`, `In Review`, `Not Finished`, `Expired`)
        में मौजूदा सुविधा प्रयासों को स्वतः-चुनने के लिए इसे छोड़ दें। कभी
        प्रयास नहीं की गई सुविधाओं को स्वतः-चयनित नहीं किया जाता है: उन्हें
        `nodes_to_resubmit` में स्पष्ट रूप से सूचीबद्ध करें, अन्यथा जब किसी
        रिकॉर्ड किए गए प्रयास को पुनः सबमिशन की आवश्यकता नहीं होती है तो अनुरोध
        `400` लौटाता है। चयनित चरणों के पिछले परिणाम पुनः सबमिशन के इतिहास (Get
        Decision द्वारा `include=resubmissions` के साथ लौटाए गए) में स्थानांतरित
        हो जाते हैं, वर्कफ़्लो ग्राफ़ से मिलान करने के लिए चरणों को
        पुनर्व्यवस्थित किया जाता है, सत्र की समाप्ति विंडो पुनः प्रारंभ हो जाती
        है, और मूल सत्यापन URL फिर से उपयोग योग्य हो जाता है। सूची के शीर्ष पर
        केवल-बैकएंड चरण (`AML`, `DATABASE_VALIDATION`, `IP_ANALYSIS`) बिना
        उपयोगकर्ता इंटरैक्शन के तुरंत चलते हैं; यदि प्रत्येक पुनः सबमिट किया गया
        चरण केवल-बैकएंड है, तो सत्र उसी अनुरोध के भीतर फिर से अंतिम रूप ले लेता
        है। `KYB_REGISTRY` और `KYB_KEY_PEOPLE` को सीधे पुनः सबमिट नहीं किया जा
        सकता है: इसके बजाय संबंधित चाइल्ड KYC सत्रों को पुनः सबमिट करें और
        पैरेंट व्यवसाय सत्र स्वचालित रूप से पुनर्गणना करता है।


        स्थिति बदलने वाली प्रत्येक कॉल परिवर्तन कमिट होने के बाद
        `status.updated` [webhook](/hi/integration/webhooks) को ट्रिगर करती है
        और सत्र की `reviews` में एक गतिविधि प्रविष्टि (एक्टर एट्रिब्यूशन और आपकी
        `comment` के साथ) जोड़ती है, जो [Get
        Decision](#get-/v3/session/-sessionId-/decision/) और कंसोल गतिविधि
        टाइमलाइन में दिखाई देती है। सत्र के `vendor_data` से जुड़े
        उपयोगकर्ता-प्रोफ़ाइल एग्रीगेट्स भी अपडेट होते हैं। अस्वीकार करने से सत्र
        के लिए सतत AML निगरानी अक्षम हो जाती है; पुनः स्वीकृत करने से यह फिर से
        सक्षम हो जाती है (`Resubmitted`, `Declined`, या `Kyc Expired` से) जब
        वर्कफ़्लो में निगरानी चालू होती है। KYB प्रमुख व्यक्ति जाँच से संबंधित
        चाइल्ड KYC को स्वीकृत या अस्वीकृत करने से पैरेंट व्यवसाय सत्र की स्थिति
        की पुनर्गणना होती है। उपयोगकर्ता को सूचित करने के लिए `send_email: true`
        (`email_address` के साथ) सेट करें: `Approved`/`Declined` के लिए एक
        स्थिति नोटिस, या `Resubmitted` के लिए सत्यापन लिंक और प्रति-चरण कारणों
        वाला एक पुनः सबमिशन ईमेल। पहले ईमेल की जाँच करने के लिए, [Preview
        Decision Email](/hi/sessions-api/preview-decision-email) (`Approved`,
        `Declined`) या [Preview Resubmission
        Email](/hi/sessions-api/preview-resubmission) (`Resubmitted`) के साथ
        इसका पूर्वावलोकन करें और इसके `preview_token` को `email_preview_token`
        के रूप में पास करें: अपडेट तब ठीक वही पूर्वावलोकन किया गया ईमेल भेजता
        है, या पूर्वावलोकन के बाद ईमेल या सत्र बदलने पर अथवा रसीद 15 मिनट से
        अधिक पुरानी होने पर कुछ भी बदलने से पहले `409` लौटाता है।


        जिस सत्र में पहले से ही वह स्थिति है, उस पर `Approved` या `Declined` को
        दोहराने से कुछ नहीं बदलता है और `200` लौटता है: कोई webhook नहीं, कोई
        गतिविधि प्रविष्टि नहीं और कोई ईमेल नहीं। `Resubmitted` को दोहराने पर
        `400` (`The new status is the same as the current status.`) लौटता है।
        अनुपलब्ध या अमान्य क्रेडेंशियल और अनुपलब्ध अनुमतियाँ `403` लौटाती हैं;
        एक समाप्त हो चुकी स्कोप्ड API कुंजी `401` लौटाती है।
      operationId: patch_v3_session_update_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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - new_status
              properties:
                new_status:
                  type: string
                  description: >-
                    लक्षित स्थिति। `Approved` और `Declined` एक अंतिम मैन्युअल
                    निर्णय रिकॉर्ड करते हैं (प्रत्येक दूसरे को पलट भी सकता है)।
                    `Resubmitted` चयनित चरणों को साफ़ करता है और सत्र को वापस
                    उपयोगकर्ता के पास भेज देता है। कोई भी अन्य मान `400` लौटाता
                    है।
                  enum:
                    - Approved
                    - Declined
                    - Resubmitted
                  example: Approved
                comment:
                  type: string
                  description: >-
                    बदलाव का मुक्त-पाठ कारण, जो सत्र के समीक्षा ट्रेल पर
                    संग्रहीत होता है और [Get
                    Decision](#get-/v3/session/-sessionId-/decision/) के
                    `reviews` ऐरे में लौटाया जाता है। उदाहरण के लिए `Duplicated
                    user`।
                  example: All checks passed manual review
                nodes_to_resubmit:
                  type: array
                  description: >-
                    वर्कफ़्लो चरण जिन्हें उपयोगकर्ता को फिर से करना होगा। केवल
                    तभी कार्रवाई की जाती है जब `new_status` `Resubmitted` हो।
                    `Approved`/`Declined` के लिए प्रविष्टियाँ अभी भी
                    स्कीमा-सत्यापित होती हैं (एक अमान्य `feature` मान `400`
                    लौटाता है) लेकिन स्कीमा-वैध प्रविष्टियों को सिमेंटिक रूप से
                    अनदेखा कर दिया जाता है। यदि छोड़ दिया जाता है, तो सर्वर
                    मौजूदा OCR, लाइवनेस, चेहरा मिलान, POA, फ़ोन, ईमेल, AML,
                    डेटाबेस सत्यापन, और प्रश्नावलियाँ प्रयासों का स्वतः चयन करता
                    है जिनकी स्थिति `Declined`, `In Review`, `Not Finished`, या
                    `Expired` है (NFC, IP विश्लेषण, आयु अनुमान, चेहरा खोज, और
                    KYB दस्तावेज़ प्रयासों का कभी भी स्वतः चयन नहीं किया जाता
                    है; चेहरा मिलान के अलावा वाले चेहरे के प्रयासों को
                    `LIVENESS` के रूप में चुना जाता है) — वे सुविधाएँ जिनका
                    उपयोगकर्ता ने कभी प्रयास नहीं किया (कोई रिकॉर्ड किया गया
                    प्रयास नहीं) चुनी नहीं जाती हैं, इसलिए शून्य प्रयासों वाला
                    सत्र `400` लौटाता है ("No features found that need
                    resubmission") भले ही कुछ भी स्वीकृत न हुआ हो; उस स्थिति में
                    स्पष्ट रूप से `nodes_to_resubmit` पास करें। चरण
                    वर्कफ़्लो-ग्राफ़ क्रम में निष्पादित होते हैं, भले ही आप
                    उन्हें किसी भी क्रम में भेजें। `KYB_REGISTRY`,
                    `KYB_KEY_PEOPLE`, और `KYB` उपनाम को `400` के साथ अस्वीकार कर
                    दिया जाता है — वे पैरेंट जाँचें अपने चाइल्ड KYC सत्रों से
                    पुनर्गणना करती हैं।
                  items:
                    type: object
                    required:
                      - node_id
                      - feature
                    properties:
                      node_id:
                        type: string
                        description: >-
                          सत्र के वर्कफ़्लो परिभाषा में प्रदर्शित नोड पहचानकर्ता
                          (उदाहरण के लिए `feature_ocr`, `feature_liveness`)।
                        example: feature_ocr
                      feature:
                        type: string
                        description: >-
                          नोड का सुविधा प्रकार। उपनाम `ID_VERIFICATION`, `POA`,
                          `PHONE`, और `EMAIL` सर्वर-साइड पर `OCR`,
                          `PROOF_OF_ADDRESS`, `PHONE_VERIFICATION`, और
                          `EMAIL_VERIFICATION` में सामान्यीकृत हो जाते हैं।
                          `KYB_REGISTRY`, `KYB_KEY_PEOPLE`, और `KYB` स्कीमा
                          सत्यापन पास करते हैं लेकिन हमेशा उदाहरणों में दिखाए गए
                          बिज़नेस-नियम `400` के साथ अस्वीकार कर दिए जाते हैं।
                        enum:
                          - OCR
                          - OCR_BACK
                          - NFC
                          - AML
                          - FACE
                          - LIVENESS
                          - FACE_MATCH
                          - IP_ANALYSIS
                          - AGE_ESTIMATION
                          - PROOF_OF_ADDRESS
                          - PHONE_VERIFICATION
                          - EMAIL_VERIFICATION
                          - FACE_SEARCH
                          - DATABASE_VALIDATION
                          - QUESTIONNAIRE
                          - DOCUMENT_AI
                          - KYB_DOCUMENTS
                          - ID_VERIFICATION
                          - POA
                          - PHONE
                          - EMAIL
                          - KYB_REGISTRY
                          - KYB_KEY_PEOPLE
                          - KYB
                          - GEOLOCATION
                        example: OCR
                send_email:
                  type: boolean
                  description: >-
                    क्या उपयोगकर्ता को इस बदलाव के बारे में ईमेल भेजा जाए। इसके
                    लिए `email_address` आवश्यक है। `Approved`/`Declined` के लिए
                    उपयोगकर्ता को स्थिति सूचना प्राप्त होती है; `Resubmitted` के
                    लिए ईमेल में सत्यापन लिंक और प्रत्येक चरण के लिए पुनः सबमिशन
                    के कारण शामिल होते हैं।
                  default: false
                  example: false
                email_address:
                  type: string
                  format: email
                  description: >-
                    अधिसूचना ईमेल के लिए प्राप्तकर्ता। **जब `send_email` `true`
                    हो तो आवश्यक** — इसे छोड़ने पर `400` मिलता है।
                  example: user@example.com
                email_language:
                  type: string
                  description: >-
                    सूचना ईमेल के लिए भाषा। स्कीमा स्तर पर किसी भी स्ट्रिंग को
                    स्वीकार करता है; असमर्थित कोड बिना किसी सूचना के अंग्रेज़ी
                    (`en`) पर फ़ालबैक हो जाते हैं।
                  default: en
                  example: en
                email_preview_token:
                  type: string
                  writeOnly: true
                  minLength: 1
                  maxLength: 512
                  description: >-
                    [निर्णय ईमेल का पूर्वावलोकन
                    करें](/hi/sessions-api/preview-decision-email) (`Approved`
                    और `Declined` के लिए) या [पुनः सबमिशन ईमेल का पूर्वावलोकन
                    करें](/hi/sessions-api/preview-resubmission) (`Resubmitted`
                    के लिए) से वैकल्पिक रसीद: इसका `preview_token`। केवल
                    `send_email: true` के साथ मान्य; इसके बिना अनुरोध `400`
                    लौटाता है। प्राप्तकर्ता, भाषा, सत्र स्थिति, प्रेषक और ईमेल
                    (और पुनः सबमिशन के लिए, चयनित चरण) अभी भी पूर्वावलोकन से मेल
                    खाने चाहिए, और रसीद 15 मिनट के बाद समाप्त हो जाती है। अन्यथा
                    सत्र बदलने या ईमेल भेजे जाने से पहले अनुरोध `409` लौटाता है।
                    मौजूदा इंटीग्रेशन इस फ़ील्ड को छोड़ सकते हैं।
            examples:
              Approve Session:
                summary: मैन्युअल समीक्षा के बाद एक सत्र स्वीकृत करें
                value:
                  new_status: Approved
                  comment: All checks passed manual review
              Decline Session:
                summary: एक सत्र को अस्वीकृत करें
                value:
                  new_status: Declined
                  comment: Suspected fraud
              Resubmit Specific Steps:
                summary: ईमेल के साथ, चुने गए चरणों के पुनः सबमिशन का अनुरोध करें
                value:
                  new_status: Resubmitted
                  nodes_to_resubmit:
                    - node_id: feature_ocr
                      feature: OCR
                    - node_id: feature_liveness
                      feature: LIVENESS
                  send_email: true
                  email_address: user@example.com
                  email_language: en
              Resubmit Auto-select:
                summary: पुनः सबमिशन का अनुरोध करें (गैर-स्वीकृत चरणों को स्वतः चुनें)
                value:
                  new_status: Resubmitted
              Approve With Previewed Email:
                summary: >-
                  निर्णय ईमेल पूर्वावलोकन द्वारा लौटाए गए ईमेल को स्वीकृत करें
                  और भेजें
                value:
                  new_status: Approved
                  send_email: true
                  email_address: person@example.com
                  email_language: en
                  email_preview_token: >-
                    eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
      responses:
        '200':
          description: >-
            स्टेटस अपडेट किया गया। रिस्पॉन्स में केवल `session_id` होता है;
            [निर्णय प्राप्त करें](#get-/v3/session/-sessionId-/decision/) के
            माध्यम से अपडेट किया गया सत्र प्राप्त करें। बदलाव कमिट होने पर
            `status.updated` webhook ट्रिगर होता है। `Approved` या `Declined` को
            दोहराने पर वही बॉडी वापस आती है और कुछ नहीं बदलता है।
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_id:
                    type: string
                    format: uuid
                    description: अपडेट किए गए सत्र का UUID।
              examples:
                Updated:
                  summary: >-
                    स्वीकृत, अस्वीकृत और पुनः सबमिट किए गए सभी के लिए समान रूप
                    से लौटाया जाता है
                  value:
                    session_id: 3472fb7c-8f7c-4d1a-9cf4-cf3d74ce1a60
        '400':
          description: >-
            सत्यापन त्रुटि। फ़ील्ड त्रुटियां `{"<field>": ["<message>"]}` के रूप
            में आती हैं (कुछ व्यवसाय-नियम अस्वीकृतियां इसके बजाय एक स्ट्रिंग मान
            का उपयोग करती हैं: `{"nodes_to_resubmit": "<message>"}`),
            क्रॉस-स्टेट त्रुटियां `{"detail": "<message>"}` के रूप में, और
            समान-स्थिति त्रुटि एक सादे JSON array के रूप में आती है।
          content:
            application/json:
              examples:
                Wrong Current Status:
                  summary: सत्र अपडेट करने योग्य स्थिति में नहीं है
                  value:
                    detail: >-
                      Only sessions with status Approved, Declined, In Review,
                      Kyc Expired, Abandoned, Resubmitted can be updated.
                      Current status: In Progress
                Invalid Status Value:
                  summary: >-
                    new_status एक वास्तविक सत्र स्थिति है लेकिन
                    Approved/Declined/Resubmitted में से एक नहीं है
                  value:
                    new_status:
                      - >-
                        You can only update the status to 'Approved',
                        'Declined', or 'Resubmitted'.
                Missing new_status:
                  summary: आवश्यक फ़ील्ड छोड़ा गया
                  value:
                    new_status:
                      - This field is required.
                Same Status:
                  summary: >-
                    ऐसे सत्र पर पुनः सबमिशन का अनुरोध किया गया जो पहले से ही
                    Resubmitted है
                  value:
                    - The new status is the same as the current status.
                Email Address Required:
                  summary: email_address के बिना send_email true है
                  value:
                    email_address:
                      - Email address is required when send_email is true.
                Non-resubmittable Feature:
                  summary: पुनः सबमिट करना KYB पैरेंट चेक को लक्षित करता है
                  value:
                    nodes_to_resubmit: >-
                      The following features cannot be resubmitted directly:
                      KYB_REGISTRY. Resubmit the relevant child KYC sessions
                      instead; the parent will recompute automatically.
                Nothing To Resubmit:
                  summary: स्वतः-चयन को कोई गैर-स्वीकृत सुविधा नहीं मिली
                  value:
                    nodes_to_resubmit: >-
                      No features found that need resubmission. All features are
                      already approved.
                Invalid Feature Choice:
                  summary: nodes_to_resubmit में अज्ञात सुविधा
                  value:
                    nodes_to_resubmit:
                      - feature:
                          - >-
                            "BOGUS" is not a valid choice. Valid choices are:
                            OCR, OCR_BACK, NFC, AML, FACE, LIVENESS, FACE_MATCH,
                            IP_ANALYSIS, AGE_ESTIMATION, PROOF_OF_ADDRESS,
                            PHONE_VERIFICATION, EMAIL_VERIFICATION, FACE_SEARCH,
                            DATABASE_VALIDATION, QUESTIONNAIRE, KYB_REGISTRY,
                            KYB_DOCUMENTS, KYB_KEY_PEOPLE, ID_VERIFICATION, POA,
                            PHONE, EMAIL, KYB
                Invalid Status Value (not a status at all):
                  summary: new_status एक मान्य StatusChoices मान नहीं है
                  value:
                    new_status:
                      - '"Bogus" is not a valid choice.'
                Preview Receipt Without Email:
                  summary: 'email_preview_token को send_email: true के बिना भेजा गया'
                  value:
                    email_preview_token:
                      - A preview receipt is only valid when the email is sent.
        '401':
          description: स्कोप्ड API कुंजी की समय-सीमा समाप्त हो गई है।
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: अपनी समाप्ति तिथि पार कर चुकी स्कोप्ड API कुंजी
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            क्रेडेंशियल मौजूद नहीं हैं या अपर्याप्त अनुमतियां हैं, या ऐसा
            `session_id` है जो किसी अन्य एप्लिकेशन का है।
          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.
        '404':
          description: >-
            इस `session_id` वाला कोई KYC या KYB सत्र मौजूद नहीं है (हटाए गए सत्र
            भी `404` लौटाते हैं)।
          content:
            application/json:
              examples:
                Not Found:
                  summary: अज्ञात session_id
                  value:
                    detail: Not found.
        '409':
          description: >-
            ईमेल पूर्वावलोकन बदल गया या उसकी समय-सीमा समाप्त हो गई। पुष्टि करने
            से पहले एक नया पूर्वावलोकन जनरेट करें; कोई सत्र परिवर्तन या ईमेल
            डिलीवरी नहीं होती है।
          content:
            application/json:
              examples:
                Preview Changed:
                  summary: रसीद अब मेल नहीं खाती, या 15 मिनट से अधिक पुरानी है
                  value:
                    detail: >-
                      This email preview changed or expired. Preview the message
                      again before confirming.
        '429':
          description: >-
            केवल बैकएंड सुविधाओं (AML, DATABASE_VALIDATION, IP_ANALYSIS) को
            लक्षित करने वाला पुनः सबमिशन 30-सेकंड की कूलडाउन विंडो के भीतर
            दोहराया गया था; तत्काल दोहराव परिणाम को नहीं बदल सकता। बैक ऑफ़ करें
            और `Retry-After` में बताए गए अंतराल के बाद पुनः प्रयास करें।
          content:
            application/json:
              examples:
                Backend-only resubmit throttled:
                  value:
                    detail: >-
                      This session was already resubmitted for backend-only
                      features within the last 30 seconds; repeating it cannot
                      change the outcome. Wait before resubmitting again.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X PATCH \
              https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/update-status/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "new_status": "Approved",
                "comment": "All checks passed manual review"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.update_status(
                "11111111-2222-3333-4444-555555555555",
                new_status="Approved",
                comment="All checks passed manual review",
            )
            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.updateStatus("11111111-2222-3333-4444-555555555555",
            {
              new_status: "Approved",
              comment: "All checks passed manual review",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateStatus(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsUpdateStatusParams{\n\tNewStatus: \"Approved\",\n\tComment:   didit.String(\"All checks passed manual review\"),\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.SessionsUpdateStatusParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().updateStatus("11111111-2222-3333-4444-555555555555",
            SessionsUpdateStatusParams.builder()
                    .newStatus(SessionsUpdateStatusParams.NewStatus.of("Approved"))
                    .comment("All checks passed manual review")
                    .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->updateStatus('11111111-2222-3333-4444-555555555555',
            [
                'new_status' => 'Approved',
                'comment' => 'All checks passed manual review',
            ]);

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

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

            result = didit.sessions.update_status(
              "11111111-2222-3333-4444-555555555555",
              new_status: "Approved",
              comment: "All checks passed manual review"
            )
            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.UpdateStatusAsync("11111111-2222-3333-4444-555555555555",
            new SessionsUpdateStatusParams

            {
                NewStatus = "Approved",
                Comment = "All checks passed manual review",
            });

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

````

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