> ## 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.

# Python SDK: KYC, AML और लेन-देन निगरानी

> Didit के आधिकारिक Python SDK की त्वरित शुरुआत: सर्वर APIs के लिए टाइप्ड sync और async क्लाइंट, webhook सत्यापन और प्रमाणीकरण token जाँच।

Python के लिए Didit की आधिकारिक लाइब्रेरी। इसके लिए Python 3.10 या उसके बाद का संस्करण चाहिए। यह एक सिंक्रोनस क्लाइंट `Didit` और एक एसिंक्रोनस क्लाइंट `AsyncDidit` देती है, जिनकी विधियाँ एक जैसी हैं। हर SDK में क्या साझा है, यह जानने के लिए [सर्वर SDKs का अवलोकन](https://docs.didit.me/hi/integration/server-sdks/overview.md) देखें।

## इंस्टॉल करें

```bash theme={null}
pip install didit-sdk
```

यह पैकेज [`didit-sdk` PyPI पर](https://pypi.org/project/didit-sdk/) उपलब्ध है। इसका स्रोत और बदलाव-लॉग GitHub पर [didit-protocol/sdk-python](https://github.com/didit-protocol/sdk-python) में हैं।

[Authentication](#authentication-token-सत्यापित-करें) के tokens सत्यापित करने के लिए, वह अतिरिक्त सुविधा इंस्टॉल करें जो हस्ताक्षर जाँच जोड़ती है:

```bash theme={null}
pip install "didit-sdk[auth]"
```

## क्लाइंट कॉन्फ़िगर करें

`Didit()` एनवायरनमेंट से `DIDIT_API_KEY` पढ़ता है। इसे override करने के लिए, या संगठन और एप्लिकेशन IDs सेट करने के लिए विकल्प पास करें। ये IDs उन एप्लिकेशन-स्कोप्ड कॉल (केस, नेटवर्क, नियामक रिपोर्ट) के लिए चाहिए होती हैं।

```python theme={null}
import os

from didit import Didit

client = Didit(
    api_key=os.environ["DIDIT_API_KEY"],
    organization_id=os.environ.get("DIDIT_ORGANIZATION_ID"),
    application_id=os.environ.get("DIDIT_APPLICATION_ID"),
    timeout=30,
    max_retries=2,
)

# Options for a single call.
fast = client.with_options(timeout=5, max_retries=0)
```

## सत्र बनाएँ

किसी वर्कफ़्लो के लिए एक [सत्यापन सत्र](https://docs.didit.me/hi/sessions-api/create-session.md) बनाएँ और अपने उपयोगकर्ता को उसके URL पर भेजें।

```python theme={null}
from didit import Didit

client = Didit()

session = client.sessions.create(
    workflow_id="11111111-2222-3333-4444-555555555555",
    vendor_data="user-123",
    callback="https://example.com/verification/done",
)
print(session.url)
```

## निर्णय पढ़ें

जब उपयोगकर्ता पूरा कर ले (या जब webhook आए), तो [निर्णय पढ़ें](https://docs.didit.me/hi/sessions-api/retrieve-session.md)। हर सुविधा का परिणाम एक सूची है, जिसमें वर्कफ़्लो के हर नोड के लिए एक प्रविष्टि होती है।

```python theme={null}
from didit import Didit

client = Didit()

decision = client.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
print(decision.status)
for verification in decision.id_verifications or []:
    print(verification.first_name, verification.last_name)
```

## Webhook सत्यापित करें

अनुरोध के हूबहू raw body bytes और अनुरोध हेडर पास करें। `verify` किसी भी ऐसी स्थिति में `WebhookVerificationError` उत्पन्न करता है जो वैध और ताज़ा डिलीवरी नहीं है, इसलिए उसी एक त्रुटि-क्लास को पकड़ना काफ़ी है।

```python theme={null}
import os

import didit

WEBHOOK_SECRET = os.environ["DIDIT_WEBHOOK_SECRET"]


def handle_webhook(raw_body: bytes, headers: didit.webhooks.HeadersLike) -> int:
    try:
        event = didit.webhooks.verify(raw_body, headers, WEBHOOK_SECRET)
    except didit.WebhookVerificationError as error:
        print("rejected:", error.reason)
        return 400
    if isinstance(event, didit.webhooks.SessionStatusUpdatedEvent):
        print(event.session_id, event.status)
    return 200
```

Flask में यह `handle_webhook(request.get_data(), dict(request.headers))` है; FastAPI में `handle_webhook(await request.body(), request.headers)`। सीक्रेट बदलते समय दोनों पास करें: `[new_secret, old_secret]`। इवेंट और हस्ताक्षर योजना के लिए [Webhooks](https://docs.didit.me/hi/integration/webhooks.md) देखें।

## लेन-देन स्क्रीन करें

[लेन-देन निगरानी](https://docs.didit.me/hi/transaction-monitoring/overview.md) के लिए कोई भुगतान, निकासी या क्रिप्टो ट्रांसफ़र सबमिट करें; रिस्पॉन्स में उसकी स्थिति और जोखिम स्कोर होता है।

```python theme={null}
from didit import Didit

client = Didit()

transaction = client.transactions.create(
    transaction_id="txn-1001",
    transaction_category="finance",
    transaction_details={"direction": "outbound", "amount": 1500, "currency": "EUR"},
    subject={"entity_type": "individual", "vendor_data": "user-123", "full_name": "Maria Garcia"},
)
print(transaction.status, transaction.score)
```

## Authentication token सत्यापित करें

`didit.authentication` आपके बैकएंड में, हर अनुरोध के लिए Didit को कॉल किए बिना, उन एक्सेस token की जाँच करता है जिन पर आपका [Authentication](https://docs.didit.me/hi/authentication/overview.md) issuer हस्ताक्षर करता है। यह कोड का एक्सचेंज करता है, token रीफ़्रेश करता है, सत्रों की जाँच करता है और उन्हें रद्द करता है, और स्टेप-अप चलाता है।

> [!NOTE]
>
> Token सत्यापन [अपने सर्वर पर token सत्यापित करें](https://docs.didit.me/hi/authentication/tokens-and-jwks.md#अपने-सर्वर-पर-टोकन-सत्यापित-करें) में दी गई जाँच करता है, आपके एप्लिकेशन के issuer और साइनिंग कुंजियों के विरुद्ध।

```python theme={null}
from didit.authentication import Authentication, TokenVerificationError

# The publishable key (pk_live_... or pk_test_...) carries your issuer URL.
auth = Authentication.from_publishable_key("pk_live_...", client_id="your-application-id")


def current_user(access_token: str) -> str | None:
    try:
        claims = auth.verify_access_token(access_token)
    except TokenVerificationError as error:
        print("rejected:", error.reason)
        return None
    return claims.sub
```

## त्रुटियाँ

```python theme={null}
import didit
from didit import Didit

client = Didit()

try:
    client.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
except didit.NotFoundError:
    print("no such session")
except didit.RateLimitError as error:
    print("slow down, request", error.request_id)
except didit.APIStatusError as error:
    print(error.status_code, error.body)
```

## सूचियाँ, फ़ाइलें और एसिंक्रोनस

```python theme={null}
import asyncio
from pathlib import Path

from didit import AsyncDidit, Didit

client = Didit()

# Lists page through every result.
for session in client.sessions.list(status="Approved"):
    print(session.session_id)

# Uploads take a path, bytes or an open file.
result = client.id_verification.verify(front_image=Path("id-front.jpg"), back_image=Path("id-back.jpg"))
print(result.id_verification)


async def main() -> None:
    async with AsyncDidit() as aclient:
        session = await aclient.sessions.create(workflow_id="11111111-2222-3333-4444-555555555555")
        print(session.url)


asyncio.run(main())
```

[API reference](https://docs.didit.me/hi/api-reference/overview.md) के सर्वर endpoint पृष्ठों में, उनके ऑपरेशन के लिए Python नमूना होता है, सिवाय उन endpoints और फ़ील्ड्स के जो अभी तक किसी 1.0.1 रिलीज़ में नहीं हैं, और जिनका उल्लेख [अवलोकन](https://docs.didit.me/hi/integration/server-sdks/overview.md) में किया गया है।


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