Ruby SDK
The passkeybase gem provides a Ruby client for the PasskeyBase Management API. Manage users, credentials, apps, roles, and enrollment tokens from your Ruby backend.
Installation
Install via RubyGems:
Terminal
gem install passkeybaseQuick Start
Initialize the client with your Management API key and tenant domain, then make your first API call.
app.rb
require "passkeybase"
client = PasskeyBase::Client.new(
api_key: "YOUR_MANAGEMENT_API_KEY",
domain: "myapp.auth.ing"
)
# List all users
users = client.users.list
users.data.each do |user|
puts "#{user.id}: #{user.display_name}"
endUser Management
Create User
Create a user
user = client.users.create(
external_id: "user_123",
display_name: "Jane Doe"
)
puts "Created user: #{user.id}"List Users
List users with pagination
# List with pagination
users = client.users.list(page: 1, per_page: 20)
users.data.each do |user|
puts "#{user.id}: #{user.display_name}"
end
puts "Total: #{users.pagination.total}"Get User
Get a user by ID
user = client.users.get("usr_abc123")
puts "Name: #{user.display_name}"
puts "Passkeys: #{user.passkey_count}"
puts "Last login: #{user.last_login_at}"Update User
Update a user
user = client.users.update("usr_abc123",
display_name: "Jane Smith"
)
puts "Updated: #{user.display_name}"Delete User
Deletes a user and all their associated passkeys.
Delete a user
client.users.delete("usr_abc123")Block / Unblock User
Block and unblock
# Block a user (prevents authentication)
client.users.block("usr_abc123")
# Unblock a user
client.users.unblock("usr_abc123")Credential Management
List Credentials
List all passkey credentials for a specific user.
List credentials
credentials = client.credentials.list("usr_abc123")
credentials.data.each do |cred|
puts "#{cred.id}: #{cred.device_name} (#{cred.authenticator_type})"
endDelete Credential
Revoke a specific passkey credential.
Delete a credential
client.credentials.delete("usr_abc123", "pk_xyz789")Client / App Management
Create App
Create an OAuth app
app = client.apps.create(
name: "My Mobile App",
redirect_uris: ["myapp://callback"]
)
puts "Client ID: #{app.id}"Rotate Secret
Rotate client secret
secret = client.apps.rotate_secret("pk_live_abc123")
puts "New secret: #{secret.client_secret}"Role Management
Create Role
Create a role
role = client.roles.create(
name: "admin",
description: "Administrator role"
)
puts "Role ID: #{role.id}"Assign Users
Assign users to a role
client.roles.assign_user("role_abc123", "usr_abc123")
# List users in a role
users = client.roles.list_users("role_abc123")
users.data.each do |user|
puts "#{user.id}: #{user.display_name}"
endEnrollment Tokens
Generate a one-time token for enrolling a passkey for an existing user. See the Enrollment guide for the full flow.
Create enrollment token
token = client.enrollment_tokens.create(
external_id: "user_123",
display_name: "Jane Doe",
expires_in: 3600
)
puts "Token: #{token.token}"
puts "Expires: #{token.expires_at}"
# Return this token to your frontend for passkey enrollmentError Handling
API errors raise a PasskeyBase::Errorwith structured error information.
Error handling
require "passkeybase"
client = PasskeyBase::Client.new(
api_key: "YOUR_MANAGEMENT_API_KEY",
domain: "myapp.auth.ing"
)
begin
user = client.users.get("usr_nonexistent")
rescue PasskeyBase::Error => e
puts "Error: #{e.error}" # "not_found"
puts "Message: #{e.message}" # "User not found"
puts "Status: #{e.status}" # 404
endConfiguration Options
Configuration
client = PasskeyBase::Client.new(
api_key: "YOUR_MANAGEMENT_API_KEY", # Required. Management API key.
domain: "myapp.auth.ing", # Required. Your tenant domain.
timeout: 30, # Optional. Request timeout in seconds. Default: 10.
max_retries: 3, # Optional. Max retry attempts. Default: 2.
base_url: "https://custom.url" # Optional. Override API base URL.
)| Option | Type | Required | Description |
|---|---|---|---|
api_key | String | Yes | Your Management API key from the dashboard. |
domain | String | Yes | Your tenant domain (e.g., myapp.auth.ing). |
timeout | Integer | No | Request timeout in seconds. Default: 10. |
max_retries | Integer | No | Maximum retry attempts. Default: 2. |
base_url | String | No | Override the API base URL. |