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

# SDK Ruby Didit untuk KYC, AML, dan Transaksi

> Panduan cepat SDK Ruby resmi Didit: panggilan API server dengan net/http, verifikasi webhook ramah Rails, dan pemeriksaan token Autentikasi.

Gem Didit resmi untuk Ruby. Gem ini membutuhkan Ruby 3.1 atau yang lebih baru dan menggunakan `net/http` dari pustaka standar. Lihat [ikhtisar SDK server](https://docs.didit.me/id/integration/server-sdks/overview.md) untuk hal-hal yang dimiliki bersama oleh setiap SDK.

## Instalasi

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

Gem ini tersedia sebagai [`didit-sdk` di RubyGems](https://rubygems.org/gems/didit-sdk). Sumber dan log perubahannya ada di [didit-protocol/sdk-ruby](https://github.com/didit-protocol/sdk-ruby) di GitHub.

Atau tambahkan `gem "didit-sdk"` ke Gemfile Anda, lalu jalankan `bundle install`. Muat dengan `require "didit"`.

## Konfigurasi klien

`Didit::Client.new` membaca `DIDIT_API_KEY` dari lingkungan. Berikan keyword untuk menimpanya, atau untuk mengatur ID organisasi dan ID aplikasi yang dibutuhkan panggilan dengan cakupan aplikasi (kasus, jaringan, laporan regulasi). Field permintaan berupa argumen keyword dengan nama yang sama seperti di API; respons berupa objek dengan pembaca untuk setiap kolom, serta dukungan untuk `[:field]` dan `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
```

## Buat sesi

Buat [sesi verifikasi](https://docs.didit.me/id/sessions-api/create-session.md) untuk sebuah alur kerja, lalu arahkan pengguna Anda ke URL-nya.

```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
```

## Baca keputusan

Saat pengguna menyelesaikan proses (atau saat webhook tiba), [baca keputusannya](https://docs.didit.me/id/sessions-api/retrieve-session.md). Setiap hasil fitur berupa daftar dengan satu entri untuk setiap node alur kerja.

```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
```

## Verifikasi webhook

Berikan body mentah persis seperti yang diterima, beserta header permintaan. `verify` memunculkan `Didit::WebhookVerificationError` untuk apa pun yang bukan pengiriman valid dan masih baru, dan mengembalikan event bertipe jika pengiriman valid.

```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
```

Di Rails, panggil `handle_webhook(request.raw_post, request.headers)`. Selama Anda merotasi rahasia, berikan keduanya: `[new_secret, old_secret]`. Lihat [Webhooks](https://docs.didit.me/id/integration/webhooks.md) untuk daftar event dan skema tanda tangan.

## Skrining transaksi

Kirimkan pembayaran, penarikan, atau transfer kripto ke [Pemantauan Transaksi](https://docs.didit.me/id/transaction-monitoring/overview.md); respons berisi status dan skor risikonya.

```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}"
```

## Verifikasi token Authentication

`Didit::Authentication` memeriksa token akses yang ditandatangani oleh penerbit [Authentication](https://docs.didit.me/id/authentication/overview.md) Anda, di backend Anda, tanpa memanggil Didit untuk setiap permintaan. Kelas ini juga menukar kode, menyegarkan token, memeriksa dan mencabut sesi, serta menjalankan peningkatan tingkat autentikasi.

> [!NOTE]
>
> Verifikasi token melakukan pemeriksaan yang dijelaskan di [Verifikasi token di server Anda](https://docs.didit.me/id/authentication/tokens-and-jwks.md#verifikasi-token-di-server-anda), terhadap penerbit dan kunci penandatanganan aplikasi Anda.

```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
```

## Error

```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
```

## Daftar dan file

```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
```

Halaman endpoint server di [referensi API](https://docs.didit.me/id/api-reference/overview.md) memiliki contoh Ruby untuk operasinya, kecuali endpoint dan kolom yang belum ada di rilis 1.0.1, yang disebutkan di [ikhtisar](https://docs.didit.me/id/integration/server-sdks/overview.md).


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