Parameters

This page indexes every option the screenshot endpoint accepts. Each row gives the POST JSON path, the GET query name if there is one, the default and the limits, and links to the page that explains the option. Use the filter to find an option by name, by GET name or by a word such as pdf or timeout. It is part of the API documentation.

How the options fit together

Options are grouped by the job they do. A POST request nests them ("wait": {"timeout": 45}). A GET request uses one flat name per option (timeout=45), and only for the most common ones. The groups run in roughly this order when the browser renders your page:

request ──▶ preset ──▶ device ──▶ your values        (later wins)
                                      │
  1. load      url · html · markdown · network (headers, cookies, auth)
  2. emulate   viewport · browser (dark mode, locale, timezone, media)
  3. filter    block (ads, trackers, cookie banners, URL patterns)
  4. wait      wait (until, for_selector, delay, timeout)
  5. modify    page (scripts, styles, click, hide, remove)
  6. capture   capture (viewport, full_page, element, clip)
  7. encode    output (format, quality) · pdf
  8. deliver   cache · storage · account webhooks

Two rules follow from this order:

  • Presets are defaults. preset: "og_card" sets a 1200×630 viewport and PNG output. Send "output": {"format": "webp"} with it and you get WebP. A device overrides the preset's viewport. Your own viewport values override both.
  • Changes to the page happen after the wait. A click or an injected style runs once the page is ready, so the capture shows the result. If a cookie banner appears late, block it in block rather than hiding it in page.

Parameter groups

Content input

Send a public url, raw html or markdown. Exactly one is required. HTML input renders templates you build yourself, such as social cards or invoices, without hosting them.

URL options

The target URL and how it loads. Only http and https targets are accepted, and the URL value must be encoded when it sits inside a GET query.

Presets

One name for a tested combination: og_card, twitter_card, full_page, pdf_document, mobile and more. Start here, then override single values.

Viewport

Browser window size, pixel density and mobile emulation. scale: 2 gives retina output at twice the pixel size. A device name sets all of these at once.

Capture

What ends up in the image: the visible viewport, the full scrollable page or one element. Includes scroll simulation for lazy images and a crop rectangle.

Output

PNG, JPEG, WebP or PDF, plus compression quality, resizing and a transparent background. Format is the biggest lever on file size.

PDF

Paper size, orientation, margins, scale, page ranges and HTML headers and footers with page numbers. Applies when the output format is pdf.

Wait

When to take the picture: a load event, a selector, a fixed delay, and the total timeout. The most common fix for blank or half-loaded screenshots.

Page modifications

Change the page before capture: inject JavaScript or CSS, click an element, hide elements and keep their space, or remove them so the layout closes up.

Blocking

Stop ads, trackers, cookie banners and chat widgets before they load, or block your own URL patterns and resource types. Blocked requests also make renders faster.

Browser

Dark mode, reduced motion, print media, user agent, locale, timezone and geolocation. Use these to capture the version of the page a given visitor sees.

Network

Extra HTTP headers, cookies and basic or bearer authentication for pages behind a login. POST only, so credentials never sit in a URL.

Cache

How long the CDN copy is kept, how to reuse an earlier render for zero credits, and how to force a fresh one.

Storage

Copy every result into your own S3-compatible bucket with a path template. The bucket is set up once in the dashboard on paid plans.

Webhooks

Signed notifications when a screenshot or batch completes or fails. The endpoint is an account setting, not a request parameter.

Metadata (planned)

Page title, description, Open Graph tags and fonts returned with the image. Planned and not available yet. The page documents the intended API.

Every parameter

GET names are listed only where the GET endpoint accepts the option. A dash means POST only. Times are milliseconds unless the row says seconds.

