> ## 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 की सभी सत्र स्थितियाँ समझाई गई हैं: स्वीकृत, अस्वीकृत, समीक्षाधीन, समय-सीमा समाप्त, पुनः जमा, छोड़ा गया, KYC समय-सीमा समाप्त। निर्णय और webhook संभालें।

हर सत्यापन सत्र कई स्थितियों से होकर गुजरता है। इन्हें समझने से आप उपयोगकर्ता की प्रगति पर नज़र रख सकते हैं, अनुपालन निर्णयों को स्वचालित कर सकते हैं और कन्वर्ज़न दर को बेहतर बना सकते हैं।

यह एनम `GET /v3/session/<id>/decision/` और हर Didit webhook द्वारा लौटाई गई स्ट्रिंग्स का एकमात्र स्रोत है।

***

## सभी स्थिति मान

> [!NOTE]
>
> हर स्थिति Didit API और webhooks द्वारा लौटाई गई एक **सटीक स्ट्रिंग** है। अपने कोड में हमेशा सख़्त स्ट्रिंग मिलान का उपयोग करें (जैसे `=== "In Review"`)। ये मान केस-सेंसिटिव हैं और इनमें स्पेस शामिल हैं। `Kyc Expired` मान में केवल पहला अक्षर `K` बड़ा है, बाकी अक्षर छोटे हैं (`KYC` नहीं)।

| स्थिति | स्ट्रिंग मान | विवरण |
| - | - | - |
| शुरू नहीं हुआ | `"Not Started"` | सत्र बनाया गया है, उपयोगकर्ता ने लिंक नहीं खोला है |
| प्रगति में | `"In Progress"` | उपयोगकर्ता सक्रिय रूप से सत्यापन पूरा कर रहा है |
| स्वीकृत | `"Approved"` | सभी जाँचें पास हो गई हैं, पहचान सत्यापित है |
| अस्वीकृत | `"Declined"` | एक या अधिक जाँचें विफल रहीं |
| समीक्षाधीन | `"In Review"` | मैन्युअल अनुपालन समीक्षा के लिए चिह्नित |
| उपयोगकर्ता की प्रतीक्षा | `"Awaiting User"` | एक या अधिक पक्षों के अपना सत्यापन पूरा करने की प्रतीक्षा (KYB) |
| पुनः सबमिट किया गया | `"Resubmitted"` | उपयोगकर्ता ने कुछ विशेष चरण दोबारा करने का अनुरोध किया |
| समय-सीमा समाप्त | `"Expired"` | उपयोगकर्ता द्वारा लिंक खोलने से पहले सत्र का समय समाप्त हो गया |
| छोड़ा गया | `"Abandoned"` | उपयोगकर्ता ने शुरू किया लेकिन समय पर पूरा नहीं किया |
| KYC समय-सीमा समाप्त | `"Kyc Expired"` | ऐसा सत्र जिसे पहले स्वीकृत किया गया था और जिसका सत्यापित दस्तावेज़ अपनी समाप्ति तिथि पार कर चुका है |

***

## सत्र स्थितियाँ

> [accordion] शुरू नहीं हुआ: "Not Started"
>
> **API मान:** `"Not Started"`
>
> सत्र API के ज़रिए बनाया गया है, लेकिन उपयोगकर्ता **ने अभी सत्यापन लिंक नहीं खोला है**।
>
> * **क्या करें:** उपयोगकर्ता के शुरू करने का इंतज़ार करें, या अगर काफ़ी समय बीत जाए तो अनुस्मारक भेजें।
> * **इनमें बदलता है:** `"In Progress"`, `"Expired"`

> [accordion] प्रगति में: "In Progress"
>
> **API मान:** `"In Progress"`
>
> उपयोगकर्ता ने लिंक खोल लिया है और वह **सक्रिय रूप से सत्यापन चरण पूरे कर रहा है** (दस्तावेज़ कैप्चर, लाइवनेस आदि)।
>
> * **क्या करें:** कोई कार्रवाई ज़रूरी नहीं है, उपयोगकर्ता प्रक्रिया पूरी कर रहा है।
> * **इनमें बदलता है:** `"Approved"`, `"Declined"`, `"In Review"`, `"Abandoned"`

