GUIDE · UPDATED OCT 2026
Screenshot API: turn any URL into an image
A screenshot API is a managed headless browser you call over HTTP. Instead of running Puppeteer or Playwright yourself — managing browser pools, memory leaks, and scaling — you send a URL and get back a PNG.
What people use it for
- Link previews — generate thumbnails for user-submitted URLs in your app
- Monitoring — visual regression: screenshot key pages on a schedule, diff the pixels
- Open Graph fallbacks — no social card designed? A screenshot beats a blank rectangle
- Reports & PDFs — embed live page captures in customer-facing reports
- Archiving — snapshot pages before they change
The one-request version
curl "https://shotsapi.com/v1/screenshot?url=https://example.com&width=1280" \
-H "Authorization: Bearer $SHOTS_KEY" \
--output screenshot.png
That's it. The API loads the page in a real browser, waits for it to settle, and returns a PNG.
Options that matter
| Parameter | What it does | Example |
|---|---|---|
url | Page to capture (required) | ?url=https://example.com |
width | Viewport width in px | &width=390 (mobile view) |
full_page | Capture the whole scrollable page | &full_page=true |
delay | Wait ms before capturing (for animations) | &delay=2000 |
Node.js example
const res = await fetch(
"https://shotsapi.com/v1/screenshot?url=" + encodeURIComponent("https://example.com"),
{ headers: { Authorization: `Bearer ${process.env.SHOTS_KEY}` } }
);
if (!res.ok) throw new Error("screenshot failed: " + res.status);
await Bun.write("screenshot.png", res); // or fs.writeFile with arrayBuffer()
Python example
import os, requests
r = requests.get(
"https://shotsapi.com/v1/screenshot",
params={"url": "https://example.com", "width": 1280},
headers={"Authorization": f"Bearer {os.environ['SHOTS_KEY']}"},
timeout=60,
)
r.raise_for_status()
open("screenshot.png", "wb").write(r.content)
DIY vs API: the real tradeoff
Running your own Playwright works fine at 10 screenshots a day. At 10,000 a day you're debugging browser memory leaks, zombie Chromium processes, proxy rotation, and sites that detect headless browsers. The API exists so you never think about any of that — one endpoint, predictable latency, no infrastructure.
Try it free
Shots is free while in beta. The live demo on the homepage captures real screenshots with no signup — or use the free screenshot tool for one-off captures.
Ship screenshots today, not next sprint.
Free during beta · docs with curl, Node & Python examples.
Read the quickstart Shots vs Microlink