docs / web-capture

Web Capture API

Web Capture API

base /web-capture/v17 endpoints
post/web-capture/v1/screenshot2 credits

Screenshot a URL (viewport or full-page) as png/jpeg/webp with SPA-grade wait controls.

ParameterAllowed / rangeDescription
urlrequiredPage URL to capture (http/https; bare domains get https:// prefixed). Private/internal/metadata targets are SSRF-blocked on every hop.
full_page = falseoptionalCapture the entire scrollable page (auto-scrolls first so lazy-loaded content renders). Height is capped by max_height_px.
format = pngoptionalpng · jpeg · webp · jpg · jfifOutput image format (jpg/jfif are accepted aliases for jpeg).
quality = 80optional1–100JPEG/WebP quality 1-100 (ignored for png).
max_height_px = 16384optional1000–16384Full-page height cap in pixels (1000-16384). Infinite-scroll pages are clipped here; meta.stop_reason reports 'cap_reached'.
transparent = falseoptionalOmit the default white background (png only) → transparent where the page defines no background.
clip_x = 0optional0–16384Clip region X (page coordinates).
clip_y = 0optional0–16384Clip region Y (page coordinates).
clip_widthoptional1–16384Clip region width — set together with clip_height to capture a fixed rectangle (overrides full_page).
clip_heightoptional1–16384Clip region height (with clip_width).
thumbnail_widthoptional50–2000Downscale the final image to this width (aspect preserved) — thumbnails without a second render.
viewport_width = 1280optional200–3840Viewport width in CSS pixels (200-3840).
viewport_height = 800optional200–2160Viewport height in CSS pixels (200-2160).
device_scale_factor = 1optional1–3Device pixel ratio 1-3 (2 = retina-quality raster).
deviceoptionaliphone_15 · iphone_se · pixel_8 · galaxy_s23 · ipad · desktop · desktop_hdDevice emulation preset — sets viewport, scale, touch and a matching mobile User-Agent in one go. Explicit viewport/device_scale_factor/user_agent still override it.
latitudeoptional-90–90Geolocation latitude to emulate (with longitude; grants geolocation permission to the page).
longitudeoptional-180–180Geolocation longitude to emulate (with latitude).
disable_js = falseoptionalDisable JavaScript entirely, capturing only the server-delivered HTML (useful to test the no-JS fallback experience or to speed up captures).
bypass_csp = falseoptionalBypass the page's Content-Security-Policy so injected css/js always apply (some strict-CSP sites block injection otherwise).
wait_until = loadoptionalload · domcontentloaded · networkidle · commitNavigation wait condition before capture.
wait_selectoroptionalAdditionally wait until this CSS selector is visible (15s budget) — the reliable signal for heavy SPAs.
delay_ms = 0optional0–5000Extra settle delay after load, 0-5000ms.
dark_mode = falseoptionalEmulate prefers-color-scheme: dark.
block_ads = falseoptionalBest-effort blocking of common ad/analytics/tracker hosts (curated list, not a full adblocker).
block_images = falseoptionalSkip downloading images (faster, lighter captures).
block_fonts = falseoptionalSkip downloading web fonts.
block_media = falseoptionalSkip downloading audio/video media.
block_trackers = falseoptionalBlock analytics/tracker hosts (same curated list as block_ads).
block_urlsoptionalComma-separated URL glob patterns to block (wildcards: * and ?).
hide_cookie_banners = falseoptionalHide common cookie-consent banners via injected CSS (OneTrust, Cookiebot, Didomi, Usercentrics, …). Default off = capture the page as a first-time visitor really sees it.
hide_selectorsoptionalComma-separated CSS selectors to hide before capture.
click_selectoroptionalClick this selector after load (e.g. dismiss a dialog), best-effort.
hover_selectoroptionalHover this selector after load (reveal hover menus), best-effort.
scroll_to_selectoroptionalScroll this selector into view before capture, best-effort.
wait_for_selector_hiddenoptionalWait until this selector disappears (e.g. a loading spinner) before capture (15s budget).
click_accept_cookies = falseoptionalClick a common cookie-consent 'Accept' button instead of hiding the banner (so the page reflows as a consenting visitor sees it).
disable_animations = trueoptionalFreeze CSS animations/transitions + emulate reduced-motion for deterministic captures (default true).
user_agentoptionalOverride the browser User-Agent.
headersoptionalExtra request headers (JSON object, POST body). Cookie/Authorization are stripped (no-login content policy).
localeoptionalBrowser locale (Accept-Language + Intl), e.g. en-US, de-DE, ja-JP.
timezoneoptionalIANA timezone for the page (e.g. America/New_York).
cssoptionalExtra CSS injected into the document <head>.
jsoptionalJavaScript to run in the page after load, before capture (best-effort; script errors are reported, not fatal).
fail_if_containsoptionalTreat the capture as failed if the rendered page text contains this string — useful for catching soft-block or error pages that still return HTTP 200 (e.g. 'Access Denied', 'Rate limit exceeded').
fail_if_selectoroptionalTreat the capture as failed if this CSS selector is found on the page — catches error banners or challenge pages that still return HTTP 200 (e.g. '.error-page, #captcha').
min_size_bytesoptional0–52428800Fail if the rendered output is smaller than this (sanity check against blank/near-empty captures).
fail_on_error_status = falseoptionalIf true, a 4xx/5xx page fails with UPSTREAM_HTTP instead of capturing the error page. Default false: capture honestly + report http_status.
fresh = falseoptionalBypass the capture cache and force a new render.
cache_ttl = 900optional600–3600Capture-cache TTL in seconds (600-3600).
Try in playground →
post/web-capture/v1/pdf3 credits

Print a URL to PDF (Chromium print-to-PDF): paper size, margins, landscape, backgrounds.

ParameterAllowed / rangeDescription
urlrequiredPage URL to capture (http/https; bare domains get https:// prefixed). Private/internal/metadata targets are SSRF-blocked on every hop.
paper_format = A4optionalA4 · Letter · Legal · Tabloid · Ledger · A0 · A1 · A2 · A3 · A5 · A6PDF paper size (Chromium print-to-PDF formats).
landscape = falseoptionalLandscape orientation.
margin = 10mmoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm). Sets all four sides; override per side below.
margin_topoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
margin_bottomoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
margin_leftoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
margin_rightoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
print_background = trueoptionalRender background colors/images in the PDF (default true).
media = printoptionalprint · screenCSS media type used for the PDF render.
scale = 1optional0.1–2Print scale 0.1-2.0.
page_rangesoptionalPages to include, e.g. '1-3,5'. Empty = all.
prefer_css_page_size = falseoptionalHonor CSS @page size over paper_format when the page declares one.
display_header_footer = falseoptionalPrint header/footer bands on every PDF page.
header_templateoptionalPDF header HTML template; classes date/title/url/pageNumber/totalPages are auto-filled by Chromium. Styles are NOT inherited — inline font-size etc.
footer_templateoptionalPDF footer HTML template; classes date/title/url/pageNumber/totalPages are auto-filled by Chromium. Styles are NOT inherited — inline font-size etc.
viewport_width = 1280optional200–3840Viewport width in CSS pixels (200-3840).
viewport_height = 800optional200–2160Viewport height in CSS pixels (200-2160).
device_scale_factor = 1optional1–3Device pixel ratio 1-3 (2 = retina-quality raster).
deviceoptionaliphone_15 · iphone_se · pixel_8 · galaxy_s23 · ipad · desktop · desktop_hdDevice emulation preset — sets viewport, scale, touch and a matching mobile User-Agent in one go. Explicit viewport/device_scale_factor/user_agent still override it.
latitudeoptional-90–90Geolocation latitude to emulate (with longitude; grants geolocation permission to the page).
longitudeoptional-180–180Geolocation longitude to emulate (with latitude).
disable_js = falseoptionalDisable JavaScript entirely, capturing only the server-delivered HTML (useful to test the no-JS fallback experience or to speed up captures).
bypass_csp = falseoptionalBypass the page's Content-Security-Policy so injected css/js always apply (some strict-CSP sites block injection otherwise).
wait_until = loadoptionalload · domcontentloaded · networkidle · commitNavigation wait condition before capture.
wait_selectoroptionalAdditionally wait until this CSS selector is visible (15s budget) — the reliable signal for heavy SPAs.
delay_ms = 0optional0–5000Extra settle delay after load, 0-5000ms.
dark_mode = falseoptionalEmulate prefers-color-scheme: dark.
block_ads = falseoptionalBest-effort blocking of common ad/analytics/tracker hosts (curated list, not a full adblocker).
block_images = falseoptionalSkip downloading images (faster, lighter captures).
block_fonts = falseoptionalSkip downloading web fonts.
block_media = falseoptionalSkip downloading audio/video media.
block_trackers = falseoptionalBlock analytics/tracker hosts (same curated list as block_ads).
block_urlsoptionalComma-separated URL glob patterns to block (wildcards: * and ?).
hide_cookie_banners = falseoptionalHide common cookie-consent banners via injected CSS (OneTrust, Cookiebot, Didomi, Usercentrics, …). Default off = capture the page as a first-time visitor really sees it.
hide_selectorsoptionalComma-separated CSS selectors to hide before capture.
click_selectoroptionalClick this selector after load (e.g. dismiss a dialog), best-effort.
hover_selectoroptionalHover this selector after load (reveal hover menus), best-effort.
scroll_to_selectoroptionalScroll this selector into view before capture, best-effort.
wait_for_selector_hiddenoptionalWait until this selector disappears (e.g. a loading spinner) before capture (15s budget).
click_accept_cookies = falseoptionalClick a common cookie-consent 'Accept' button instead of hiding the banner (so the page reflows as a consenting visitor sees it).
disable_animations = trueoptionalFreeze CSS animations/transitions + emulate reduced-motion for deterministic captures (default true).
user_agentoptionalOverride the browser User-Agent.
headersoptionalExtra request headers (JSON object, POST body). Cookie/Authorization are stripped (no-login content policy).
localeoptionalBrowser locale (Accept-Language + Intl), e.g. en-US, de-DE, ja-JP.
timezoneoptionalIANA timezone for the page (e.g. America/New_York).
cssoptionalExtra CSS injected into the document <head>.
jsoptionalJavaScript to run in the page after load, before capture (best-effort; script errors are reported, not fatal).
fail_if_containsoptionalTreat the capture as failed if the rendered page text contains this string — useful for catching soft-block or error pages that still return HTTP 200 (e.g. 'Access Denied', 'Rate limit exceeded').
fail_if_selectoroptionalTreat the capture as failed if this CSS selector is found on the page — catches error banners or challenge pages that still return HTTP 200 (e.g. '.error-page, #captcha').
min_size_bytesoptional0–52428800Fail if the rendered output is smaller than this (sanity check against blank/near-empty captures).
fail_on_error_status = falseoptionalIf true, a 4xx/5xx page fails with UPSTREAM_HTTP instead of capturing the error page. Default false: capture honestly + report http_status.
fresh = falseoptionalBypass the capture cache and force a new render.
cache_ttl = 900optional600–3600Capture-cache TTL in seconds (600-3600).
Try in playground →
post/web-capture/v1/html_to_pdf3 credits

Render raw HTML (+optional CSS) to PDF — invoices, reports, receipts. Same Chromium engine as the big converters; remote assets SSRF-guarded or fully blocked.

ParameterAllowed / rangeDescription
htmlrequiredRaw HTML to render (≤2MB). Remote subresources are SSRF-guarded; set allow_remote_resources=false for fully offline rendering.
cssoptionalExtra CSS injected into the document <head>.
base_urloptionalBase URL for relative asset paths in the supplied HTML (injected as <base href>); SSRF-validated.
allow_remote_resources = trueoptionalAllow the supplied HTML to load remote images/fonts/css (SSRF-guarded). false = network fully blocked (pure offline render).
paper_format = A4optionalA4 · Letter · Legal · Tabloid · Ledger · A0 · A1 · A2 · A3 · A5 · A6PDF paper size (Chromium print-to-PDF formats).
landscape = falseoptionalLandscape orientation.
margin = 10mmoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm). Sets all four sides; override per side below.
margin_topoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
margin_bottomoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
margin_leftoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
margin_rightoptionalPDF margin — '10mm' / '0.5in' / '12px' or bare number (mm).
print_background = trueoptionalRender background colors/images in the PDF (default true).
media = printoptionalprint · screenCSS media type used for the PDF render.
scale = 1optional0.1–2Print scale 0.1-2.0.
page_rangesoptionalPages to include, e.g. '1-3,5'. Empty = all.
prefer_css_page_size = falseoptionalHonor CSS @page size over paper_format when the page declares one.
display_header_footer = falseoptionalPrint header/footer bands on every PDF page.
header_templateoptionalPDF header HTML template; classes date/title/url/pageNumber/totalPages are auto-filled by Chromium. Styles are NOT inherited — inline font-size etc.
footer_templateoptionalPDF footer HTML template; classes date/title/url/pageNumber/totalPages are auto-filled by Chromium. Styles are NOT inherited — inline font-size etc.
viewport_width = 1280optional200–3840Viewport width in CSS pixels (200-3840).
delay_ms = 0optional0–5000Extra settle delay after load, 0-5000ms.
Try in playground →
post/web-capture/v1/html2 credits