> [accordion] स्वीकृत: "Approved"
>
> **API मान:** `"Approved"`
>
> सभी सत्यापन जाँचें **सफलतापूर्वक पास** हो गई हैं। उपयोगकर्ता की पहचान सत्यापित हो गई है।
>
> * **क्या करें:** उपयोगकर्ता को पहुँच दें, उसकी प्रोफ़ाइल अपडेट करें, और निर्णय का डेटा संग्रहीत करें।
> * **webhook में शामिल है:** सभी सुविधा परिणामों वाला पूरा `decision` ऑब्जेक्ट।
> * **इनमें बदलता है:** `"Kyc Expired"` (जब सत्यापित दस्तावेज़ की समाप्ति तिथि निकल जाती है)। यही डिफ़ॉल्ट व्यवहार है, जब तक उस देश और दस्तावेज़ प्रकार के लिए **Expiration mode** **Allow expired** पर सेट न हो। कोई समीक्षक या update-status endpoint इसे `"Declined"` या `"Resubmitted"` पर भी सेट कर सकता है।

> [accordion] अस्वीकृत: "Declined"
>
> **API मान:** `"Declined"`
>
> एक या अधिक सत्यापन जाँचें **विफल** हो गई हैं। उपयोगकर्ता सत्यापन पास नहीं कर पाया।
>
> * **क्या करें:** उपयोगकर्ता को सूचित करें। अगर समस्या ठीक की जा सकती है, तो वैकल्पिक रूप से पुनः जमा करने का अनुरोध करें।
> * **webhook में शामिल है:** विफलता की व्याख्या करने वाली चेतावनियों के साथ पूरा `decision` ऑब्जेक्ट।
> * **इनमें बदलता है:** `"Resubmitted"` (अगर कोई समीक्षक इसका अनुरोध करे)। कोई समीक्षक या update-status endpoint इसे `"Approved"` पर भी सेट कर सकता है।

> [accordion] समीक्षाधीन: "In Review"
>
> **API मान:** `"In Review"`
>
> स्वचालित जाँचों ने **मानवीय समीक्षा की ज़रूरत वाली चेतावनियाँ** चिह्नित की हैं। अंतिम निर्णय एक अनुपालन समीक्षक को लेना होगा।
>
> * **क्या करें:** समीक्षक को Console में सत्र खोलकर उसे स्वीकृत करना, अस्वीकृत करना, या पुनः जमा करने का अनुरोध करना चाहिए।
> * **webhook में शामिल है:** चेतावनियों वाला पूरा `decision` ऑब्जेक्ट।
> * **इनमें बदलता है:** `"Approved"`, `"Declined"`, `"Resubmitted"`

> [accordion] उपयोगकर्ता की प्रतीक्षा: "Awaiting User"
>
> **API मान:** `"Awaiting User"`
>
> **व्यवसाय सत्यापन (KYB) सत्रों** में इसका उपयोग होता है, जब Key People चरण ने पक्षों की सूची जमा कर दी हो और चाइल्ड KYC / KYB सत्र बन गए हों। पैरेंट सत्र तब तक प्रतीक्षा करता है जब तक **सभी आवश्यक पक्ष अपना अलग सत्यापन पूरा नहीं कर लेते**।
>
> * **क्या करें:** चाइल्ड KYC सत्रों की स्थिति पर नज़र रखें। जब सभी आवश्यक पक्षों के सत्र पूरे हो जाएँ (स्वीकृत, अस्वीकृत या समय-सीमा समाप्त स्थिति में पहुँच जाएँ), तो पैरेंट सत्र अपनी अंतिम स्थिति के अनुसार परिणामों को स्वतः फिर से समेकित करता है।
> * **webhook में शामिल है:** पक्षों की वर्तमान सूची और उनके चाइल्ड सत्रों की स्थितियाँ।
> * **इनमें बदलता है:** `"Approved"`, `"Declined"`, `"In Review"` (जब सभी चाइल्ड सत्र अंतिम स्थिति में हों)
> * **इनसे बदलता है:** `"In Progress"` (Key People चरण जमा होने के बाद)
> * **नोट:** अगर किसी चाइल्ड KYC सत्र को पुनः जमा किया जाता है, तो पैरेंट तब तक `"Awaiting User"` पर लौट आता है जब तक पुनः जमा किया गया सत्र पूरा न हो। `"Declined"` KYB Registry Check, `"Awaiting User"` पर प्राथमिकता रखता है।

