Screenshot any web page with one API call
Send a URL, get the image or PDF back in seconds. Real browser rendering, nothing for you to host.
curl "https://shotkiln.com/v1/screenshot?url=https://example.com" -o shot.png- Runs on Cloudflare's global network
- PNG, JPEG, WebP, PDF and OG images
- MCP server for AI agents
- OpenAPI 3.1 spec

Quick answers
- What is a screenshot API?
- A screenshot API loads a URL in a real browser and returns an image of the page in the HTTP response. Shotkiln is a screenshot API that also returns PDFs and Open Graph images.
- How much does Shotkiln cost?
- Free for 100 watermarked renders a month, no card needed. Paid plans are $9 for 2,000, $19 for 10,000 and $49 for 50,000, with no overage fees.
- How long does a screenshot take?
- A typical screenshot comes back in about 2.5 seconds. Repeat requests come straight from cache, often in under half a second.
- Which output formats are supported?
- Screenshots come back as PNG, JPEG or WebP, up to 3,840 px wide and 16,384 px tall for full pages. PDFs come in six paper sizes, and OG images are 1200 × 630 PNGs.
- Do I need an API key?
- Not to try it: without a key you get 10 watermarked renders a day. A free key takes one click and gives 100 a month; paid keys remove the watermark.
- Should I use a screenshot API or run Puppeteer myself?
- Run Puppeteer yourself for low-volume renders of your own site. Use a screenshot API when traffic is spiky or users submit the URLs: you get SSRF protection without running a browser fleet.
Three endpoints. One request each.
Call any endpoint with GET or POST and the response is the file. No job IDs to poll, no storage bucket to set up.
Website screenshot API
Viewport or full-page captures up to 16,384 px tall, in retina and dark mode, with a delay for pages that animate in.
- url
- public http(s) URL
- width, height
- 320–3840 px, default 1280 × 800
- full_page
- capture the whole scroll height
- format
- png, jpeg or webp, with quality
curl "https://shotkiln.com/v1/screenshot?url=https://example.com&full_page=true&format=webp" \
-H "x-api-key: $SHOTKILN_KEY" -o page.webpHTML to PDF API
Print any URL, or up to 1 MB of your own HTML, to PDF. Invoices and reports come out at your paper size and margins, portrait or landscape.
- url | html
- one of the two
- format
- A3, A4, A5, Letter, Legal, Tabloid
- margin
- px, mm, cm or in
const res = await fetch("https://shotkiln.com/v1/pdf", {
method: "POST",
headers: { "x-api-key": process.env.SHOTKILN_KEY, "content-type": "application/json" },
body: JSON.stringify({ html: invoiceHtml, format: "A4", margin: "15mm" }),
});
await fs.writeFile("invoice.pdf", Buffer.from(await res.arrayBuffer()));OG image API
1200 × 630 social cards from a title and one of three templates. Generate them in your build step or the moment a page goes live.
- title, subtitle
- up to 200 and 300 characters
- template
- default, split, gradient
- theme, accent
- light or dark, any hex colour
curl "https://shotkiln.com/v1/og?title=Release%20notes%202.4&site=acme.dev&template=split" \
-H "x-api-key: $SHOTKILN_KEY" -o og.pngSafe to point at user-submitted URLs
Shotkiln checks every address the browser touches, redirects and subrequests included, before it loads.
- Private and internal addresses. Loopback, RFC 1918, link-local, carrier-grade NAT, IPv6 ULA and cloud metadata (169.254.169.254), refused after DNS resolution.
- Other schemes and ports. http and https only, on ports 80, 443, 8080 and 8443.
- Known malicious hosts. A static denylist plus the abuse.ch URLhaus feed, refreshed hourly.
- Runaway pages. Capped at 25 MB of resources, 300 requests and a 15–30 s time budget per render, by plan.
- Identified traffic. Every render sends
ShotkilnBot/1.0in its user agent, linking to /bot.
Screenshot API pricing, side by side
The cheapest published plan for each volume, before overage. Shotkiln matches or beats every one. For ad blocking, proxies or storage uploads, the alternatives page shows who offers them.
| Renders a month | 2,000 | 10,000 | 50,000 |
|---|---|---|---|
| Shotkiln | $9 Starter | $19 Pro | $49 Scale |
| ScreenshotOne | $17 Basic | $79 Growth | $259 Scale |
| Urlbox | $19 Lo-Fi | $99 Ultra | above listed tiers |
| ApiFlash | $35 Medium | $35 Medium | $180 Large |
| CaptureAPI | $9 Starter | $29 Pro | $79 Business |
Urlbox Lo-Fi ($19) renders third-party sites as thumbnails only; full captures of other sites start on Hi-Fi ($49 for 5,000).
List prices from each vendor's pricing page.
A screenshot tool for AI agents
Add the remote MCP server at /mcp to Claude, Cursor or any MCP client, and your agent gets take_screenshot, render_pdf and generate_og_image. Agents that speak HTTP can read the OpenAPI 3.1 spec or llms.txt. Setup: MCP screenshot server.
{
"mcpServers": {
"shotkiln": {
"url": "https://shotkiln.com/mcp",
"headers": { "x-api-key": "YOUR_KEY" }
}
}
}Get your free API key
Takes one click. No email or card. The free plan includes 100 watermarked renders a month to build with; paid plans remove the watermark when you ship.
Your free API key
Save it as SHOTKILN_KEY in your .env file or CI secrets. Never put it in client-side code.
- Make a first request.shell
curl "https://shotkiln.com/v1/screenshot?url=https://example.com" \ -H "x-api-key: $SHOTKILN_KEY" -o shot.png - Check your usage on the dashboard, or read the
x-quota-remainingheader on any response. - Read the quickstart for Node.js, Python and MCP setup.
100 renders a month with a small watermark. Paid plans on the pricing page.
From a terminal: curl -X POST https://shotkiln.com/v1/keys