Keplars Email SDK for Ruby
Official Ruby SDK for the Keplars Email API - modern transactional email service with priority-based delivery.
Installation
Add this line to your application's Gemfile:
gem 'keplars'
And then execute:
bundle install
Or install it yourself as:
gem install keplars
Quick Start
require 'keplars'
client = Keplars::Client.new(api_key: 'kms_<workspaceId>.live_<secret>')
result = client.emails.send_instant(
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Your verification code is 123456',
html: '<p>Your verification code is <strong>123456</strong></p>'
)
puts result[:data][:job_id]
API Key Types
| Type | Format | Used for |
|---|---|---|
| Regular | kms_<id>.live_<secret> |
Email sending |
| Admin | kms_<id>.adm_<secret> |
Contacts, audiences, automations, domains |
Email Sending
Priority Levels
| Method | Delivery | Use case |
|---|---|---|
send_instant |
0–5 sec | OTPs, login codes, critical alerts |
send_high |
0–30 sec | Transactional, notifications |
send_async / send |
0–5 min | General transactional |
send_bulk |
Idle | Newsletters, marketing |
Send with Recipients
result = client.emails.send_high(
from: 'noreply@yourdomain.com',
to: [{ email: 'user@example.com', name: 'John Doe' }],
cc: [{ email: 'manager@example.com' }],
subject: 'Order Confirmation',
html: '<p>Your order has been confirmed</p>'
)
Response Shape
result[:success] # true
result[:message] # 'Email queued'
result[:data][:job_id] # 'job_abc123'
result[:data][:priority] # 'high'
Send with Template
result = client.emails.send(
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Password Reset',
template_id: 'tpl_reset_password',
template_data: {
name: 'John',
reset_link: 'https://example.com/reset/abc'
}
)
Schedule Email
result = client.emails.schedule(
from: 'newsletter@yourdomain.com',
to: 'user@example.com',
subject: 'Your weekly digest',
html: '<p>Here is your weekly digest...</p>',
scheduled_for: '2026-06-01T09:00:00Z',
priority: 'bulk'
)
Contacts (Admin API Key Required)
admin_client = Keplars::Client.new(api_key: 'kms_<workspaceId>.adm_<secret>')
admin_client.contacts.add(email: 'user@example.com', name: 'John Doe', audience_id: 'aud_abc123')
contact = admin_client.contacts.get('user@example.com')
contacts = admin_client.contacts.list(audience_id: 'aud_abc123', page: 1, limit: 20)
admin_client.contacts.update('user@example.com', name: 'Jane Doe')
admin_client.contacts.delete('user@example.com')
Audiences (Admin API Key Required)
audience = admin_client.audiences.create(name: 'Newsletter Subscribers', description: 'Main list')
audiences = admin_client.audiences.list(page: 1, limit: 20)
audience = admin_client.audiences.get('aud_abc123')
admin_client.audiences.delete('aud_abc123')
Automations (Admin API Key Required)
automations = admin_client.automations.list
automation = admin_client.automations.get('auto_abc123')
admin_client.automations.enroll('auto_abc123', email: 'user@example.com')
admin_client.automations.unenroll('auto_abc123', email: 'user@example.com')
Domains (Admin API Key Required)
domain = admin_client.domains.add('mail.yourcompany.com')
domains = admin_client.domains.list
status = admin_client.domains.get_status('dom_abc123')
result = admin_client.domains.verify('dom_abc123')
api_key = admin_client.domains.create_api_key(domain_id: 'dom_abc123', name: 'Production Key')
admin_client.domains.delete('dom_abc123')
Error Handling
require 'keplars'
begin
result = client.emails.send_instant(...)
rescue Keplars::AuthenticationError => e
puts "Invalid API key: #{e.message}"
rescue Keplars::RateLimitError => e
puts "Rate limited"
rescue Keplars::ValidationError => e
puts "Validation error: #{e.message}"
end