> [accordion] पुनः जमा किया गया: "Resubmitted"
>
> **API मान:** `"Resubmitted"`
>
> एक समीक्षक ने अनुरोध किया है कि उपयोगकर्ता **कुछ विशेष सत्यापन चरण दोबारा करे** (जैसे धुंधले दस्तावेज़ की फ़ोटो दोबारा लेना)।
>
> * **क्या करें:** उपयोगकर्ता के पुनः जमा किए गए चरण पूरे होने का इंतज़ार करें। सिस्टम स्वचालित रूप से दोबारा मूल्यांकन करेगा।
> * **webhook में शामिल है:** उन सुविधाओं और कारणों की सूची वाला `resubmit_info` ऑब्जेक्ट जिन्हें दोबारा करना है।
> * **इनमें बदलता है:** `"Approved"`, `"Declined"`, `"In Review"`, या `"Abandoned"` (जब व्यक्ति चरण दोबारा पूरे करने से पहले सत्र की अवधि समाप्त हो जाए)।

> [accordion] समय-सीमा समाप्त: "Expired"
>
> **API मान:** `"Expired"`
>
> उपयोगकर्ता द्वारा सत्यापन लिंक खोलने से पहले ही सत्र का समय समाप्त हो गया।
>
> * **क्या करें:** नया सत्र बनाएँ और उपयोगकर्ता को ताज़ा लिंक भेजें।
> * **अंतिम स्थिति:** इसके आगे कोई बदलाव नहीं होता।

> [accordion] छोड़ा गया: "Abandoned"
>
> **API मान:** `"Abandoned"`
>
> उपयोगकर्ता ने सत्यापन शुरू किया, लेकिन तय समय-सीमा के भीतर **उसे पूरा नहीं किया**।
>
> * **क्या करें:** अनुस्मारक भेजें या नया सत्र बनाएँ।
> * **कोई स्वचालित बदलाव नहीं।** कोई समीक्षक, या `PATCH /v3/session/{sessionId}/update-status/`, इसे अब भी `"Approved"`, `"Declined"` या `"Resubmitted"` पर सेट कर सकता है।

> [accordion] KYC समय-सीमा समाप्त: "Kyc Expired"
>
> **API मान:** `"Kyc Expired"`
>
> सत्र के दौरान सत्यापित किया गया दस्तावेज़ **अपनी समाप्ति तिथि पार कर चुका है**। ट्रिगर वह तिथि है, स्वीकृति से मापी गई कोई अवधि नहीं, और पहले से कोई चेतावनी नहीं भेजी जाती।
>
> * **क्या करें:** उपयोगकर्ता से नए सत्र के ज़रिए पुनः सत्यापन करने को कहें। `status.updated` यह बदलाव भेजता है, और पहचान सत्यापन परिणाम में `DOCUMENT_EXPIRED` चेतावनी होती है।
> * **नियंत्रित होता है:** *पहचान सत्यापन → देश और दस्तावेज़ प्रकार के अनुसार अतिरिक्त सेटिंग्स* में उस देश और दस्तावेज़ प्रकार की **Expiration mode** से। **Reject expired** (डिफ़ॉल्ट) दस्तावेज़ की निगरानी करता है, जबकि **Allow expired** का अर्थ है कि सत्र कभी इस स्थिति में नहीं जाता।
> * **कोई स्वचालित बदलाव नहीं।** कोई समीक्षक, या `PATCH /v3/session/{sessionId}/update-status/`, इसे अब भी `"Approved"`, `"Declined"` या `"Resubmitted"` पर सेट कर सकता है।

***

## स्थिति परिवर्तन

