Skip to main content

Ruby SDK

Installation

gem install flexops

Or add to your Gemfile:

gem 'flexops'

Quick Start

require 'flexops'

client = FlexOps::Client.new(api_key: 'your-api-key')

rates = client.rates.get(
from: { zip: '80202', country: 'US' },
to: { zip: '10001', country: 'US' },
parcel: { weight: 2.5, length: 10, width: 8, height: 4 }
)

rates.rates.each do |rate|
puts "#{rate.carrier} #{rate.service}: $#{rate.total_price}"
end

Configuration

client = FlexOps::Client.new(
api_key: 'your-api-key',
base_url: 'https://api.flexops.io/v1', # optional
timeout: 30, # seconds
max_retries: 3
)

Shipping Operations

Create a Label

label = client.labels.create(
carrier: 'usps',
service: 'priority',
from: {
name: 'Warehouse',
street1: '123 Main St',
city: 'Denver',
state: 'CO',
zip: '80202',
country: 'US'
},
to: {
name: 'Customer',
street1: '456 Broadway',
city: 'New York',
state: 'NY',
zip: '10001',
country: 'US'
},
parcel: { weight: 2.5, length: 10, width: 8, height: 4 },
idempotency_key: 'order-12345'
)

puts label.tracking_number
puts label.label_url

Track a Shipment

tracking = client.tracking.get('9400111899223456789012')

puts tracking.status
puts tracking.estimated_delivery

tracking.events.each do |event|
puts "#{event.timestamp}: #{event.description}"
end

Validate an Address

result = client.addresses.validate(
street1: '123 Main St',
city: 'Denver',
state: 'CO',
zip: '80202',
country: 'US'
)

puts "Validated: #{result.normalized}" if result.valid?

Webhook Verification

post '/webhooks/flexops' do
payload = request.body.read
signature = request.env['HTTP_X_FLEXOPS_SIGNATURE']

unless FlexOps::Webhook.verify(payload, signature, 'whsec_your_secret')
halt 401, 'Invalid signature'
end

event = JSON.parse(payload)
case event['type']
when 'tracking.delivered'
handle_delivery(event['data'])
end

status 200
end

Error Handling

begin
label = client.labels.create(...)
rescue FlexOps::RateLimitError => e
puts "Retry after #{e.retry_after} seconds"
rescue FlexOps::Error => e
puts "#{e.code}: #{e.message}"
end