Screenshot API

A screenshot API that returns the file, not a job to poll

One GET request in, one PNG out. No queue to poll, no SDK to install, no browser to keep alive.

Capture settings
Enter the source, choose your options, then run the capture.
Result
Your capture will appear here and stay in view.
waiting

No result yet

Complete the settings and run the tool. Images, PDFs, text, and video all preview in this panel.

Send this exact request
cURL, TypeScript and Python are generated from the same configuration as the demo.
curl --fail-with-body "https://api.pagecapture.dev/v1/take" \
  -H "X-Access-Key: $PAGECAPTURE_KEY" \
  -H "Content-Type: application/json" \
  --data '{"url":"https://example.com","format":"png"}' \
  -o capture.png

Synchronous by default

The response body is the image. Switch to async only when you want to.

Every format on one endpoint

PNG, JPEG, WebP, AVIF, TIFF, GIF, PDF, HTML, Markdown and video.

Real device emulation

Presets set viewport, scale, touch and user agent together, so pages behave as they would on the device.

Charged on success only

Timeouts, missing selectors and our own failures cost nothing. Cache hits are free too.

Use this when
  • Your application needs image or document bytes from a URL.
  • You need retries, isolation, cache and billing around browser rendering.
Do not use this when
  • A human only needs an occasional screenshot from their own browser.
  • The workflow needs arbitrary browser interaction after the artifact is created.
Workflow

From input to verified artifact

  1. 01

    Send

    POST a URL and output options to /v1/take.

  2. 02

    Render

    The worker validates egress, opens Chromium and applies the documented action order.

  3. 03

    Receive

    The response contains the file bytes, or JSON when explicitly requested.

Edge cases and common errors

Page never becomes idle

timeout_error

Prefer a readiness selector over waiting indefinitely for network silence.

Private target

network_error

Loopback, private networks and metadata services are blocked by the egress policy.

DIY in hours and operational risk

Keep the browser when that is the simpler system.

A local Puppeteer or Playwright script can be the shortest path for a small controlled workload.

DIY is a good fit when

  • The pages are yours, volume is low and browser operation is already reliable.
  • You need arbitrary interaction that is not part of the public capture contract.

No default is supplied: we do not invent engineering-hour savings.

Responsibility and risk transferred
Browser lifecycle
Crashes, upgrades and leaked processes remain outside your application.
Untrusted network access
Every navigation and subresource is checked by one egress policy.
Workload pricing

1,000 screenshot requests

This is an editable scenario, not a savings claim. Only successful captures that miss cache are billable.

Billable successes
882
Smallest included plan
Basic
Published monthly price
$10.00
Tested and reviewed

Written by PageCapture Engineering. Reviewed by PageCapture API maintainers. Last tested 2026-08-11.

cURL, TypeScript and Python executed against controlled fixtures; request contract and artifact format verified.

Questions this raises

Do I need to install anything?

No. It is an HTTP endpoint — curl, fetch or requests is enough. SDK snippets are generated in the playground if you want typed options.

How fast is a capture?

It depends almost entirely on the page you are capturing. We do not publish an average, because ours would say more about the sample of pages than about the service.

Can I capture a page that needs a login?

Yes — cookies, an Authorization header or custom headers, sent over POST. They are encrypted and destroyed when the job ends.