GroupPOST pathGET nameTypeDefaultLimits and values
Inputurlurlstringnonehttp or https. One of url, html, markdown is required.
InputhtmlhtmlstringnoneFull HTML document. Use POST for anything long.
Inputmarkdown-stringnoneMarkdown source
PresetpresetpresetstringnoneUnknown names return invalid_preset
Viewportviewport.widthwidthinteger12801 to 7680 px
Viewportviewport.heightheightinteger8001 to 4320 px
Viewportviewport.scalescalenumber11 to 3. Device pixel ratio.
Viewportviewport.device or devicedevicestringnoneA device ID from GET /v1/devices. Unknown IDs return invalid_device.
Viewportviewport.mobile-booleanfalseMobile emulation
Viewportviewport.touch-booleanfalseTouch events
Viewportviewport.landscape-booleanfalseSwaps width and height
Capturecapture.modefull_page=truestringviewportviewport, full_page, element
Capturecapture.selector-stringnoneCSS selector for element mode
Capturecapture.selector_required-booleanfalseFail if the selector is missing
Capturecapture.scroll.simulate-booleanfalseScroll first to trigger lazy loading
Capturecapture.scroll.delay-integer400ms between scroll steps
Capturecapture.scroll.step-integerviewport heightpx per scroll step
Capturecapture.scroll.max_height-integer16000Maximum capture height in px
Capturecapture.clip-objectnonex, y, width, height crop
Capturecapture.beyond_viewport-booleantrueCapture content outside the viewport
Outputoutput.formatformatstringpngpng, jpeg, webp, pdf
Outputoutput.qualityqualityinteger801 to 100. JPEG and WebP only.
Outputoutput.resize.width, .height, .fit-integer, stringfit: containfit: contain, cover, fill, inside, outside
Outputoutput.transparent-booleanfalsePNG and WebP only
Outputoutput.filename-stringnoneName for Content-Disposition
PDFpdf.paperpdf_paperstringlettera0 to a6, letter, legal, tabloid
PDFpdf.width, pdf.heightpdf_width, pdf_heightstringnoneCSS units, for example 210mm. Overrides paper.
PDFpdf.landscapepdf_landscapebooleanfalse
PDFpdf.scalepdf_scalenumber1.00.1 to 2.0
PDFpdf.margin and pdf.margin_top, _right, _bottom, _leftpdf_margin, pdf_margin_top and so onstring0CSS units: cm, mm, in, px, pt
PDFpdf.print_backgroundpdf_print_backgroundbooleantrueBackground colors and images
PDFpdf.fit_one_pagepdf_fit_one_pagebooleanfalseScale content onto one page
PDFpdf.prefer_css_page_sizepdf_prefer_css_page_sizebooleanfalseUse the page's CSS @page size
PDFpdf.page_rangespdf_page_rangesstringallFormat 1-5, 8, 10-12
PDFpdf.header, pdf.footerpdf_header, pdf_footerstringnoneHTML templates with pageNumber, totalPages classes
Waitwait.until-stringloadload, domcontentloaded, networkidle (500 ms of no requests)
Waitwait.delaydelayinteger0Capped at 10,000 ms
Waitwait.for_selector-stringnoneCSS selector to wait for
Waitwait.for_selector_mode-stringvisiblevisible, hidden, attached, detached
Waitwait.timeouttimeoutinteger (seconds)30Maximum 60 seconds
Pagepage.scripts, page.styles-arraynoneInline strings or {"url": ...} objects
Pagepage.clickclickstringnoneSelector clicked before capture
Pagepage.click_required-booleanfalseFail if the click target is missing
Pagepage.hidehidearraynoneGET: comma-separated. Keeps layout space.
Pagepage.removeremovearraynoneGET: comma-separated. Layout closes up.
Pagepage.shadow_dom-booleanfalseSelectors pierce shadow roots
Blockblock.adsblock_adsbooleanfalse
Blockblock.cookie_bannersblock_cookiesbooleanfalseNote the shorter GET name
Blockblock.trackers, block.chat_widgets-booleanfalse
Blockblock.requests-arraynoneGlob URL patterns
Blockblock.resources-arraynoneimage, font, media, script, stylesheet
Browserbrowser.dark_modedark_modebooleanpage defaulttrue forces dark, false forces light
Browserbrowser.reduced_motion-booleanfalse
Browserbrowser.media-stringscreenscreen or print
Browserbrowser.user_agentuser_agentstringbrowser default
Browserbrowser.localelocalestringen-USBCP 47, for example fr-FR
Browserbrowser.timezonetimezonestringnoneIANA name, for example Europe/Paris
Browserbrowser.geolocation-objectnonelatitude -90 to 90, longitude -180 to 180, accuracy in m
Networknetwork.headers-objectnoneExtra request headers
Networknetwork.cookies-arraynonename, value, domain required. same_site: Strict, Lax, None.
Networknetwork.auth-objectnonetype: basic (username, password) or bearer (token)
Networknetwork.bypass_csp-booleanfalseFor injected scripts the page's CSP would block
Cachecache.ttlcache_ttlinteger (seconds)864003600 to 2592000 (1 hour to 30 days)
Cachecache.availablecache_availablebooleanfalseReuse an identical render inside the TTL for 0 credits
Cachecache.refreshcache_refreshbooleanfalseSkip the lookup and render fresh
Storagestorage.enabled-booleantrue when a bucket is set upPaid plans. false skips the upload for one request.
Storagestorage.path-stringaccount defaultTemplate with {hash}, {ext}, {date}, {domain} and more
Storagestorage.acl-stringaccount defaultprivate or public-read

Authentication parameters are not in this table: api_key on GET, and key_id, expires and signature for signed URLs. Network proxy and country routing are planned and documented on the network page.

GET or POST?

Both endpoints accept the same groups. The difference is how much you can say.

Use When
GET /v1/screenshot The request must be a URL: an <img src>, an og:image tag, a signed link, a spreadsheet cell. You need only options that have a GET name.
POST /v1/screenshot Anything else, and always for cookies, headers, auth, injected scripts, long HTML or selectors that contain commas.

On GET, booleans count only as the literal word true (or false): block_ads=1 is ignored. hide and remove split on commas, so a selector that itself contains a comma needs POST.

Where to go next

Last verified 2026-10-15 against the API specification and the request parser.

Related in this topic

Was this page helpful?