PasskeyBase

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 passkeybase

Quick 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}"
end

User 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})"
end

Delete 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}"
end

Enrollment 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 enrollment

Error 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
end

Configuration 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.
)
OptionTypeRequiredDescription
api_keyStringYesYour Management API key from the dashboard.
domainStringYesYour tenant domain (e.g., myapp.auth.ing).
timeoutIntegerNoRequest timeout in seconds. Default: 10.
max_retriesIntegerNoMaximum retry attempts. Default: 2.
base_urlStringNoOverride the API base URL.