Integrate SnapAPI into your Ruby application using plain HTTP. No gem required — just Net::HTTP or your favorite HTTP client. Works with Rails, Sinatra, and plain Ruby.
No gem installation needed. Use Ruby's built-in Net::HTTP:
require 'net/http' require 'json' require 'uri' API_KEY = ENV['SNAPAPI_KEY'] BASE_URL = 'https://api.snapapi.pics'
Or if you prefer, add httparty or faraday to your Gemfile:
# Gemfile gem 'faraday'
dotenv gem for local development.require 'net/http'
require 'json'
uri = URI('https://api.snapapi.pics/screenshot')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
request['Content-Type'] = 'application/json'
request.body = {
url: 'https://example.com',
format: 'png',
width: 1280,
height: 800
}.to_json
response = http.request(request)
File.binwrite('screenshot.png', response.body)
puts 'Screenshot saved!'request.body = {
url: 'https://example.com',
format: 'png',
fullPage: true,
width: 1280
}.to_json
response = http.request(request)
File.binwrite('fullpage.png', response.body)request.body = {
url: 'https://example.com',
format: 'webp', # png, jpeg, webp, avif
width: 1440,
height: 900,
fullPage: false,
blockAds: true, # Block advertisements
blockCookies: true, # Block cookie banners
delay: 2000, # Wait 2s before capture
devicePreset: 'iPhone15', # Mobile device emulation
css: 'body { background: white; }',
responseType: 'url' # Get hosted URL
}.to_jsonrequest.body = {
url: 'https://example.com',
format: 'png',
responseType: 'url'
}.to_json
response = http.request(request)
result = JSON.parse(response.body)
puts result['url']
# => https://cdn.snapapi.pics/screenshots/abc123.pnguri = URI('https://api.snapapi.pics/pdf')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
request['Content-Type'] = 'application/json'
request.body = {
url: 'https://example.com',
format: 'A4',
printBackground: true,
margin: {
top: '20mm',
bottom: '20mm',
left: '15mm',
right: '15mm'
}
}.to_json
response = http.request(request)
File.binwrite('page.pdf', response.body)request.body = {
html: '<h1>Invoice #1234</h1><p>Total: $99.00</p>',
format: 'A4',
printBackground: true
}.to_jsonuri = URI('https://api.snapapi.pics/extract')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
request['Content-Type'] = 'application/json'
request.body = {
url: 'https://example.com/blog-post',
format: 'markdown'
}.to_json
response = http.request(request)
content = JSON.parse(response.body)
puts content['markdown']uri = URI('https://api.snapapi.pics/video')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
request['Content-Type'] = 'application/json'
request.body = {
url: 'https://example.com',
duration: 5,
width: 1280,
height: 720,
format: 'mp4'
}.to_json
response = http.request(request)
File.binwrite('recording.mp4', response.body)response = http.request(request)
case response.code.to_i
when 200
File.binwrite('screenshot.png', response.body)
puts 'Success!'
when 401
puts 'Invalid API key'
when 429
retry_after = response['Retry-After']
puts "Rate limited. Retry after #{retry_after}s"
when 400
error = JSON.parse(response.body)
puts "Bad request: #{error['message']}"
else
puts "Error #{response.code}: #{response.body}"
end# app/controllers/screenshots_controller.rb
class ScreenshotsController < ApplicationController
def create
uri = URI('https://api.snapapi.pics/screenshot')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
request['Content-Type'] = 'application/json'
request.body = {
url: params[:url],
format: 'png',
width: 1280
}.to_json
response = http.request(request)
send_data response.body,
type: 'image/png',
filename: 'screenshot.png',
disposition: 'attachment'
end
end# app/jobs/screenshot_job.rb
class ScreenshotJob < ApplicationJob
queue_as :default
def perform(url, output_path)
uri = URI('https://api.snapapi.pics/screenshot')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
request['Content-Type'] = 'application/json'
request.body = { url: url, format: 'png' }.to_json
response = http.request(request)
File.binwrite(output_path, response.body)
end
end
# Usage
ScreenshotJob.perform_later('https://example.com', 'tmp/screenshot.png')require 'faraday'
conn = Faraday.new(url: 'https://api.snapapi.pics') do |f|
f.headers['Authorization'] = "Bearer #{ENV['SNAPAPI_KEY']}"
f.headers['Content-Type'] = 'application/json'
end
response = conn.post('/screenshot') do |req|
req.body = {
url: 'https://example.com',
format: 'png',
width: 1280
}.to_json
end
File.binwrite('screenshot.png', response.body)