screenshotsCapture public pages as screenshots from one API call.

Paste a URL into the playground, choose desktop or mobile, wait for dynamic content, and get a screenshot your app can store, show, or attach to a workflow.

how screenshots workCapture a page. Get an image URL.

Send a public URL, choose how the page should render, and receive a screenshot your app can store, show, or attach to a workflow. If the capture needs more time, poll the result.

1

Send URL

Add a public page URL and choose desktop or mobile.

2

Tune capture

Set full-page, viewport, JPEG/PNG format, wait behavior, region, or country.

3

Render page

ByteKit loads the page and captures the rendered visual state.

4

Receive result

Get an image_url when complete, or a poll_url while it is processing.

screenshots api use casesCapture the page state, not just the text.

Use POST /v1/screenshots when your app needs rendered page evidence. Send a URL, choose desktop or mobile, and get an image result your system can store, show, or attach to a workflow.

Compliance & QA evidence

Keep visual proof of what a page looked like at capture time. Useful for release checks, audits, claims review, and catching unexpected page changes.

E-commerce & competitive tracking

Capture product pages, pricing pages, promo banners, stock states, and regional variants. Use screenshots when text extraction misses layout, badges, images, or visual merchandising.

Website previews & thumbnails

Generate customer site cards, link previews, internal dashboards, or gallery thumbnails from live URLs without running your own browser fleet.

AI agents & review workflows

Give agents or human reviewers a visual source when markdown is not enough. Pair screenshots with /scrape output so your system has both the page content and the rendered evidence.

Not the right tool?

Page text Scrape
Structured data Schema
Finding pages Search

Screenshots are single still images, not recordings.

common capture recipesStart with the capture pattern closest to your workflow.

Use these as mental models for the playground and API request. Each recipe maps to the controls below.

QA evidence

full_page=trueformat=pngwait_until=load

Keep visual proof of what the page looked like at capture time.

Mobile product page

device=mobilecountry=USscroll=true

Capture a product page as a mobile visitor would see it.

Regional price check

country=DEwait_for_selector=.price

Wait for the price element and capture the localized page state.

request controlsTune the render, the output, readiness, and context.

Every screenshot request supports the fields below, grouped by what they control.

Render target

deviceviewportfull_pageclip · advdevice_scale_factor

Choose desktop or mobile, a viewport or full-page render, an optional clip region, and pixel density.

Image output

formatquality

jpeg or png. Quality is meaningful for jpeg — lower it to trade fidelity for a smaller file.

Page readiness

wait_untilwait_for_selectordelay_msscroll

Wait for load events or a selector, add a delay, or scroll to trigger lazy content before the capture.

Request context

countryheadersmetadata

Route by country and pass headers and metadata that travel with the capture.

response + billingResponse fields, billing evidence, and failure states.

Response + billing evidence

Serialized JSON fields

idstatusurlimage_urlpage_titleimage_widthimage_heightfile_size_bytescredits_chargederror_codeerror_messagecreated_atcompleted_atexpires_atpoll_url

Billing transparency headers

X-Screenshot-ID capture id
X-Screenshot-Status completed / processing
X-Raw-Bytes bytes fetched from the page
X-Billable-Bytes bytes you are charged for
X-Billing-Multiplier render multiplier applied

Metered by bandwidth. Plan rates on the pricing page

Failure states

invalid_url The url was missing or not a valid http(s) address. The request is rejected before capture.
host_forbidden The target host is not allowed for capture.
path_forbidden The specific path is blocked from capture.
rate_limited Too many requests. Retry after the limit window resets.
no_budget The bandwidth or credit budget is exhausted for this key.
capture_failed The page did not finish rendering before the capture timeout.

Failed captures return error_code + error_message — surface both to the caller.

faq

What is the Screenshots API?

It captures a rendered web page as an image, so your app can preserve or display what a page looked like in the browser at capture time.

When should I use screenshots instead of scraping or schema extraction?

Use screenshots when the visual state matters: layout, design, banners, product presentation, or proof. Use /scrape for readable content and /schema when you need structured data.

Can it capture pages that load content dynamically?

Yes. You can wait for page load, wait for a specific selector, add a short delay, or scroll before capture to help pages finish rendering important content.

Can it reduce ads, trackers, and cookie banners?

You can request ad and cookie-banner blocking with block_ads and block_cookie_banners. These reduce common clutter, but results vary because every site implements overlays differently.

Can I capture authenticated or protected pages?

No. Screenshots are for public pages only — not paywalls, CAPTCHAs, login walls, or other access controls.

What happens if a screenshot takes longer than expected?

The API can return a completed screenshot when it is ready quickly, or return a processing status with a poll URL so your app can check back without blocking.

How are screenshots charged?

Screenshots are billed based on the bytes transferred while fetching the page, not the final image file size. Screenshot usage applies a 1.5× multiplier to account for browser rendering and capture work.

playgroundBuild a screenshot request.

Paste a public URL, tune the capture, then copy the API request into your app.

POST /v1/screenshots
device
full_page
format
wait_until
Sign up to run this capture

Paste a public URL, tune the capture, then copy the API request into your app.

REQUEST
{
  "url": "https://example.com/pricing",
  "device": "desktop",
  "full_page": false,
  "format": "jpeg",
  "wait_until": "networkidle"
}

pricingSame API on every plan. Pay for what you use.

Screenshots are billed by bandwidth with a render multiplier. Every plan supports the same API — start on PAYG with a one-time free balance, then pay for usage.

PAYG free balance 50 MB + 100 credits
PAYG bandwidth $8 / GB
Monthly plans from $29 / mo
Cache hits · failed 50% · $0

Capture a page you actually care about.

Create a free API key and send one public URL through /v1/screenshots. Get a hosted image URL back for the exact page state.