> ## 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 और लेन-देन के लिए Ruby SDK

> Didit के आधिकारिक Ruby SDK का क्विकस्टार्ट: net/http पर सर्वर APIs के लिए कॉल, Rails-अनुकूल webhook सत्यापन और Authentication token जाँच।

Ruby के लिए आधिकारिक Didit gem है। इसके लिए Ruby 3.1 या उससे नया संस्करण चाहिए, और यह मानक लाइब्रेरी के `net/http` का उपयोग करता है। हर SDK में क्या साझा है, यह देखने के लिए [सर्वर SDK अवलोकन](https://docs.didit.me/hi/integration/server-sdks/overview.md) पढ़ें।

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

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

यह gem [RubyGems पर `didit-sdk`](https://rubygems.org/gems/didit-sdk) के नाम से उपलब्ध है। इसका स्रोत और बदलाव लॉग GitHub पर [didit-protocol/sdk-ruby](https://github.com/didit-protocol/sdk-ruby) में हैं।

या अपनी Gemfile में `gem "didit-sdk"` जोड़ें और `bundle install` चलाएँ। इसे `require "didit"` से लोड करें।

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

`Didit::Client.new` एनवायरनमेंट से `DIDIT_API_KEY` पढ़ता है। इसे बदलने के लिए, या संगठन और एप्लिकेशन ID सेट करने के लिए कीवर्ड आर्गुमेंट्स पास करें। एप्लिकेशन-आधारित कॉल (केस, नेटवर्क, नियामकीय रिपोर्ट) को ये ids चाहिए। अनुरोध फ़ील्ड API के अपने नामों वाले keyword arguments हैं। रिस्पॉन्स ऐसे objects हैं जिनमें हर फ़ील्ड के लिए एक reader होता है, साथ ही `[:field]` और `to_h` भी।

```ruby theme={null}
require "didit"

didit = Didit::Client.new(
  api_key: ENV["DIDIT_API_KEY"],
  organization_id: ENV["DIDIT_ORGANIZATION_ID"],
  application_id: ENV["DIDIT_APPLICATION_ID"],
  timeout: 30,
  max_retries: 2
)

# Options for a single call.
decision = didit.with_options(timeout: 5, max_retries: 0).sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
puts decision.status
```

## सत्र बनाएँ

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

```ruby theme={null}
require "didit"

didit = Didit::Client.new

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

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

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

```ruby theme={null}
require "didit"

didit = Didit::Client.new

decision = didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
puts decision.status
(decision.id_verifications || []).each do |verification|
  puts verification.status
end
```

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

कच्चा body, जैसा प्राप्त हुआ है वैसा ही, और अनुरोध हेडर पास करें। `verify` किसी भी ऐसी डिलीवरी पर `Didit::WebhookVerificationError` raise करता है जो वैध और ताज़ा न हो। बाकी स्थितियों में यह एक typed event लौटाता है।

```ruby theme={null}
require "didit"

WEBHOOK_SECRET = ENV.fetch("DIDIT_WEBHOOK_SECRET", "")

def handle_webhook(raw_body, headers)
  event = Didit::Webhooks.verify(raw_body, headers, WEBHOOK_SECRET)
  case event
  when Didit::Webhooks::StatusUpdatedEvent
    puts "#{event.session_id} #{event.status}"
  end
  200
rescue Didit::WebhookVerificationError => e
  puts "rejected: #{e.reason}"
  400
end
```

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

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

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

```ruby theme={null}
require "didit"

didit = Didit::Client.new

transaction = didit.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" }
)
puts "#{transaction.status} #{transaction.score}"
```

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

`Didit::Authentication` आपके backend में, हर request पर Didit को call किए बिना, उन access tokens की जाँच करता है जिन्हें आपका [Authentication](https://docs.didit.me/hi/authentication/overview.md) issuer sign करता है। यह codes का exchange करता है, tokens refresh करता है, access tokens के सत्रों की जाँच और रद्द करता है, और step-ups चलाता है।

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

```ruby theme={null}
require "didit"

# Your issuer URL, or Didit::Authentication.from_publishable_key("pk_live_...", client_id: ...).
AUTH = Didit::Authentication.new("https://your-app.auth.didit.me", client_id: "your-application-id")

def current_user(access_token)
  AUTH.verify_access_token(access_token).sub
rescue Didit::TokenVerificationError => e
  puts "rejected: #{e.reason}"
  nil
end
```

## त्रुटियाँ

```ruby theme={null}
require "didit"

didit = Didit::Client.new

begin
  didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
rescue Didit::NotFoundError
  puts "no such session"
rescue Didit::APIStatusError => e
  puts "#{e.status} #{e.request_id}"
end
```

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

```ruby theme={null}
require "didit"

didit = Didit::Client.new

# Lists page through every result.
didit.sessions.list(status: "Approved").auto_paging_each do |session|
  puts session.session_id
end

# Uploads take a Pathname, an IO or Didit::FilePart. A String is sent as the file's bytes.
result = didit.id_verification.verify(
  front_image: Pathname("id-front.jpg"),
  back_image: Pathname("id-back.jpg")
)
puts result.to_h
```

[API reference](https://docs.didit.me/hi/api-reference/overview.md) के सर्वर endpoint पेज में, उनके ऑपरेशन के लिए Ruby नमूना होता है। अपवाद वे endpoint और फ़ील्ड हैं जो किसी भी 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.