Shotkiln Get a free key
Screenshot API

Website screenshot API

A website screenshot API turns a URL into an image. Send Shotkiln one GET request and get a PNG, JPEG or WebP back, rendered in real Chromium on Cloudflare.

Endpoint
GET or POST /v1/screenshot
Formats
PNG, JPEG, WebP (quality 1–100 for JPEG and WebP)
Viewport
320–3,840 px wide, 200–3,840 px tall, default 1280 × 800
Full page
up to 16,384 px tall
Scale
device_scale_factor 1–3 (2 for retina)
Speed
about 2.5 s typical; cache hits often under half a second
Price
100 free a month; $9 for 2,000 ($4.50 per 1,000)

URL to PNG in one request

Put the target URL in the url parameter and write the response to a file. The same request works from curl, a browser fetch, a cron job or a CI step.

curlimage/png
curl "https://shotkiln.com/v1/screenshot?url=https://example.com&width=1440&height=900&format=png" \
  -H "x-api-key: $SHOTKILN_KEY" -o example.png
pythonimage/webp
import os, requests

r = requests.get("https://shotkiln.com/v1/screenshot",
    params={"url": "https://example.com", "full_page": "true", "format": "webp"},
    headers={"x-api-key": os.environ["SHOTKILN_KEY"]}, timeout=60)
r.raise_for_status()
open("example.webp", "wb").write(r.content)

Full-page and mobile screenshots

full_page=true captures the full scroll height instead of the viewport. For a phone-sized capture, set width=390&height=844&device_scale_factor=3: the page gets a 390 px viewport and the image comes back at 1,170 px wide.

dark_mode=true sets prefers-color-scheme: dark, so sites with a dark theme render in it. delay waits up to 10,000 ms after the load event for animations, web fonts or lazy content.

What happens on each request

  1. Validate. Parameters are checked against your plan's limits. Errors come back as JSON with the parameter name.
  2. Check the address. The hostname is resolved and refused if it points at a private, loopback, link-local or metadata address, or a known malicious host.
  3. Look up the cache. If the same parameters were rendered within cache_ttl, the stored file is returned and no quota is used.
  4. Render. Chromium opens the page, re-checks every redirect and subrequest, and captures the image within the plan's time budget (15–30 s).
  5. Respond. The image is the response body. Headers report quota, rate limit, render time and the target page's HTTP status.

How fast it is

A typical screenshot comes back in about 2.5 seconds. Repeat requests come straight from cache, often in under half a second. Script-heavy news sites take longer, static pages less.

Set cache_ttl as high as your freshness needs allow: cached responses use no quota.

Running on Cloudflare Browser Rendering

Cloudflare Browser Rendering (also called Browser Run) gives Workers a headless Chromium. Cloudflare also offers a REST screenshot endpoint, billed at $0.09 per browser-hour after 10 included hours on the $5 Workers Paid plan.

Shotkiln adds the parts you would otherwise write yourself: API keys and quotas, a shared render cache, SSRF checks on every redirect and subrequest, a malicious-host denylist, PDF and OG endpoints, and an MCP server. If you already run Workers and want full control, calling Browser Rendering directly is cheaper at high volume.

Screenshot API cost at common volumes

Renders a month1,0002,00010,00050,000
Shotkiln$9 Starter$9 Starter$19 Pro$49 Scale
ScreenshotOne$17 Basic$17 Basic$79 Growth$259 Scale
Urlbox$19 Lo-Fi$19 Lo-Fi$99 Ultraabove listed tiers
ApiFlash$7 Lite$35 Medium$35 Medium$180 Large
CaptureAPI$9 Starter$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).

Cheapest published plan covering each volume. Details on the alternatives page.

Frequently asked questions

Is there a free screenshot API?
Yes. A free Shotkiln key gives 100 screenshots a month with a small watermark and no card. ScreenshotOne and ApiFlash also give 100 free a month; Urlbox has no free plan.
Can it capture a full-page screenshot?
Yes. Set full_page=true to capture the whole scroll height, up to 16,384 pixels. Add a delay for lazy-loaded images, and use WebP to keep long pages small.
Does it remove cookie banners and ads?
No. Pages are captured as a first-time visitor sees them, banners included. If you need banner and ad blocking, ScreenshotOne, Urlbox and ApiFlash offer it.
Can I screenshot a page behind a login?
No. Shotkiln renders public pages only and doesn't accept cookies or custom headers, which keeps your sessions out of a third-party browser. For internal dashboards, run Playwright inside your own network.
How long are screenshots stored?
Only for the cache_ttl you set: one hour by default, up to 30 days, or not at all with cache_ttl=0. Nothing is kept for analysis or training.

Related pages