| से | तक | ट्रिगर |
| - | - | - |
| `"Not Started"` | `"In Progress"` | उपयोगकर्ता सत्यापन लिंक खोलता है |
| `"Not Started"` | `"Expired"` | उपयोगकर्ता के लिंक खोलने से पहले सत्र का TTL समाप्त हो जाता है |
| `"In Progress"` | `"Approved"` | सभी स्वचालित जाँचें पास हो जाती हैं |
| `"In Progress"` | `"Declined"` | एक या अधिक जाँचें विफल हो जाती हैं |
| `"In Progress"` | `"In Review"` | जाँचें मानवीय समीक्षा की आवश्यकता वाली चेतावनियाँ दर्शाती हैं |
| `"In Progress"` | `"Awaiting User"` | KYB का प्रमुख व्यक्ति चरण जमा हो गया; पैरेंट चाइल्ड KYC पक्षों की प्रतीक्षा करता है |
| `"In Progress"` | `"Abandoned"` | उपयोगकर्ता निर्धारित समय सीमा के भीतर प्रक्रिया पूरी नहीं करता |
| `"Awaiting User"` | `"Approved"` | सभी आवश्यक KYB पक्ष प्रक्रिया पूरी कर लेते हैं और समेकित जाँचें पास हो जाती हैं |
| `"Awaiting User"` | `"Declined"` | किसी आवश्यक पक्ष को अस्वीकृत कर दिया जाता है या KYB रजिस्ट्री जाँच विफल हो जाती है |
| `"Awaiting User"` | `"In Review"` | समेकित KYB परिणाम के लिए मैन्युअल समीक्षा आवश्यक है |
| `"In Review"` | `"Approved"` | समीक्षक मैन्युअल रूप से स्वीकृत करता है |
| `"In Review"` | `"Declined"` | समीक्षक मैन्युअल रूप से अस्वीकृत करता है |
| `"In Review"` | `"Resubmitted"` | समीक्षक कुछ विशेष चरणों को दोबारा करने का अनुरोध करता है |
| `"Declined"` | `"Resubmitted"` | समीक्षक कुछ विशेष चरणों को दोबारा करने का अनुरोध करता है |
| `"Approved"` | `"Resubmitted"` | समीक्षक कुछ विशेष चरणों को दोबारा करने का अनुरोध करता है |
| `"Approved"` | `"Declined"` | समीक्षक या API दूसरा निर्णय सेट करता है |
| `"Declined"` | `"Approved"` | समीक्षक या API दूसरा निर्णय सेट करता है |
| `"Abandoned"`, `"Kyc Expired"` | `"Approved"`, `"Declined"`, `"Resubmitted"` | समीक्षक या API ऐसे सत्र पर निर्णय लेता है जो बिना निर्णय के समाप्त हो गया था |
| `"Resubmitted"` | `"Abandoned"` | व्यक्ति चरण दोबारा करने से पहले सत्र की अवधि समाप्त हो जाती है |
| `"Resubmitted"` | `"Approved"` | पुनः सबमिट किए गए चरण सभी जाँचें पास कर लेते हैं |
| `"Resubmitted"` | `"Declined"` | पुनः सबमिट किए गए चरण विफल हो जाते हैं |
| `"Resubmitted"` | `"In Review"` | पुनः सबमिट किए गए चरण नई चेतावनियाँ दर्शाते हैं |
| `"Resubmitted"` (KYB child) | `"Awaiting User"` (KYB parent) | चाइल्ड पूरा होने तक पैरेंट फिर से प्रतीक्षा स्थिति में चला जाता है |
| `"Approved"` | `"Kyc Expired"` | सत्यापित दस्तावेज़ की समाप्ति तिथि निकल जाती है (Expiration mode **Reject expired** पर है) |

### जीवनचक्र आरेख

```mermaid theme={null}
flowchart LR
    NS["Not Started"] --> IP["In Progress"]
    NS --> EX["Expired"]
    IP --> AP["Approved"]
    IP --> DC["Declined"]
    IP --> IR["In Review"]
    IP --> AU["Awaiting User<br/>(KYB only)"]
    IP --> AB["Abandoned"]
    AU --> AP
    AU --> DC
    AU --> IR
    IR --> AP
    IR --> DC
    IR --> RS["Resubmitted"]
    DC --> RS
    AP --> RS
    AP <--> DC
    AB --> AP
    AB --> DC
    AB --> RS
    KE --> AP
    KE --> DC
    KE --> RS
    RS --> AB
    RS --> AP
    RS --> DC
    RS --> IR
    AP --> KE["Kyc Expired"]
```

***

## टर्मिनल बनाम गैर-टर्मिनल

