Capture pixel-perfect screenshots of any website with a single API call. PNG, JPEG, or PDF. Lightning fast.
# Capture a screenshot
curl "https://apisnap.dev/api/screenshot?url=example.com&api_key=YOUR_KEY" \
-o screenshot.png
# Full-page PDF with dark mode
curl "https://apisnap.dev/api/screenshot?url=github.com&format=pdf&full_page=true&dark_mode=true&api_key=YOUR_KEY" \
-o page.pdf
Everything you need, nothing you don't
Screenshots rendered in a real Chromium browser. Average response time under 3 seconds.
Export as PNG, JPEG, or PDF. Control quality, dimensions, and device scale factor.
Capture sites in dark mode with a single parameter. Perfect for generating preview cards.
Capture the entire scrollable page, not just the viewport. Great for archival and testing.
Target specific elements via CSS selector. Screenshot just a chart, form, or any component.
SSRF protection, private IP blocking, rate limiting. Your API key, your data.
Start free. Scale when you're ready.
Get started at no cost
For growing projects
For production workloads
Everything you need to get started
Include your API key via Bearer token or query parameter:
# Via header (recommended)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://apisnap.dev/api/screenshot?url=example.com"
# Via query parameter
curl "https://apisnap.dev/api/screenshot?url=example.com&api_key=YOUR_KEY"
Capture a screenshot of any public URL.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | URL to screenshot |
format | string | png | png, jpeg, or pdf |
width | integer | 1280 | Viewport width (320-3840) |
height | integer | 800 | Viewport height (200-2160) |
full_page | boolean | false | Capture entire scrollable page |
quality | integer | 80 | JPEG quality (1-100) |
delay | integer | 0 | Wait (ms) after page load (0-10000) |
dark_mode | boolean | false | Emulate dark color scheme |
scale | number | 1 | Device scale factor (1-3, use 2 for retina) |
selector | string | - | CSS selector to screenshot a specific element |
Create a free API key.
curl -X POST "https://apisnap.dev/api/register" \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
Check your current usage and limits. Requires authentication.
Every screenshot response includes these headers:
| Header | Description |
|---|---|
X-Usage-Remaining | Screenshots remaining this month |
X-Response-Time | Time taken to generate screenshot |
X-Screenshot-Width | Rendered viewport width |
X-Screenshot-Height | Rendered viewport height |
const response = await fetch(
`https://apisnap.dev/api/screenshot?url=${encodeURIComponent(url)}`,
{ headers: { 'Authorization': `Bearer ${apiKey}` } }
);
const buffer = await response.arrayBuffer();
import requests
r = requests.get(
"https://apisnap.dev/api/screenshot",
params={"url": "https://example.com"},
headers={"Authorization": f"Bearer {api_key}"}
)
with open("screenshot.png", "wb") as f:
f.write(r.content)
See it in action (requires an API key)
100 screenshots/month. No credit card required.