> ## 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 de Ruby para KYC, AML y transacciones

> SDK oficial de Ruby de Didit: llamadas a las API de servidor con net/http, verificación de webhooks compatible con Rails y validación de tokens.

La gema oficial de Didit para Ruby. Requiere Ruby 3.1 o una versión posterior y usa `net/http` de la biblioteca estándar. Consulta la [visión general de los SDK de servidor](https://docs.didit.me/es/integration/server-sdks/overview.md) para ver lo que comparten todos los SDK.

## Instalación

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

La gema es [`didit-sdk` en RubyGems](https://rubygems.org/gems/didit-sdk). Su código fuente y su registro de cambios están en [didit-protocol/sdk-ruby](https://github.com/didit-protocol/sdk-ruby) en GitHub.

También puedes añadir `gem "didit-sdk"` a tu Gemfile y ejecutar `bundle install`. Cárgala con `require "didit"`.

## Configurar el cliente

`Didit::Client.new` lee `DIDIT_API_KEY` del entorno. Pasa argumentos de palabra clave para sobrescribirla o para definir los ids de organización y de aplicación necesarios para las llamadas con ámbito de aplicación (casos, redes, informes regulatorios). Los campos de la solicitud son argumentos de palabra clave con los mismos nombres que usa la API. Las respuestas son objetos con un método de lectura por campo, `[:field]` y `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
```

## Crear una sesión

Crea una [sesión de verificación](https://docs.didit.me/es/sessions-api/create-session.md) para un workflow y envía a tu usuario a su 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
```

## Leer la decisión

Cuando el usuario finalice (o cuando llegue el webhook), [lee la decisión](https://docs.didit.me/es/sessions-api/retrieve-session.md). El resultado de cada función es una lista con una entrada por cada nodo del flujo.

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

## Verificar un webhook

Pasa el cuerpo sin procesar, exactamente como lo recibiste, y los encabezados de la solicitud. `verify` lanza `Didit::WebhookVerificationError` ante cualquier entrega que no sea válida y reciente. En caso contrario, devuelve un evento tipado.

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

En Rails, llama a `handle_webhook(request.raw_post, request.headers)`. Mientras rotas el secreto, pasa los dos: `[new_secret, old_secret]`. Consulta [Webhooks](https://docs.didit.me/es/integration/webhooks.md) para ver los eventos y el esquema de firma.

## Analizar una transacción

Envía un pago, una retirada o una transferencia de criptomonedas a [monitorización de transacciones](https://docs.didit.me/es/transaction-monitoring/overview.md). La respuesta incluye su estado y su puntuación de riesgo.

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

## Verificar tokens de Authentication

`Didit::Authentication` comprueba en tu backend los tokens de acceso que firma tu emisor de [Authentication](https://docs.didit.me/es/authentication/overview.md), sin invocar a Didit en cada solicitud. También intercambia códigos, renueva tokens, comprueba y revoca sesiones, y ejecuta autenticaciones reforzadas (step-up).

> [!NOTE]
>
> La verificación de tokens realiza las comprobaciones descritas en [Verificar un token en tu servidor](https://docs.didit.me/es/authentication/tokens-and-jwks.md#verificar-un-token-en-tu-servidor), con el emisor y las claves de firma de tu aplicación.

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

## Errores

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

## Listas y archivos

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

Las páginas de endpoints de servidor de la [referencia de la API](https://docs.didit.me/es/api-reference/overview.md) incluyen un ejemplo en Ruby para su operación. Las excepciones son los endpoints y campos que todavía no incluye ninguna versión 1.0.1, indicados en la [visión general](https://docs.didit.me/es/integration/server-sdks/overview.md).


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