| श्रेणी | स्थितियाँ | अर्थ |
| - | - | - |
| **निर्णयित** | `"Approved"`, `"Declined"`, `"Kyc Expired"` | जाँचों ने एक निर्णय दिया है, और इसे अपने आप कुछ नहीं बदलता, सिवाय इसके कि जब सत्यापित दस्तावेज़ की समाप्ति तिथि निकल जाए तो `"Approved"` से `"Kyc Expired"` हो जाता है। समीक्षक या update-status endpoint अब भी निर्णय बदल सकता है। |
| **गैर-टर्मिनल** | `"Not Started"`, `"In Progress"`, `"Resubmitted"`, `"Awaiting User"` | अब भी सक्रिय हैं: उपयोगकर्ता की कार्रवाई, चाइल्ड सत्रों या प्रसंस्करण की प्रतीक्षा में हैं। |
| **कार्रवाईयोग्य** | `"In Review"` | इसके लिए आपकी टीम की मैन्युअल कार्रवाई आवश्यक है। |
| **निष्क्रिय** | `"Expired"`, `"Abandoned"` | बिना सत्यापन निर्णय के समाप्त हो गए। `"Expired"` कभी नहीं बदलता; समीक्षक अब भी `"Abandoned"` सत्र पर निर्णय ले सकता है। |

***

## आपके कोड में स्थितियों को संभालना

