Send a URL, get back a signed PNG. No headless browser to operate, no infrastructure to maintain. Pay-as-you-go: ₹99 for 100 renders.
$ curl -s -X POST https://screenshot.tools.town/v1/capture \ -H "X-API-Key: tt_xxxx" \ -d '{"url":"https://example.com"}' | jq .image_url
Try it live — no login required
3 free captures per IP · No login required · Public HTTPS URLs only
A thin, focused API built on Cloudflare Browser Rendering. Fast cold-start, global edge, no servers.
Capture the entire page or just the viewport. Configurable width and height.
Every response includes a time-limited signed URL to your PNG — served from Cloudflare R2.
Cloudflare Workers + Browser Rendering. Your request executes at the edge nearest your user.
Private IPs, localhost, link-local, and redirect chains to internal hosts are blocked before browser launch.
Pass a CSS selector. The browser waits for it to appear before taking the screenshot.
Every response includes balance_after. Know when to top up without hitting the dashboard.
One endpoint. Any language. Any runtime.
curl -s -X POST https://screenshot.tools.town/v1/capture \
-H "X-API-Key: tt_xxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://myapp.com/og-card/123",
"viewport": { "width": 1200, "height": 630 },
"fullPage": false
}' const res = await fetch('https://screenshot.tools.town/v1/capture', {
method: 'POST',
headers: {
'X-API-Key': process.env.SCREENSHOT_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://myapp.com/og-card/123' }),
});
const { image_url, balance_after } = await res.json();
console.log(image_url); // https://media.surror.workers.dev/v1/raw?token=... import httpx, os
r = httpx.post(
"https://screenshot.tools.town/v1/capture",
headers={"X-API-Key": os.environ["SCREENSHOT_API_KEY"]},
json={"url": "https://myapp.com/og-card/123"},
)
data = r.json()
print(data["image_url"]) {
"media_id": "018f3e1a-...",
"image_url": "https://media.surror.workers.dev/v1/raw?token=...",
"expires_at": "2026-04-13T12:00:00Z",
"content_type": "image/png",
"byte_size": 42318,
"balance_after": 99
} No subscriptions. Buy a render pack, use it whenever. Credits never expire.
No. Credits never expire. Buy a pack and use it whenever you need.
Credits are debited only after a successful capture. Auth failures, SSRF blocks, and rate limits never consume a credit.
No. Private IPs (RFC1918, localhost, link-local) are blocked for security. The URL must be a public HTTPS address.
Signed image URLs expire after 24 hours by default. The exact expiry is in the expires_at field of every response.
Yes: 60 captures per minute per API key. Contact us if you need a higher limit.
Cloudflare Workers — global edge. Your request runs in the region nearest the caller.
Create an account, buy 100 renders for ₹99, and make your first API call in under 5 minutes.
Get started