POST/api/screenshot

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

request_01
200 OK
REQUEST
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
binary body · attachment
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 reference
capture.tsNode.js 20+
const 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.

HTTPCODECOST
400invalid_request0
401invalid_key0
403plan_required0
429rate_limited0
5xxcapture_failed0

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.

Compare plan access →
Deterministic rendering
01 · FREE+
Choose a device preset or set width, height, pixel ratio, clipping, and full-page behavior directly.
Six output modes
02 · PLAN GATED
Return PNG, JPEG, WebP, PDF, rendered HTML, or WebM from the same request contract.
Authenticated pages
03 · BASIC+
Pass scoped headers and cookies to capture the dashboards and documentation your users can see.
Retained delivery
04 · BASIC+
Request signed, expiring output and a webhook callback when your workflow needs a durable reference.
Capture controls
05 · GROWTH+
Remove obstructive elements, scroll, hide selectors, execute bounded JavaScript, and add device frames.
Regional capture
06 · SCALE
Route eligible capture requests through a selected region when location changes the rendered result.

Unknown request fields are rejected instead of being silently ignored.

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, device mockups, and, on Scale, WebM recordings.
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, and the Scale plan adds WebM screen recordings of 1 to 15 seconds.
QHow is authentication handled?
API access uses workspace-scoped keys in the x-api-key header or as a Bearer token. Keys are stored as SHA-256 hashes, shown once, expire on a set date, and can be revoked at any time. The account email must be verified before a key is accepted. The dashboard uses Clerk-backed session authentication.
QCan I capture authenticated pages?
Yes, on Basic and higher plans. Pass session cookies or custom headers with the request to capture logged-in dashboards or gated docs. The page must be reachable from the public internet, because localhost and private network addresses are rejected. Use a dedicated read-only account rather than a real user session.
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.
QDoes Screenshotly keep a copy of my captures?
Not by default. A synchronous request returns the file in the response body without storing it. Response caching keeps a copy only for the cacheTtl you set (at most 24 hours). Storage delivery and async jobs keep files for the workspace owner's retention setting: 7 days by default, configurable from 1 to 30.

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.

Full plan comparison →

Free

$0

100 total captures

Core image capture.

Basic

$14/mo

2,500 captures / month

PDF, HTML, storage, webhooks.

MOST USED

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.

Create a free account

NO CARD · KEY SHOWN ONCE · REVOKE ANY TIME