Rendered post-JS DOM of a URL — the full document HTML after the SPA executes (extraction-free: returns the DOM, you parse).

ParameterAllowed / rangeDescription
urlrequiredPage URL to capture (http/https; bare domains get https:// prefixed). Private/internal/metadata targets are SSRF-blocked on every hop.
viewport_width = 1280optional200–3840Viewport width in CSS pixels (200-3840).
viewport_height = 800optional200–2160Viewport height in CSS pixels (200-2160).
device_scale_factor = 1optional1–3Device pixel ratio 1-3 (2 = retina-quality raster).
deviceoptionaliphone_15 · iphone_se · pixel_8 · galaxy_s23 · ipad · desktop · desktop_hdDevice emulation preset — sets viewport, scale, touch and a matching mobile User-Agent in one go. Explicit viewport/device_scale_factor/user_agent still override it.
latitudeoptional-90–90Geolocation latitude to emulate (with longitude; grants geolocation permission to the page).
longitudeoptional-180–180Geolocation longitude to emulate (with latitude).
disable_js = falseoptionalDisable JavaScript entirely, capturing only the server-delivered HTML (useful to test the no-JS fallback experience or to speed up captures).
bypass_csp = falseoptionalBypass the page's Content-Security-Policy so injected css/js always apply (some strict-CSP sites block injection otherwise).
wait_until = loadoptionalload · domcontentloaded · networkidle · commitNavigation wait condition before capture.
wait_selectoroptionalAdditionally wait until this CSS selector is visible (15s budget) — the reliable signal for heavy SPAs.
delay_ms = 0optional0–5000Extra settle delay after load, 0-5000ms.
dark_mode = falseoptionalEmulate prefers-color-scheme: dark.
block_ads = falseoptionalBest-effort blocking of common ad/analytics/tracker hosts (curated list, not a full adblocker).
block_images = falseoptionalSkip downloading images (faster, lighter captures).
block_fonts = falseoptionalSkip downloading web fonts.
block_media = falseoptionalSkip downloading audio/video media.
block_trackers = falseoptionalBlock analytics/tracker hosts (same curated list as block_ads).
block_urlsoptionalComma-separated URL glob patterns to block (wildcards: * and ?).
hide_cookie_banners = falseoptionalHide common cookie-consent banners via injected CSS (OneTrust, Cookiebot, Didomi, Usercentrics, …). Default off = capture the page as a first-time visitor really sees it.
hide_selectorsoptionalComma-separated CSS selectors to hide before capture.
click_selectoroptionalClick this selector after load (e.g. dismiss a dialog), best-effort.
hover_selectoroptionalHover this selector after load (reveal hover menus), best-effort.
scroll_to_selectoroptionalScroll this selector into view before capture, best-effort.
wait_for_selector_hiddenoptionalWait until this selector disappears (e.g. a loading spinner) before capture (15s budget).
click_accept_cookies = falseoptionalClick a common cookie-consent 'Accept' button instead of hiding the banner (so the page reflows as a consenting visitor sees it).
disable_animations = trueoptionalFreeze CSS animations/transitions + emulate reduced-motion for deterministic captures (default true).
user_agentoptionalOverride the browser User-Agent.
headersoptionalExtra request headers (JSON object, POST body). Cookie/Authorization are stripped (no-login content policy).
localeoptionalBrowser locale (Accept-Language + Intl), e.g. en-US, de-DE, ja-JP.
timezoneoptionalIANA timezone for the page (e.g. America/New_York).
cssoptionalExtra CSS injected into the document <head>.
jsoptionalJavaScript to run in the page after load, before capture (best-effort; script errors are reported, not fatal).
fail_if_containsoptionalTreat the capture as failed if the rendered page text contains this string — useful for catching soft-block or error pages that still return HTTP 200 (e.g. 'Access Denied', 'Rate limit exceeded').
fail_if_selectoroptionalTreat the capture as failed if this CSS selector is found on the page — catches error banners or challenge pages that still return HTTP 200 (e.g. '.error-page, #captcha').
min_size_bytesoptional0–52428800Fail if the rendered output is smaller than this (sanity check against blank/near-empty captures).
fail_on_error_status = falseoptionalIf true, a 4xx/5xx page fails with UPSTREAM_HTTP instead of capturing the error page. Default false: capture honestly + report http_status.
fresh = falseoptionalBypass the capture cache and force a new render.
cache_ttl = 900optional600–3600Capture-cache TTL in seconds (600-3600).
Try in playground →
post/web-capture/v1/element2 credits

Screenshot a single element by CSS selector (cropped to its bounding box).

ParameterAllowed / rangeDescription
urlrequiredPage URL to capture (http/https; bare domains get https:// prefixed). Private/internal/metadata targets are SSRF-blocked on every hop.
selectorrequiredCSS selector of the element to capture (first visible match).
format = pngoptionalpng · jpeg · webp · jpg · jfifOutput image format (jpg/jfif are accepted aliases for jpeg).
quality = 80optional1–100JPEG/WebP quality 1-100 (ignored for png).
viewport_width = 1280optional200–3840Viewport width in CSS pixels (200-3840).
viewport_height = 800optional200–2160Viewport height in CSS pixels (200-2160).
device_scale_factor = 1optional1–3Device pixel ratio 1-3 (2 = retina-quality raster).
deviceoptionaliphone_15 · iphone_se · pixel_8 · galaxy_s23 · ipad · desktop · desktop_hdDevice emulation preset — sets viewport, scale, touch and a matching mobile User-Agent in one go. Explicit viewport/device_scale_factor/user_agent still override it.
latitudeoptional-90–90Geolocation latitude to emulate (with longitude; grants geolocation permission to the page).
longitudeoptional-180–180Geolocation longitude to emulate (with latitude).
disable_js = falseoptionalDisable JavaScript entirely, capturing only the server-delivered HTML (useful to test the no-JS fallback experience or to speed up captures).
bypass_csp = falseoptionalBypass the page's Content-Security-Policy so injected css/js always apply (some strict-CSP sites block injection otherwise).
wait_until = loadoptionalload · domcontentloaded · networkidle · commitNavigation wait condition before capture.
wait_selectoroptionalAdditionally wait until this CSS selector is visible (15s budget) — the reliable signal for heavy SPAs.
delay_ms = 0optional0–5000Extra settle delay after load, 0-5000ms.
dark_mode = falseoptionalEmulate prefers-color-scheme: dark.
block_ads = falseoptionalBest-effort blocking of common ad/analytics/tracker hosts (curated list, not a full adblocker).
block_images = falseoptionalSkip downloading images (faster, lighter captures).
block_fonts = falseoptionalSkip downloading web fonts.
block_media = falseoptionalSkip downloading audio/video media.
block_trackers = falseoptionalBlock analytics/tracker hosts (same curated list as block_ads).
block_urlsoptionalComma-separated URL glob patterns to block (wildcards: * and ?).
hide_cookie_banners = falseoptionalHide common cookie-consent banners via injected CSS (OneTrust, Cookiebot, Didomi, Usercentrics, …). Default off = capture the page as a first-time visitor really sees it.
hide_selectorsoptionalComma-separated CSS selectors to hide before capture.
click_selectoroptionalClick this selector after load (e.g. dismiss a dialog), best-effort.
hover_selectoroptionalHover this selector after load (reveal hover menus), best-effort.
scroll_to_selectoroptionalScroll this selector into view before capture, best-effort.
wait_for_selector_hiddenoptionalWait until this selector disappears (e.g. a loading spinner) before capture (15s budget).
click_accept_cookies = falseoptionalClick a common cookie-consent 'Accept' button instead of hiding the banner (so the page reflows as a consenting visitor sees it).
disable_animations = trueoptionalFreeze CSS animations/transitions + emulate reduced-motion for deterministic captures (default true).
user_agentoptionalOverride the browser User-Agent.
headersoptionalExtra request headers (JSON object, POST body). Cookie/Authorization are stripped (no-login content policy).
localeoptionalBrowser locale (Accept-Language + Intl), e.g. en-US, de-DE, ja-JP.
timezoneoptionalIANA timezone for the page (e.g. America/New_York).
cssoptionalExtra CSS injected into the document <head>.
jsoptionalJavaScript to run in the page after load, before capture (best-effort; script errors are reported, not fatal).
fail_if_containsoptionalTreat the capture as failed if the rendered page text contains this string — useful for catching soft-block or error pages that still return HTTP 200 (e.g. 'Access Denied', 'Rate limit exceeded').
fail_if_selectoroptionalTreat the capture as failed if this CSS selector is found on the page — catches error banners or challenge pages that still return HTTP 200 (e.g. '.error-page, #captcha').
min_size_bytesoptional0–52428800Fail if the rendered output is smaller than this (sanity check against blank/near-empty captures).
fail_on_error_status = falseoptionalIf true, a 4xx/5xx page fails with UPSTREAM_HTTP instead of capturing the error page. Default false: capture honestly + report http_status.
fresh = falseoptionalBypass the capture cache and force a new render.
cache_ttl = 900optional600–3600Capture-cache TTL in seconds (600-3600).
Try in playground →
post/web-capture/v1/batch5 credits

Screenshot up to 5 URLs in one call (queued through the render slots); per-URL ok/error so one bad URL never sinks the batch.

ParameterAllowed / rangeDescription
urlsrequiredUp to 5 URLs (JSON array or comma-separated). Rendered through the queue; per-URL ok/error in results[].
full_page = falseoptionalCapture the entire scrollable page (auto-scrolls first so lazy-loaded content renders). Height is capped by max_height_px.
format = pngoptionalpng · jpeg · webp · jpg · jfifOutput image format (jpg/jfif are accepted aliases for jpeg).
quality = 80optional1–100JPEG/WebP quality 1-100 (ignored for png).
max_height_px = 16384optional1000–16384Full-page height cap in pixels (1000-16384). Infinite-scroll pages are clipped here; meta.stop_reason reports 'cap_reached'.
viewport_width = 1280optional200–3840Viewport width in CSS pixels (200-3840).
viewport_height = 800optional200–2160Viewport height in CSS pixels (200-2160).
device_scale_factor = 1optional1–3Device pixel ratio 1-3 (2 = retina-quality raster).
deviceoptionaliphone_15 · iphone_se · pixel_8 · galaxy_s23 · ipad · desktop · desktop_hdDevice emulation preset — sets viewport, scale, touch and a matching mobile User-Agent in one go. Explicit viewport/device_scale_factor/user_agent still override it.
latitudeoptional-90–90Geolocation latitude to emulate (with longitude; grants geolocation permission to the page).
longitudeoptional-180–180Geolocation longitude to emulate (with latitude).
disable_js = falseoptionalDisable JavaScript entirely, capturing only the server-delivered HTML (useful to test the no-JS fallback experience or to speed up captures).
bypass_csp = falseoptionalBypass the page's Content-Security-Policy so injected css/js always apply (some strict-CSP sites block injection otherwise).
wait_until = loadoptionalload · domcontentloaded · networkidle · commitNavigation wait condition before capture.
wait_selectoroptionalAdditionally wait until this CSS selector is visible (15s budget) — the reliable signal for heavy SPAs.
delay_ms = 0optional0–5000Extra settle delay after load, 0-5000ms.
dark_mode = falseoptionalEmulate prefers-color-scheme: dark.
block_ads = falseoptionalBest-effort blocking of common ad/analytics/tracker hosts (curated list, not a full adblocker).
block_images = falseoptionalSkip downloading images (faster, lighter captures).
block_fonts = falseoptionalSkip downloading web fonts.
block_media = falseoptionalSkip downloading audio/video media.
block_trackers = falseoptionalBlock analytics/tracker hosts (same curated list as block_ads).
block_urlsoptionalComma-separated URL glob patterns to block (wildcards: * and ?).
hide_cookie_banners = falseoptionalHide common cookie-consent banners via injected CSS (OneTrust, Cookiebot, Didomi, Usercentrics, …). Default off = capture the page as a first-time visitor really sees it.
hide_selectorsoptionalComma-separated CSS selectors to hide before capture.
click_selectoroptionalClick this selector after load (e.g. dismiss a dialog), best-effort.
hover_selectoroptionalHover this selector after load (reveal hover menus), best-effort.
scroll_to_selectoroptionalScroll this selector into view before capture, best-effort.
wait_for_selector_hiddenoptionalWait until this selector disappears (e.g. a loading spinner) before capture (15s budget).
click_accept_cookies = falseoptionalClick a common cookie-consent 'Accept' button instead of hiding the banner (so the page reflows as a consenting visitor sees it).
disable_animations = trueoptionalFreeze CSS animations/transitions + emulate reduced-motion for deterministic captures (default true).
user_agentoptionalOverride the browser User-Agent.
headersoptionalExtra request headers (JSON object, POST body). Cookie/Authorization are stripped (no-login content policy).
localeoptionalBrowser locale (Accept-Language + Intl), e.g. en-US, de-DE, ja-JP.
timezoneoptionalIANA timezone for the page (e.g. America/New_York).
cssoptionalExtra CSS injected into the document <head>.
jsoptionalJavaScript to run in the page after load, before capture (best-effort; script errors are reported, not fatal).
fail_if_containsoptionalTreat the capture as failed if the rendered page text contains this string — useful for catching soft-block or error pages that still return HTTP 200 (e.g. 'Access Denied', 'Rate limit exceeded').
fail_if_selectoroptionalTreat the capture as failed if this CSS selector is found on the page — catches error banners or challenge pages that still return HTTP 200 (e.g. '.error-page, #captcha').
min_size_bytesoptional0–52428800Fail if the rendered output is smaller than this (sanity check against blank/near-empty captures).
fail_on_error_status = falseoptionalIf true, a 4xx/5xx page fails with UPSTREAM_HTTP instead of capturing the error page. Default false: capture honestly + report http_status.
fresh = falseoptionalBypass the capture cache and force a new render.
cache_ttl = 900optional600–3600Capture-cache TTL in seconds (600-3600).
Try in playground →
post/web-capture/v1/downloadfree

Fetch a 10-50MB capture artifact by its one-time token (30 min TTL; consumed on read).

ParameterAllowed / rangeDescription
tokenrequiredOne-time download token from a previous capture (10-50MB outputs). Expires 30 min after the capture; consumed on first read.
Try in playground →