स्थिति परिवर्तनों पर प्रतिक्रिया देने के लिए webhook या [Retrieve Session API](https://docs.didit.me/hi/sessions-api/retrieve-session.md) का उपयोग करें।

> [!WARNING]
>
> स्थितियाँ **सटीक, केस-संवेदी स्ट्रिंग हैं जिनमें रिक्त स्थान होते हैं**। उदाहरण के लिए, `"In Review"` (`"in_review"` या `"IN_REVIEW"` नहीं)। मिलान करते समय हमेशा सख़्त समानता (`===`) का उपयोग करें।

```javascript theme={null}
// All ten possible status string values (StatusChoices, source of truth):
// "Not Started"  | "In Progress" | "Approved"     | "Declined" |
// "In Review"    | "Resubmitted" | "Awaiting User"|
// "Expired"      | "Abandoned"   | "Kyc Expired"

async function handleWebhook(webhook) {
  const { status, vendor_data: vendorData } = webhook;

  switch (status) {
    case "Not Started":
      // Session created but user hasn't opened the link yet
      break;

    case "In Progress":
      // User is actively completing verification steps
      break;

    case "Approved":
      // All checks passed — grant access
      await db.users.update(vendorData, {
        verified: true,
        verifiedAt: new Date(),
        decision: webhook.decision,
      });
      break;

    case "Declined":
      // Verification failed — notify user
      await db.users.update(vendorData, {
        verificationStatus: "declined",
        declineReasons: webhook.decision?.warnings,
      });
      break;

    case "In Review":
      // Needs manual review by compliance team
      await db.users.update(vendorData, {
        verificationStatus: "pending_review",
      });
      break;

    case "Awaiting User":
      // KYB parent waiting for all child KYC parties to finish
      await db.users.update(vendorData, {
        verificationStatus: "awaiting_kyb_parties",
      });
      break;

    case "Resubmitted":
      // User will redo specific steps
      await db.users.update(vendorData, {
        verificationStatus: "resubmission_pending",
        resubmitInfo: webhook.resubmit_info,
      });
      break;

    case "Abandoned":
      // User started but didn't finish — send reminder
      await sendReminderEmail(vendorData);
      break;

    case "Expired":
    case "Kyc Expired":
      // Session expired — create a new one
      await createNewSession(vendorData);
      break;
  }
}
```

***

## पुनः सबमिशन

**पुनः सबमिट की गई** स्थिति आपकी अनुपालन टीम को नया सत्र बनाए बिना उपयोगकर्ताओं को दूसरा मौका देने देती है।

**1. समीक्षक पुनः सबमिशन शुरू करता है**

Console से `In Review` या `Declined` सत्र खोलें और **पुनः सबमिशन का अनुरोध करें** पर क्लिक करें। वे चरण चुनें जिन्हें दोबारा करना है।

**2. पिछला डेटा संग्रहीत किया जाता है**

सिस्टम चुनी गई सुविधाएँ रीसेट करता है और पिछले डेटा को `previous_attempt` के रूप में चिह्नित करता है, ताकि पूरा ऑडिट ट्रेल सुरक्षित रहे।

**3. उपयोगकर्ता को सूचित किया जाता है**

यदि ईमेल उपलब्ध है, तो उपयोगकर्ता को स्थानीयकृत ईमेल मिलता है जिसमें जारी रखने के लिए सीधा लिंक होता है।

**4. उपयोगकर्ता विशेष चरण दोबारा करता है**

उपयोगकर्ता केवल वही चरण दोहराता है जिन्हें चिह्नित किया गया था, पूरा सत्यापन नहीं।

**5. सिस्टम दोबारा मूल्यांकन करता है**

पूरा होने पर, सत्र अपने आप `"Approved"`, `"Declined"`, या `"In Review"` में बदल जाता है।

### पुनः सबमिशन webhook payload

```json theme={null}
{
  "session_id": "uuid-of-the-session",
  "status": "Resubmitted",
  "resubmit_info": {
    "nodes_to_resubmit": [
      { "node_id": "feature_ocr", "feature": "OCR" },
      { "node_id": "feature_liveness", "feature": "LIVENESS" }
    ],
    "reasons": {
      "feature_ocr": "DOCUMENT_EXPIRED",
      "feature_liveness": "LOW_LIVENESS_SCORE"
    }
  }
}
```

`reasons` हर पुनः सबमिट किए गए `node_id` को उस चरण के सबसे प्रासंगिक लॉग के चेतावनी कोड से मैप करता है ([निर्णय](https://docs.didit.me/hi/reference/data-models.md) द्वारा दिए गए समान कोड), ताकि आप इसे अपने स्वयं के पाठ से मैप कर सकें। यही वह कोड है जिसे होस्टेड फ़्लो की पुनः सबमिशन स्क्रीन और पुनः सबमिशन ईमेल उपयोगकर्ता के लिए स्थानीयकृत करते हैं। इसका अपवाद वे चेतावनियाँ हैं जो स्क्रीनिंग या धोखाधड़ी संकेत प्रकट कर सकती हैं (डुप्लिकेट, AML, ब्लॉकलिस्ट, संगठनों के बीच जाँच, स्थान अखंडता और इसी तरह की): इनके लिए व्यक्ति को एक सामान्य कारण दिखाई देता है, और आपके webhook में `resubmit_info.reasons` हमेशा असली कोड रखता है। जिस चरण पर कोई चेतावनी दर्ज नहीं हुई, उसकी कोई प्रविष्टि नहीं होती।

### किन सुविधाओं को पुनः सबमिट किया जा सकता है?

कोई भी सुविधा जिसकी स्थिति स्वीकृत नहीं है: **अस्वीकृत**, **समीक्षाधीन**, **पूरी नहीं हुई**, **शुरू नहीं हुई**, या **समय-सीमा समाप्त**।

> [!TIP]
>
> आप एक ही सत्र पर कई बार पुनः सबमिशन का अनुरोध कर सकते हैं। हर चक्र पिछले प्रयास का डेटा संग्रहीत करता है, जिससे उपयोगकर्ता के सत्यापन इतिहास की पूरी जानकारी मिलती है।

***

## सर्वोत्तम अभ्यास

> [card] समीक्षाधीन स्थिति पर नज़र रखें
>
> जब सत्रों को मैन्युअल समीक्षा की ज़रूरत हो, तब सूचित होने के लिए अपने Didit Console में अलर्ट (ईमेल या Slack) सेट करें।

> [card] पुनः सबमिशन को प्राथमिकता दें
>
> अगर समस्या ठीक की जा सकती है (धुंधली फ़ोटो, दस्तावेज़ का गलत पक्ष), तो अस्वीकार करने के बजाय पुनः सबमिशन का अनुरोध करें। इससे कन्वर्ज़न में सुधार होता है।

> [card] ड्रॉप-ऑफ़ पर नज़र रखें
>
> छोड़े गए या समय-सीमा समाप्त हुए सत्रों की ऊँची दरें UX में बाधा का संकेत हो सकती हैं। सत्र TTL समायोजित करने या उपयोगकर्ता मार्गदर्शन बेहतर बनाने पर विचार करें।

> [card] आइडेम्पोटेंट हैंडलर
>
> webhook को पुनः प्रयास किया जा सकता है। हर स्थिति बदलाव को केवल एक बार प्रोसेस करने के लिए `session_id` को यूनिक कुंजी के रूप में इस्तेमाल करें।

> [!WARNING]
>
> payload प्रोसेस करने से पहले हमेशा webhook हस्ताक्षर सत्यापित करें। Didit तीन तरीके देता है: `X-Signature`, `X-Signature-V2` (अनुशंसित), और अप्रचलित `X-Signature-Simple`, जो केवल एनवेलप को प्रमाणित करता है और `decision` के मुख्य भाग को कभी प्रमाणित नहीं करता। विवरण के लिए [Webhooks](https://docs.didit.me/hi/integration/webhooks.md#हस्ताक्षर-सत्यापन) देखें।


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