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

# KYC, AML और लेन-देन के लिए Go SDK

> Didit के आधिकारिक Go SDK का क्विकस्टार्ट: केवल standard library से सर्वर APIs के लिए typed calls, webhook सत्यापन और token जाँच।

Go के लिए आधिकारिक Didit मॉड्यूल। इसके लिए Go 1.22 या उसके बाद का संस्करण चाहिए, और यह केवल स्टैंडर्ड लाइब्रेरी का उपयोग करता है। सभी SDK में क्या साझा है, यह जानने के लिए [सर्वर SDK अवलोकन](https://docs.didit.me/hi/integration/server-sdks/overview.md) देखें।

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

```bash theme={null}
go get github.com/didit-protocol/sdk-go
```

मॉड्यूल [pkg.go.dev पर `github.com/didit-protocol/sdk-go`](https://pkg.go.dev/github.com/didit-protocol/sdk-go) है। इसका सोर्स और चेंजलॉग GitHub पर [didit-protocol/sdk-go](https://github.com/didit-protocol/sdk-go) में हैं।

पैकेज का नाम `didit` है। Webhooks `github.com/didit-protocol/sdk-go/webhook` में हैं, Authentication `.../authentication` में, और क्लाइंट विकल्प `.../option` में।

हर [API संदर्भ](https://docs.didit.me/hi/api-reference/overview.md) पेज का उदाहरण एक फ़ंक्शन की बॉडी है: यह स्टैंडर्ड लाइब्रेरी के `context`, `fmt` और `log` के साथ इस मॉड्यूल का उपयोग करता है।

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

`didit.NewClient()` एनवायरनमेंट से `DIDIT_API_KEY` पढ़ता है। इसे बदलने के लिए, या संगठन और एप्लिकेशन आईडी सेट करने के लिए विकल्प पास करें, जिनकी एप्लिकेशन-स्तरीय कॉल (केस, नेटवर्क, नियामक रिपोर्ट) को आवश्यकता होती है। कोई भी विकल्प किसी एक कॉल पर भी काम करता है।

```go theme={null}
package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/didit-protocol/sdk-go"
	"github.com/didit-protocol/sdk-go/option"
)

func main() {
	client := didit.NewClient(
		option.WithAPIKey(os.Getenv("DIDIT_API_KEY")),
		option.WithOrganizationID(os.Getenv("DIDIT_ORGANIZATION_ID")),
		option.WithApplicationID(os.Getenv("DIDIT_APPLICATION_ID")),
		option.WithTimeout(30*time.Second),
		option.WithMaxRetries(2),
	)

	// Options for a single call.
	decision, err := client.Sessions.RetrieveDecision(context.Background(), "11111111-2222-3333-4444-555555555555",
		didit.SessionsRetrieveDecisionParams{}, option.WithTimeout(5*time.Second))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(decision.Status)
}
```

वैकल्पिक अनुरोध फ़ील्ड `didit.Opt` मान होते हैं: इन्हें `didit.String`, `didit.Int`, `didit.Bool`, `didit.Float` या `didit.Some` से सेट करें, और कुछ भी न भेजने के लिए इन्हें छोड़ दें।

## सत्र बनाएँ

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

```go theme={null}
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/didit-protocol/sdk-go"
)

func main() {
	client := didit.NewClient()

	session, err := client.Sessions.Create(context.Background(), didit.SessionsCreateParams{
		WorkflowID: "11111111-2222-3333-4444-555555555555",
		VendorData: didit.String("user-123"),
		Callback:   didit.String("https://example.com/verification/done"),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(session.URL)
}
```

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

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

```go theme={null}
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/didit-protocol/sdk-go"
)

func main() {
	client := didit.NewClient()

	decision, err := client.Sessions.RetrieveDecision(context.Background(), "11111111-2222-3333-4444-555555555555",
		didit.SessionsRetrieveDecisionParams{})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(decision.Status)
	for _, verification := range decision.IDVerifications {
		fmt.Println(verification.Status)
	}
}
```

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

कच्चे बॉडी बाइट्स और अनुरोध हेडर पास करें। `webhook.Verify` किसी भी ऐसी चीज़ के लिए `*didit.WebhookVerificationError` लौटाता है जो मान्य या ताज़ा डिलीवरी नहीं है, और अन्यथा एक टाइप्ड इवेंट लौटाता है।

```go theme={null}
package main

import (
	"errors"
	"fmt"
	"io"
	"log"
	"net/http"
	"os"

	"github.com/didit-protocol/sdk-go"
	"github.com/didit-protocol/sdk-go/webhook"
)

func main() {
	secret := os.Getenv("DIDIT_WEBHOOK_SECRET")
	http.HandleFunc("POST /webhooks/didit", func(w http.ResponseWriter, r *http.Request) {
		body, err := io.ReadAll(http.MaxBytesReader(w, r.Body, 1<<20))
		if err != nil {
			http.Error(w, "bad body", http.StatusBadRequest)
			return
		}
		event, err := webhook.Verify(body, r.Header, secret)
		var invalid *didit.WebhookVerificationError
		if errors.As(err, &invalid) {
			http.Error(w, string(invalid.Reason), http.StatusBadRequest)
			return
		} else if err != nil {
			http.Error(w, "error", http.StatusInternalServerError)
			return
		}
		if e, ok := event.(*webhook.StatusUpdatedEvent); ok {
			fmt.Println(e.SessionID, e.Status)
		}
		w.WriteHeader(http.StatusOK)
	})
	log.Fatal(http.ListenAndServe(":8080", nil))
}
```

जब आप सीक्रेट बदल रहे हों, पुराना सीक्रेट `webhook.WithSecrets` के साथ जोड़ें। इवेंट और हस्ताक्षर योजना के लिए [Webhooks](https://docs.didit.me/hi/integration/webhooks.md) देखें।

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

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

```go theme={null}
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/didit-protocol/sdk-go"
)

func main() {
	client := didit.NewClient()

	transaction, err := client.Transactions.Create(context.Background(), didit.TransactionsCreateParams{
		TransactionID:       "txn-1001",
		TransactionCategory: "finance",
		TransactionDetails: didit.TransactionsCreateParamsTransactionDetails{
			Direction: "outbound",
			Amount:    1500,
			Currency:  "EUR",
		},
		Subject: didit.TransactionsCreateParamsSubject{
			EntityType: didit.String("individual"),
			VendorData: "user-123",
			FullName:   "Maria Garcia",
		},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(transaction.Status, transaction.Score)
}
```

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

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

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

```go theme={null}
package main

import (
	"context"
	"errors"
	"fmt"
	"log"

	"github.com/didit-protocol/sdk-go"
	"github.com/didit-protocol/sdk-go/authentication"
)

func main() {
	// The publishable key (pk_live_... or pk_test_...) carries your issuer URL.
	auth, err := authentication.NewFromPublishableKey("pk_live_...", authentication.WithClientID("your-application-id"))
	if err != nil {
		log.Fatal(err)
	}

	claims, err := auth.VerifyAccessToken(context.Background(), "the bearer token")
	var invalid *didit.TokenVerificationError
	if errors.As(err, &invalid) {
		fmt.Println("rejected:", invalid.Reason)
		return
	} else if err != nil {
		log.Fatal(err)
	}
	fmt.Println(claims.Subject)
}
```

## त्रुटियाँ

```go theme={null}
package main

import (
	"context"
	"errors"
	"fmt"

	"github.com/didit-protocol/sdk-go"
)

func main() {
	client := didit.NewClient()

	_, err := client.Sessions.RetrieveDecision(context.Background(), "11111111-2222-3333-4444-555555555555",
		didit.SessionsRetrieveDecisionParams{})
	var notFound *didit.NotFoundError
	var status *didit.APIStatusError
	switch {
	case errors.As(err, &notFound):
		fmt.Println("no such session")
	case errors.As(err, &status):
		fmt.Println(status.StatusCode, status.RequestID, status.Body)
	case err != nil:
		fmt.Println("no response:", err)
	}
}
```

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

```go theme={null}
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/didit-protocol/sdk-go"
)

func main() {
	ctx := context.Background()
	client := didit.NewClient()

	// Lists page through every result.
	iter := client.Sessions.ListAutoPaging(ctx, didit.SessionsListParams{Status: didit.String("Approved")})
	for iter.Next() {
		fmt.Println(iter.Current().SessionID)
	}
	if err := iter.Err(); err != nil {
		log.Fatal(err)
	}

	// Uploads take didit.FileFromPath, FileFromBytes or FileFromReader.
	result, err := client.IDVerification.Verify(ctx, didit.IDVerificationVerifyParams{
		FrontImage: didit.FileFromPath("id-front.jpg"),
		BackImage:  didit.Some(didit.FileFromPath("id-back.jpg")),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(result.IDVerification.Status)
}
```

## वे endpoints जो अभी Go SDK में नहीं हैं

Go 1.0.1 इन endpoints के API में जुड़ने से पहले जनरेट किया गया था, इसलिए इसमें इनके लिए कोई विधि नहीं है और इन पेजों में कोई Go उदाहरण नहीं है:

* [पता सत्यापित करें](https://docs.didit.me/hi/standalone-apis/address-validation.md)
* [लेन-देन बैच में हटाएँ](https://docs.didit.me/hi/management-api/transactions/delete.md)
* Travel Rule नेटवर्क: [नेटवर्क प्राप्त करें](https://docs.didit.me/hi/management-api/travel-rule/get-networks.md), [किसी नेटवर्क तक पहुँच का अनुरोध करें](https://docs.didit.me/hi/management-api/travel-rule/request-network.md), और नेटवर्क प्रश्नावली [प्राप्त करें](https://docs.didit.me/hi/management-api/travel-rule/get-network-questionnaire.md), [सहेजें](https://docs.didit.me/hi/management-api/travel-rule/update-network-questionnaire.md) या [जमा करें](https://docs.didit.me/hi/management-api/travel-rule/submit-network-questionnaire.md)
* Travel Rule वॉलेट प्रमाण: [स्क्रीनशॉट वॉलेट प्रमाणों की सूची देखें](https://docs.didit.me/hi/management-api/travel-rule/list-wallet-proofs.md) और [किसी एक को स्वीकृत या अस्वीकृत करें](https://docs.didit.me/hi/management-api/travel-rule/decide-wallet-proof.md)
* Google Wallet, जिसके लिए अभी किसी भी 1.0.1 रिलीज़ में समर्थन नहीं है: [Google Wallet सत्यापन शुरू करें](https://docs.didit.me/hi/api-reference/digital-id-wallets/google-wallet.md) और [वॉलेट प्रतिक्रिया जमा करें](https://docs.didit.me/hi/standalone-apis/digital-id-wallet-response.md)

यह इन नए अनुरोध फ़ील्ड को भी नहीं भेज सकता:

* `biometric_consent`, `tags` और `user_state`, जब यह [सत्र बनाता है](https://docs.didit.me/hi/sessions-api/create-session.md)
* `biometric_consent_mode`, जब यह [webhook कॉन्फ़िगरेशन अपडेट करता है](https://docs.didit.me/hi/management-api/webhook/update-config.md)
* `beneficiary_vasp`, जब यह [Travel Rule ट्रांसफ़र अपडेट करता है](https://docs.didit.me/hi/management-api/travel-rule/update-transfer.md)
* `confirm_delete`, जिसकी [फ़ाइनलाइज़ की गई रिपोर्ट हटाने](https://docs.didit.me/hi/management-api/regulatory-reports/delete.md) के लिए ज़रूरत होती है
* डेटाबेस सत्यापन के 16 नए फ़ील्ड, जो किसी भी 1.0.1 रिलीज़ में नहीं हैं

किसी बाद के Go रिलीज़ में ये जुड़ने तक, इन्हें HTTP के ज़रिए कॉल करें, जैसा हर पेज के cURL अनुरोध में दिखाया गया है। [API संदर्भ](https://docs.didit.me/hi/api-reference/overview.md) के बाकी सभी सर्वर endpoint पेजों में उनके ऑपरेशन का Go उदाहरण है।


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