Ruby

Ruby 3.0+ client. Resource methods accept keyword arguments and return hashes that mirror the JSON API.

Install

gem install sevk

Or drop it into your Gemfile: gem "sevk" and run bundle install.

Initialize

Pass your API key to Sevk::Client.new.

require 'sevk'
sevk = Sevk::Client.new(api_key: 'sevk_full_xxxxxxxx')

Send Email

HTML body

require 'sevk'
sevk = Sevk::Client.new(api_key: 'sevk_full_xxxxxxxx')
result = sevk.emails.send(
from: 'sevk <[email protected]>',
subject: 'Welcome',
html: '<h1>Welcome</h1><p>Thanks for signing up.</p>',
reply_to: '[email protected]'
)
puts result['id']

With attachments

sevk.emails.send(
from: 'sevk <[email protected]>',
subject: 'Your invoice',
html: '<p>Invoice attached.</p>',
attachments: [
{
filename: 'invoice.pdf',
content: base64_pdf,
contentType: 'application/pdf'
}
]
)

Send Bulk

result = sevk.emails.send_bulk([
{ from: 'sevk <[email protected]>', to: '[email protected]', subject: 'Welcome', html: '<p>Hi 1</p>' },
{ from: 'sevk <[email protected]>', to: '[email protected]', subject: 'Welcome', html: '<p>Hi 2</p>' }
])
puts "ok=#{result['success']} failed=#{result['failed']}"

Contacts

contact = sevk.contacts.create(
subscribed: true,
data: { firstName: 'John', plan: 'pro' }
)
sevk.contacts.get(contact['id'])
sevk.contacts.update(contact['id'], data: { plan: 'enterprise' })
page = sevk.contacts.list(limit: 50)
page['items'].each { |c| puts c['email'] }
sevk.contacts.delete(contact['id'])

Audiences

audience = sevk.audiences.create(name: 'Newsletter')
sevk.audiences.add_contacts(audience['id'], [
'b2c3d4e5-f678-4901-abcd-ef1234567890',
'b2c3d4e5-f678-4901-abcd-ef1234567891'
])
sevk.audiences.list_contacts(audience['id'])['items'].each do |c|
puts c['email']
end

Error Handling

require 'sevk'
sevk = Sevk::Client.new(api_key: 'sevk_full_xxxxxxxx')
begin
sevk.emails.send(
to: 'not-an-email',
subject: 'Test',
text: 'Hi'
)
rescue Sevk::ValidationError => e
puts "validation: #{e.message}"
rescue Sevk::UnauthorizedError
puts 'bad api key'
rescue Sevk::RateLimitError => e
puts "rate limited: #{e.message}"
rescue Sevk::Error => e
puts "#{e.status_code} #{e.message}"
end