Beta — API keys are free

Screenshots & OG images via API.
Without the $49/mo.

Shots is the developer-first alternative to Bannerbear: 12 hand-designed templates, a screenshot API, and usage-based pricing from $9. No browser to babysit, no template editor to learn — just POST and get a PNG.

Free tier · 100 images/mo · No credit card · Renders in ~180ms

# Your first OG image — 30 seconds, no SDK curl -X POST https://api.shots.dev/v1/og/blog-classic \ -H "Authorization: Bearer $SHOTS_KEY" \ -H "Content-Type: application/json" \ -d '{"title":"Ship boring software, on purpose","kicker":"SHOTS · BLOG"}' \ --output og.png
const res = await fetch("https://api.shots.dev/v1/og/blog-classic", { method: "POST", headers: { Authorization: `Bearer ${process.env.SHOTS_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ title: "Ship boring software, on purpose", kicker: "SHOTS · BLOG", }), }); await Bun.write("og.png", res); // or res.arrayBuffer() in Node
import os, requests res = requests.post( "https://api.shots.dev/v1/og/blog-classic", headers={"Authorization": f"Bearer {os.environ['SHOTS_KEY']}"}, json={"title": "Ship boring software, on purpose", "kicker": "SHOTS · BLOG"}, ) open("og.png", "wb").write(res.content)
Live demo

Don't take our word for it.
Render one right now.

This demo hits the real API with a shared public key. Pick a template, edit the fields, and watch a PNG come back.

⚠️ Demo key pending. The backend hasn't published the public demo key yet (DEMO_KEY in js/demo.js). Live rendering is paused — but the curl snippet below is exactly what this call looks like.
Copy as curl

            
🖼️

Your rendered 1200×630 PNG will appear here.

⚠️ Demo key pending. The backend hasn't published the public demo key yet (DEMO_KEY in js/demo.js). Live capture is paused — but the curl snippet below is exactly what this call looks like.
Copy as curl

            
📸

Your screenshot will appear here.

Why Shots

Built for developers,
priced like it.

Bannerbear charges $49/mo for 1,000 images and a drag-and-drop editor you'll open twice. Shots is the API-native version — cheaper, faster, and scriptable.

⚡

API-first, obviously

Every template is a POST away. Send fields as JSON, get a 1200×630 PNG back in ~180ms. Node and Python SDKs, or plain curl — your call.

🎨

12 templates, designed not templated

Blog cards, changelogs, quote cards, podcast covers — each one hand-built by a designer with real sample copy. New drops land monthly, and every template is versioned.

🛋️

No browser to babysit

We run the Chromium fleet: retries, font rendering, memory management, 3 AM OOM kills — all ours. You never think about Puppeteer or Playwright again.

💸

Pricing that scales down

$9/mo for 2,500 images. Bannerbear starts at $49 for 1,000. Do the math — then spend the difference on something fun.

How it works

From zero to PNG in three steps

1

Grab a key

POST /v1/keys with your email. One call, one key — no dashboard spelunking, no sales call.

2

Pick a template or a URL

Send fields to /v1/og/:slug for designed images, or point /v1/screenshot at any URL.

3

Get a PNG

A crisp image comes back in milliseconds. Hotlink it, cache it on your CDN, or pipe it straight into your build.

Pricing

Start free. Upgrade when it hurts.

Every plan includes all 12 templates, the screenshot API, and commercial use. No seat fees, no template-editor upsells.

Free
$0 / mo

For side projects and trying things out.

  • 100 images / month
  • All 12 templates
  • Screenshot API
  • Community support
Get a free key
Pro
$19 / mo

For teams, SaaS products, and agencies.

  • 15,000 images / month
  • Everything in Starter
  • Priority rendering queue
  • Slack support
Get a free key
🎉 Billing launches soon — API keys are free during beta. Everything above costs $0 while we're in beta, and every beta key locks in launch pricing for 12 months. No credit card required, ever, until you decide to upgrade.
FAQ

Questions, answered

How is this different from Bannerbear?
Bannerbear is a visual template editor with an API attached — great if you want to drag boxes around, $49/mo if you don't. Shots is API-first: templates are code, fields are JSON, pricing starts at $9, and you get 2.5× the images. If you live in your terminal, we're built for you.
Is the free tier really free?
Yes — 100 images a month, all 12 templates, the screenshot API, no credit card. And during beta, everything is free while we finish billing.
What are the rate limits?
During beta: 10 requests/minute on Free, 60/minute on paid plans. Push past it and you'll get a 429 with a Retry-After header. Paid limits go up at launch.
Can I use the images commercially?
Yes. Everything you generate is yours — products, client work, ads, whatever. Free-tier images are fine for commercial use too; we just appreciate a link back.
Do I need to run my own browser?
No. Screenshots run on our managed Chromium fleet with retries, ad/cookie-banner blocking, and retina rendering. No Puppeteer, no Playwright, no memory leaks at 3 AM.
What happens to my key when billing launches?
Nothing breaks. Your key keeps working, you pick a plan when you're ready, and beta users lock in launch pricing for 12 months. We'll email you well before anything changes.