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

# Java SDK: KYC, AML और लेन-देन सत्यापन

> Didit के आधिकारिक Java और Kotlin SDK का क्विकस्टार्ट: सर्वर APIs के लिए टाइप्ड बिल्डर, सिंक और एसिंक कॉल, webhook सत्यापन और टोकन जाँच।

Didit की आधिकारिक लाइब्रेरी Java और Kotlin के लिए। इसके लिए Java 11 या उसके बाद का संस्करण चाहिए, और यह केवल `java.net.http`, Jackson और JSpecify nullness annotations पर निर्भर करती है। हर method का एक `...Async` variant होता है, जो `CompletableFuture` लौटाता है। सभी SDKs में क्या साझा है, यह जानने के लिए [server SDKs overview](https://docs.didit.me/hi/integration/server-sdks/overview.md) देखें।

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

```kotlin Gradle theme={null}
implementation("me.didit:didit-java:1.0.1")
```

```xml Maven theme={null}
<dependency>
  <groupId>me.didit</groupId>
  <artifactId>didit-java</artifactId>
  <version>1.0.1</version>
</dependency>
```

यह artifact [Maven Central पर `me.didit:didit-java`](https://central.sonatype.com/artifact/me.didit/didit-java) है। इसका source और changelog GitHub पर [didit-protocol/sdk-java](https://github.com/didit-protocol/sdk-java) में हैं।

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

`new Didit()` पर्यावरण से `DIDIT_API_KEY` पढ़ता है। इसे बदलने के लिए builder का उपयोग करें, या संगठन और एप्लिकेशन ID सेट करें, जिनकी ज़रूरत application-scoped calls (केस, नेटवर्क, नियामक रिपोर्ट) को होती है।

```java theme={null}
import java.time.Duration;
import me.didit.Didit;
import me.didit.core.RequestOptions;
import me.didit.types.SessionsRetrieveDecisionParams;

Didit client = Didit.builder()
        .apiKey(System.getenv("DIDIT_API_KEY"))
        .organizationId(System.getenv("DIDIT_ORGANIZATION_ID"))
        .applicationId(System.getenv("DIDIT_APPLICATION_ID"))
        .timeout(Duration.ofSeconds(30))
        .maxRetries(2)
        .build();

// Options for a single call.
var decision = client.sessions().retrieveDecision("11111111-2222-3333-4444-555555555555",
        SessionsRetrieveDecisionParams.builder().build(),
        RequestOptions.builder().timeout(Duration.ofSeconds(5)).build());
System.out.println(decision.status().orElse(null));
```

अनुरोध प्रकार builders हैं, जिनका `build()` आवश्यक फ़ील्ड्स की जाँच करता है। वैकल्पिक रिस्पॉन्स फ़ील्ड्स `Optional` values होती हैं; Kotlin में उन्हें `.getOrNull()` से पढ़ें। इस पेज पर और हर [API reference](https://docs.didit.me/hi/api-reference/overview.md) पेज के snippets किसी method का body हैं, और उनसे पहले उनके लिए ज़रूरी imports दिए गए हैं।

## सत्र बनाएँ

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

```java theme={null}
import me.didit.Didit;
import me.didit.types.SessionsCreateParams;

Didit client = new Didit();

var session = client.sessions().create(SessionsCreateParams.builder()
        .workflowId("11111111-2222-3333-4444-555555555555")
        .vendorData("user-123")
        .callback("https://example.com/verification/done")
        .build());
System.out.println(session.url());
```

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

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

```java theme={null}
import java.util.List;
import me.didit.Didit;

Didit client = new Didit();

var decision = client.sessions().retrieveDecision("11111111-2222-3333-4444-555555555555");
decision.status().ifPresent(status -> System.out.println(status));
for (var verification : decision.idVerifications().orElse(List.of())) {
    System.out.println(verification.status().orElse(null));
}
```

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

कच्चा body, ठीक उसी रूप में जैसा प्राप्त हुआ, और अनुरोध हेडर पास करें। `Webhooks.verify` किसी भी ऐसी डिलीवरी पर `WebhookVerificationException` फेंकता है जो वैध और ताज़ा न हो, और अन्यथा एक typed event लौटाता है।

```java theme={null}
import java.util.Map;
import me.didit.errors.WebhookVerificationException;
import me.didit.webhooks.SessionStatusUpdatedEvent;
import me.didit.webhooks.WebhookEvent;
import me.didit.webhooks.Webhooks;

public class DiditWebhookHandler {
    private final String secret = System.getenv("DIDIT_WEBHOOK_SECRET");

    public int handle(byte[] rawBody, Map<String, String> headers) {
        WebhookEvent event;
        try {
            event = Webhooks.verify(rawBody, headers, secret);
        } catch (WebhookVerificationException e) {
            System.out.println("rejected: " + e.reason());
            return 400;
        }
        if (event instanceof SessionStatusUpdatedEvent) {
            SessionStatusUpdatedEvent updated = (SessionStatusUpdatedEvent) event;
            System.out.println(updated.sessionId().orElse("") + " " + updated.status().orElse(""));
        }
        return 200;
    }
}
```

Spring Boot में, body को `@RequestBody byte[] body` के रूप में और headers को `@RequestHeader Map<String, String> headers` के रूप में लें। एक सीक्रेट बदलते समय दो सीक्रेट स्वीकार करने के लिए `VerifyOptions` पास करें। इवेंट्स और हस्ताक्षर स्कीम के लिए [Webhooks](https://docs.didit.me/hi/integration/webhooks.md) देखें।

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

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

```java theme={null}
import me.didit.Didit;
import me.didit.types.TransactionsCreateParams;

Didit client = new Didit();

var transaction = client.transactions().create(TransactionsCreateParams.builder()
        .transactionId("txn-1001")
        .transactionCategory(TransactionsCreateParams.TransactionCategory.of("finance"))
        .transactionDetails(TransactionsCreateParams.TransactionDetails.builder()
                .direction(TransactionsCreateParams.TransactionDetails.Direction.of("outbound"))
                .amount(1500.0)
                .currency("EUR")
                .build())
        .subject(TransactionsCreateParams.Subject.builder()
                .entityType("individual")
                .vendorData("user-123")
                .fullName("Maria Garcia")
                .build())
        .build());
System.out.println(transaction.status().orElse(null) + " " + transaction.score().orElse(null));
```

## Authentication टोकन सत्यापित करें

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

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

```java theme={null}
import me.didit.authentication.AccessTokenClaims;
import me.didit.authentication.Authentication;
import me.didit.errors.TokenVerificationException;

public class CurrentUser {
    // The publishable key (pk_live_... or pk_test_...) carries your issuer URL.
    private final Authentication auth = Authentication.builder()
            .publishableKey("pk_live_...")
            .clientId("your-application-id")
            .build();

    public String subject(String accessToken) {
        try {
            AccessTokenClaims claims = auth.verifyAccessToken(accessToken);
            return claims.subject();
        } catch (TokenVerificationException e) {
            System.out.println("rejected: " + e.reason());
            return null;
        }
    }
}
```

## त्रुटियाँ

हर exception unchecked `DiditException` का विस्तार करता है।

```java theme={null}
import me.didit.Didit;
import me.didit.errors.ApiStatusException;
import me.didit.errors.NotFoundException;

Didit client = new Didit();

try {
    client.sessions().retrieveDecision("11111111-2222-3333-4444-555555555555");
} catch (NotFoundException e) {
    System.out.println("no such session");
} catch (ApiStatusException e) {
    System.out.println(e.statusCode() + " " + e.requestId().orElse(""));
}
```

## सूचियाँ और फ़ाइलें

```java theme={null}
import java.nio.file.Path;
import me.didit.Didit;
import me.didit.types.IdVerificationVerifyParams;
import me.didit.types.SessionsListParams;

Didit client = new Didit();

// Lists page through every result.
for (var session : client.sessions().list(SessionsListParams.builder().status("Approved").build())) {
    System.out.println(session);
}

// Uploads take a Path or a FileUpload (bytes or a stream).
var result = client.idVerification().verify(IdVerificationVerifyParams.builder()
        .frontImage(Path.of("id-front.jpg"))
        .backImage(Path.of("id-back.jpg"))
        .build());
System.out.println(result);
```

[API reference](https://docs.didit.me/hi/api-reference/overview.md) के server endpoint पेजों में उनके operation के लिए Java sample है, सिवाय उन endpoints और फ़ील्ड्स के जो अभी किसी 1.0.1 release में नहीं हैं; ये [overview](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.