Screenshot API · 17 output formats

One URL. The file you need.

Instantly capture any webpage as an image, PDF, HTML, Markdown, or video — all from a single HTTP request.

No card requiredFailures cost nothingCache hits are free

Prefer to inspect the API first? Read the quickstart.

One request → one filePAGECAPTURE / 01
curl -G https://api.pagecapture.dev/v1/take \
  -H "X-Access-Key: $PAGECAPTURE_KEY" \
  --data-urlencode "url=https://example.com" \
  -d "full_page=true" \
  -d "format=png" \
  -o screenshot.png
Capture result
succeeded
https://example.com
Noma
Shop now
NEW COLLECTION

Objects for slower mornings.

Thoughtful essentials, made in small batches from natural materials.

Explore the collection
No. 01 · Hinoki
PLANT-BASEDMADE IN SMALL BATCHESREFILLABLE
Artifact
PNG · 1440×900
Billing
1 credit
Engine
stable
17formats
Images, PDF, HTML, Markdown, video and animated GIF.
142options
Every one documented, validated, and available in the playground.
100MiB
Maximum request body, for inline HTML and large batches.
1000per batch
Items in one bulk call, each billed and failed independently.
How a capture actually runs

The hard part starts after the browser opens.

Launching one locally takes an afternoon. Running it against every page on the internet means queues, timeouts, fonts, codecs, lazy loading, sticky headers and hostile pages. That is the part you are buying.

01 / Ask

One call, every option

Viewport, device, full page, selector, clip, blockers, cookies, scripts and waits — all on the same endpoint, in GET or POST.

02 / Render

A fresh browser per capture

Each job gets an isolated Chromium context. Nothing carries over between captures, and nothing reaches a private network.

03 / Deliver

Bytes, JSON, S3 or webhook

Take the raw file, a signed URL, an upload into your own bucket, or a signed callback when the job finishes.

One endpoint, many outputs

Change one parameter. Get a different file.

The same options — viewport, waits, blockers, authentication — apply whether you want a PNG, a PDF, or a thirty-second scroll-through video.

Images

PNG, JPEG, WebP, AVIF, TIFF and GIF, at any device scale.

PDF and text

Print-ready PDF, rendered HTML, or clean Markdown.

Video and GIF

Scroll-through recordings from 1 to 30 seconds.

Built for production, not demos

  • Async mode returns 202 and calls your webhook when the file is ready
  • Signed webhooks with a stable event id, so retries deduplicate cleanly
  • Bulk endpoint for up to 1,000 items, each succeeding or failing alone
  • Cache with a TTL you control, isolated to your organization
  • Stable error codes that outlive any HTTP status change
POST /v1/take

{
  "url": "https://example.com/invoice/1042",
  "format": "pdf",
  "async": true,
  "webhook_url": "https://your.app/hooks/capture",
  "webhook_sign": true,
  "external_identifier": "invoice_1042"
}

// 202 Accepted
{ "is_successful": true, "request_id": "req_01...", "status": "accepted" }
How we handle secrets

Your session cookie does its job. Then it disappears.

We keep it only long enough to open the authenticated page. This is its entire lifecycle for every capture, including failed ones.

Read the security model
Secret lifecycle
One capture only
01 / Intake

Encrypted before storage

Separated from the request and sealed with AES-256-GCM before anything is persisted.

02 / In use

Opened inside one browser

Decrypted only in the isolated Chromium worker and injected into that capture.

03 / Job ends

Overwritten, then gone

The encrypted blob is zeroed and the browser context closes, on success or failure.

Logs
Never included
Dashboard
Never displayed
Errors
Never echoed
Simple to predict

One credit per successful capture.

Full page, PDF, scrolling screenshot or video — all one credit. Failures and cache hits are free.

Free
$0/mo
100 credits

Every feature unlocked, capped at 100 successful captures a month.

Basic
$10/mo
2,000 credits

Images, PDF, HTML and Markdown for a single production workload.

Growthmost complete
$47/mo
10,000 credits

Adds scrolling screenshots and video capture.

Scale
$155/mo
50,000 credits

Priority support and the highest limits for heavy pipelines.

Before you integrate

The details that decide it.

What exactly counts as a credit?

One successful capture that was not served from cache. Failures cost nothing — whether the page timed out, the selector was missing, or our infrastructure broke. Cache hits cost nothing either.

Can I capture pages behind a login?

Yes, with cookies, an Authorization header, or custom headers. They are encrypted at rest, decrypted only inside the worker, destroyed when the job ends, and never written to a log.

What stops someone pointing the API at my internal network?

Every URL, redirect, subresource, storage endpoint and webhook target is resolved and checked against blocked ranges — loopback, RFC1918, link-local, CGNAT, cloud metadata services, and the IPv4-mapped IPv6 form of all of them.

How long do you keep my screenshots?

Without caching, the artifact lives minutes for a sync call and up to 24 hours for an async one, then it is deleted. With caching, it lives as long as the TTL you set, isolated to your organization.

Do you store the URLs I capture?

Request logs keep the URL for your plan's retention window so you can debug. Query parameters that look like credentials are redacted. Cookies, headers and keys are never logged at all.

Your first capture is two minutes away.

Create an account, copy the snippet from the playground, and ship it.

Prefer to read first? Every option is documented.