Render any URL. Receive the pixels.
One authenticated request returns the file or an explicit error. Screenshotly runs Chromium, applies your capture controls, and reports exactly how long the render took.
100 successful captures free · no credit card · failed captures cost 0
curl --request POST \
https://screenshotly.app/api/screenshot \
--header "x-api-key: $KEY" \
--data '{
"url": "https://example.com",
"format": "png",
"fullPage": true
}'RESPONSE
- content-type
- image/png
- duration
- 1240 ms
- size
- 184203 B
- remaining
- 99 / 100
- output modes
- 06
- quota on failed captures
- 0
- pixel viewport width
- 320–3840
- requests per minute
- 5–200
01 / Quickstart
A normal fetch call. A real file response.
The response body contains the capture unless you request retained delivery. Errors stay machine-readable, and only completed captures advance usage.
Read the API referenceconst response = await fetch(
"https://screenshotly.app/api/screenshot",
{
method: "POST",
headers: {
"x-api-key": process.env.SCREENSHOTLY_API_KEY,
"content-type": "application/json",
},
body: JSON.stringify({ url, format: "webp" }),
},
);
if (!response.ok) throw new Error(await response.text());
await writeFile("capture.webp", Buffer.from(await response.arrayBuffer()));02 / Failure semantics
Failure is part of the contract.
Target pages hang, redirect, and block automation. Your integration gets a status it can act on—and a failed capture never consumes quota.
RETRY POLICY
Back off on 429. Retry 5xx. Fix 400. Never turn a plan error into an infinite loop.
03 / Capability matrix
Browser infrastructure, exposed as parameters.
Every control below is in the request schema today. Plan labels tell you where the gate is before you integrate.
- Deterministic rendering
- Choose a device preset or set width, height, pixel ratio, clipping, and full-page behavior directly.
- Six output modes
- Return PNG, JPEG, WebP, PDF, rendered HTML, or WebM from the same request contract.
- Authenticated pages
- Pass scoped headers and cookies to capture the dashboards and documentation your users can see.
- Retained delivery
- Request signed, expiring output and a webhook callback when your workflow needs a durable reference.
- Capture controls
- Remove obstructive elements, scroll, hide selectors, execute bounded JavaScript, and add device frames.
- Regional capture
- Route eligible capture requests through a selected region when location changes the rendered result.
Unknown request fields are rejected instead of being silently ignored.
04 / Developer workflows
Put capture inside the system you already run.
Screenshotly is an HTTP boundary around browser rendering. Your application keeps control of triggers, storage, retries, and downstream processing.
Visual regression evidence
Capture exact viewports in CI, store the returned bytes in your own pipeline, and diff them with the tool you already trust.
Documentation that stays current
Regenerate product screenshots from a deployment hook instead of maintaining a folder of stale manual captures.
Previews generated at request time
Create thumbnails and social previews from one endpoint, with explicit dimensions, format, and page state.
05 / Before you integrate
Questions worth answering before the first request.
- QWhat is Screenshotly?
- Screenshotly is an HTTP API for rendering public or authenticated web pages. Send a URL and receive PNG, JPEG, or WebP bytes; paid plans add PDF, HTML, authenticated capture controls, AI-assisted cleanup, and device mockups.
- QDo I need a credit card to start?
- No. Every account starts with 100 total free captures so you can integrate the API before choosing a paid plan.
- QWhat formats are supported?
- PNG, JPEG, and WebP are available on every plan. Basic and higher plans also support PDF and HTML output.
- QHow is authentication handled?
- API access uses workspace-scoped keys in the x-api-key header or as a Bearer token. Keys are hashed server-side, shown once, and can be rotated or revoked. The dashboard uses Clerk-backed session authentication.
- QCan I capture authenticated pages?
- Yes. Pass cookies or custom headers with your request to capture logged-in dashboards, gated docs, or internal tooling. Service accounts with read-only scopes are the recommended pattern so you never rotate real user credentials into a capture pipeline.
- QHow fast is a typical capture?
- Capture time depends on the target page, delay, output format, and optional processing. Every successful response reports its measured duration in X-Screenshot-Duration.
- QDo failed captures use my quota?
- No. Only successful 2xx responses count toward usage. Invalid requests, authentication failures, plan errors, rate limits, and capture failures are recorded for diagnostics but consume no quota.
06 / Pricing
Start with the response. Scale when the workload does.
Only completed captures consume quota. Requests stop at your configured limit; there are no automatic overage charges.
Free
$0
100 total captures
Core image capture.
Basic
$14/mo
2,500 captures / month
PDF, HTML, storage, webhooks.
Growth
$59/mo
12,000 captures / month
AI cleanup, scripts, scrolling.
Scale
$199/mo
50,000 captures / month
Volume, regions, WebM.
READY / WHEN YOU ARE
Ship the integration before you buy the infrastructure.
Create a key, make a real request, and inspect the returned bytes and headers. You have 100 successful captures to decide whether it fits.
NO CARD · KEY SHOWN ONCE · REVOKE ANY TIME