Skip to content
AAPIScreenshot

Every screenshot, clean and ready to ship

Capture any page as a crisp PNG, JPEG or WebP in one call. Cookie banners removed automatically, no browser infrastructure to run or babysit.

100 free screenshots, no credit card

curl https://api.apiscreenshot.com/v1/screenshot \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://en.wikipedia.org/wiki/Main_Page", "fullPage": true }' \
  -o screenshot.png
A screenshot of Wikipedia captured by the APIScreenshot API
→ screenshot.png · 200 · image/png

CLEAN BY DEFAULT

Clean captures, every time

Cookie banners, consent popups, ads and overlays are removed automatically before every capture, so your screenshots show the page, not the pop-up. There is nothing to configure.

A web page captured with a cookie-consent banner covering the content
Before · banner covers the page
The same web page captured clean, with the consent banner removed
After · clean by default

YOUR FRAME, YOUR PIXELS

Render it exactly how you need

Frame the page the way your users actually see it. Capture the full scrollable page or pinpoint a single element, at any viewport, on any device, crisp on retina.

  • Desktop, tablet or mobile — set the viewport, capture what they see
  • Full page or a single element — fullPage, or a CSS selector
  • Retina-crisp — bump deviceScaleFactor to 2 or 3 for high-density shots

EVERY FORMAT FOR THE WEB

PNG, JPEG, WebP: the right image for the job

Get the exact image the web needs: lossless PNG by default, or smaller JPEG and WebP with a quality setting for thumbnails, previews and fast-loading pages.

  • Lossless PNG by default — pixel-for-pixel what the page renders
  • Smaller JPEG & WebP with a quality setting for lighter files
  • WebP gives the best size-for-quality on the modern web

WHAT ELSE YOU GET

URL or HTML, SSRF-safe, agent-native, all in one endpoint

Snapshot a live URL, or render your own HTML

Capture any page by url, or POST your own html and get back exactly that markup rendered. Good for receipts, OG images and email previews.

View docs

Safe to point at any URL your users paste

Requests to private, internal and loopback addresses are blocked by default, so a screenshot URL can never become a window onto your network.

View docs

You only pay for images you get back

One screenshot is one credit, and cached results and failed requests are never billed, so the bill matches the images you actually use.

See pricing
{
  "mcpServers": {
    "apiscreenshot": {
      "url": "https://mcp.apiscreenshot.com",
      "headers": { "Authorization": "Bearer sk_live_..." }
    }
  }
}

Give your AI agent a native screenshot tool

Point Claude or any MCP client at APIScreenshot and it gets a native screenshot tool. Drop this in and your agent can capture any page or rendered HTML. No glue code.

View docs

DROP IT IN, IN MINUTES

Use the language you love

Send one request with your key and the response body is the image itself. No SDK to install, no job to poll, no orchestration on your side.

  • Same call from cURL, Node or Python — your key as a Bearer token
  • The response body is the image — save it, upload it, stream it
  • PNG, JPEG or WebP, any viewport, full page or one element
  • Cached results and failed requests are never billed
curl https://api.apiscreenshot.com/v1/screenshot \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com", "fullPage": true }' \
  -o screenshot.png

USE CASES

One endpoint, a lot of jobs

The same /v1/screenshot call powers each of these. Pick the one that fits and the page walks you through it.

FAQ

Questions, answered

Still stuck? The docs cover every parameter, or reach us at support@apiscreenshot.com.

POST to /v1/screenshot with `{ "url": "https://example.com" }` and your key as `Authorization: Bearer sk_live_...`. The response body is the image bytes (content-type: image/png) — save it to a file, upload it to storage, or stream it straight to your user. One call, one image, no polling.

Yes. Set `"fullPage": true` and APIScreenshot scrolls and stitches the entire scrollable page, not just what fits in the viewport. Leave it off (or false) to capture just the current viewport. You can also pass a CSS `selector` to capture a single element instead.

No — every screenshot is clean and presentation-ready by default. Before each capture APIScreenshot automatically removes cookie banners, consent popups and overlays: it clicks the "reject all" / "decline" button on the common consent-management platforms (OneTrust, Cookiebot, Quantcast, Didomi, Usercentrics, TrustArc, Osano, CookieYes, Complianz and more), hides a curated list of cookie/consent/overlay elements, and lifts any scroll-lock the banner added, so your screenshot shows the page, not the pop-up. A page-health guard reverts the clean-up and captures the original if hiding ever left the page near-empty, so you never get a blank image. You can pass `hideSelectors` to remove your own extra elements, `"blockAds": true` to also drop common ad slots, or `"blockCookieBanners": false` if you ever want banners left in. Honest caveats: on "consent-or-pay" paywalls the wall is visually hidden, not legally consented to; and heavily bot-protected sites (aggressive CAPTCHAs / fingerprinting) are out of scope for now, though a stealth/proxy tier is on the roadmap.

Yes. Instead of `url`, send a `html` string and APIScreenshot renders exactly that markup in a real browser engine, then returns the screenshot. It is ideal for receipts, social/OG images, email previews and any HTML you generate on the fly — no need to host a page first.

Output is PNG (lossless, the default), or JPEG or WebP with a quality setting when you want smaller files — WebP gives the best size-for-quality on the web. You control the capture with `viewport` (width and height for desktop, tablet or mobile) and `deviceScaleFactor` (set 2 or 3 for crisp retina images).

No. By default each screenshot is rendered transiently and the bytes are streamed straight back to you; nothing is persisted on our side. Optional R2-backed hosting with signed URLs is on the roadmap for when you want us to host the image for you, but until you opt in, we keep nothing.

Yes — APIScreenshot ships a drop-in MCP (Model Context Protocol) server. Point Claude, or any MCP-capable client, at it and the agent gets a native `screenshot` tool: it can capture any web page or rendered HTML as part of a workflow, no glue code required.

One screenshot = one credit. Each screenshot is one render of browser time, so usage is metered per screenshot. Cached results and failed requests are never billed. Each plan includes a monthly bucket of screenshots; when you reach it, requests are hard-capped (HTTP 402) rather than billed for overage — upgrade to a larger plan to keep going.

Make your first call today

One endpoint, 100 free screenshots to start. No credit card.