{"openapi":"3.1.0","info":{"title":"PageCapture API","version":"1.0.0","summary":"Screenshot API for images, PDFs, HTML, Markdown and videos.","description":"Render any public webpage and receive the result as bytes, a signed URL, an upload into\nyour own bucket, or a signed webhook.\n\n**Billing.** One credit per successful, non-cached capture. Failures never consume a credit,\nwhatever the cause. Cache hits never consume a credit.\n\n**Engine.** `engine-crunknown-pwunknown-f2026-07-1-b2026-07-1`. The engine version is part of every cache key, so an upgrade\nnever serves a capture rendered by a different browser.","license":{"name":"Proprietary","identifier":"LicenseRef-Proprietary"}},"servers":[{"url":"https://www.pagecapture.dev","description":"Production"}],"security":[{"AccessKeyHeader":[]},{"AccessKeyQuery":[]}],"tags":[{"name":"Capture","description":"Static and animated captures."},{"name":"Batch","description":"Many captures in one call."},{"name":"Account","description":"Usage and request status."}],"paths":{"/v1/take":{"get":{"tags":["Capture"],"operationId":"takeGet","summary":"Capture a page (GET)","description":"Best for simple URLs and for signed URLs embedded in HTML. Inline HTML, Markdown and any credential must use POST.","parameters":[{"name":"url","in":"query","required":false,"schema":{"description":"Public HTTP or HTTPS URL to capture.","type":"string"}},{"name":"html","in":"query","required":false,"schema":{"description":"Inline HTML to render instead of a URL. POST only.","type":"string"}},{"name":"markdown","in":"query","required":false,"schema":{"description":"Inline Markdown rendered through a deterministic template. POST only.","type":"string"}},{"name":"format","in":"query","required":false,"schema":{"description":"Output format. Defaults to `jpg` on /take and `mp4` on /animate.","default":"jpg","type":"string","enum":["png","jpeg","jpg","webp","gif","jp2","tiff","avif","heif","pdf","html","markdown","text","mp4","mov","avi","webm"]}},{"name":"response_type","in":"query","required":false,"schema":{"description":"How the result is returned: raw bytes, a JSON envelope, or an empty acknowledgement.","default":"by_format","type":"string","enum":["by_format","json","empty"]}},{"name":"selector","in":"query","required":false,"schema":{"description":"Capture only the element matching this CSS selector.","type":"string"}},{"name":"selector_algorithm","in":"query","required":false,"schema":{"description":"How the element is captured: `default` uses the browser element API, `clip` converts the bounding box into a clip rectangle. The selector is always CSS.","default":"default","type":"string","enum":["default","clip"]}},{"name":"selector_scroll_into_view","in":"query","required":false,"schema":{"description":"Scroll the selected element into view before capturing.","default":true,"type":"boolean"}},{"name":"capture_beyond_viewport","in":"query","required":false,"schema":{"description":"Allow the capture to extend past the viewport bounds.","default":true,"type":"boolean"}},{"name":"scroll_into_view","in":"query","required":false,"schema":{"description":"Scroll this selector into view before capturing the viewport.","type":"string"}},{"name":"scroll_into_view_adjust_top","in":"query","required":false,"schema":{"description":"Pixel offset applied after `scroll_into_view`, to clear sticky headers.","default":0,"type":"integer","minimum":-10000,"maximum":10000}},{"name":"request_gpu_rendering","in":"query","required":false,"schema":{"description":"Route the job to the GPU-backed pool.","default":false,"type":"boolean"}},{"name":"include_shadow_dom","in":"query","required":false,"schema":{"description":"Traverse open shadow roots when resolving selectors and serializing HTML.","default":false,"type":"boolean"}},{"name":"attachment_name","in":"query","required":false,"schema":{"description":"Sets Content-Disposition so browsers download the result under this name.","type":"string"}},{"name":"external_identifier","in":"query","required":false,"schema":{"description":"Your own correlation id, echoed in logs, JSON responses and webhooks.","type":"string"}},{"name":"pdf_print_background","in":"query","required":false,"schema":{"description":"Print CSS backgrounds.","default":false,"type":"boolean"}},{"name":"pdf_fit_one_page","in":"query","required":false,"schema":{"description":"Fit the whole document onto a single custom-sized page.","default":false,"type":"boolean"}},{"name":"pdf_landscape","in":"query","required":false,"schema":{"description":"Landscape orientation.","default":false,"type":"boolean"}},{"name":"pdf_paper_format","in":"query","required":false,"schema":{"description":"Paper size. Ignored when `pdf_fit_one_page` is set.","type":"string","enum":["a0","a1","a2","a3","a4","a5","a6","letter","legal","tabloid","ledger"]}},{"name":"pdf_margin","in":"query","required":false,"schema":{"description":"Margin on all sides, in inches.","type":"number","minimum":0,"maximum":10}},{"name":"pdf_margin_top","in":"query","required":false,"schema":{"description":"Top margin in inches. Overrides `pdf_margin`.","type":"number","minimum":0,"maximum":10}},{"name":"pdf_margin_right","in":"query","required":false,"schema":{"description":"Right margin in inches.","type":"number","minimum":0,"maximum":10}},{"name":"pdf_margin_bottom","in":"query","required":false,"schema":{"description":"Bottom margin in inches.","type":"number","minimum":0,"maximum":10}},{"name":"pdf_margin_left","in":"query","required":false,"schema":{"description":"Left margin in inches.","type":"number","minimum":0,"maximum":10}},{"name":"openai_api_key","in":"query","required":false,"schema":{"description":"Your own OpenAI key. Used once, never stored, redacted from every log.","type":"string","writeOnly":true}},{"name":"vision_prompt","in":"query","required":false,"schema":{"description":"Prompt sent along with the rendered image.","type":"string"}},{"name":"vision_max_tokens","in":"query","required":false,"schema":{"description":"Token ceiling for the vision response.","default":512,"type":"integer","minimum":1,"maximum":4096}},{"name":"clip_x","in":"query","required":false,"schema":{"description":"Clip origin X, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000}},{"name":"clip_y","in":"query","required":false,"schema":{"description":"Clip origin Y, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000}},{"name":"clip_width","in":"query","required":false,"schema":{"description":"Clip width, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000}},{"name":"clip_height","in":"query","required":false,"schema":{"description":"Clip height, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000}},{"name":"full_page","in":"query","required":false,"schema":{"description":"Capture the entire scrollable document.","default":false,"type":"boolean"}},{"name":"full_page_scroll","in":"query","required":false,"schema":{"description":"Scroll through the page first so lazy content loads.","default":false,"type":"boolean"}},{"name":"full_page_scroll_delay","in":"query","required":false,"schema":{"description":"Milliseconds to wait after each scroll step.","default":400,"type":"integer","minimum":0,"maximum":10000}},{"name":"full_page_scroll_by","in":"query","required":false,"schema":{"description":"Pixels per scroll step. 0 uses the viewport height.","default":0,"type":"integer","minimum":0,"maximum":20000}},{"name":"full_page_max_height","in":"query","required":false,"schema":{"description":"Stop the capture at this document height.","type":"integer","minimum":1,"maximum":60000}},{"name":"full_page_slices","in":"query","required":false,"schema":{"description":"Return the page as several stitched slices instead of one image.","default":false,"type":"boolean"}},{"name":"full_page_slice_height","in":"query","required":false,"schema":{"description":"Height of each slice.","default":4000,"type":"integer","minimum":1,"maximum":16000}},{"name":"full_page_slice_overlap_height","in":"query","required":false,"schema":{"description":"Overlap between consecutive slices.","default":0,"type":"integer","minimum":0,"maximum":2000}},{"name":"full_page_algorithm","in":"query","required":false,"schema":{"description":"Full-page strategy: one capture of the whole document, or section-by-section for very tall pages.","default":"default","type":"string","enum":["default","by_sections"]}},{"name":"viewport_device","in":"query","required":false,"schema":{"description":"Device preset id. Sets width, height, scale, touch, mobile and user agent together.","type":"string","enum":["iphone_15_pro","iphone_15_pro_max","iphone_se","pixel_8","galaxy_s23","ipad_air","ipad_pro_11","macbook_air","desktop_1280","desktop_1920","og_image","iphone_16_pro","iphone_16_pro_landscape","iphone_16_pro_max","iphone_16_pro_max_landscape","iphone_16","iphone_16_landscape","iphone_14_pro","iphone_14_pro_landscape","iphone_14_pro_max","iphone_14_pro_max_landscape","iphone_13_pro","iphone_13_pro_landscape","iphone_13_pro_max","iphone_13_pro_max_landscape","iphone_13_mini","iphone_13_mini_landscape","iphone_12","iphone_12_landscape","iphone_11","iphone_11_landscape","iphone_x","iphone_x_landscape","iphone_8","iphone_8_landscape","iphone_8_plus","iphone_8_plus_landscape","pixel_9_pro","pixel_9_pro_landscape","pixel_7","pixel_7_landscape","pixel_5","pixel_5_landscape","pixel_4a","pixel_4a_landscape","galaxy_s24_ultra","galaxy_s24_ultra_landscape","galaxy_s21","galaxy_s21_landscape","galaxy_s20","galaxy_s20_landscape","galaxy_note_20","galaxy_note_20_landscape","galaxy_a54","galaxy_a54_landscape","xiaomi_13","xiaomi_13_landscape","oneplus_11","oneplus_11_landscape","moto_g_power","moto_g_power_landscape","nexus_5x","nexus_5x_landscape","nokia_lumia_520","nokia_lumia_520_landscape","blackberry_z30","blackberry_z30_landscape","ipad_pro_13","ipad_pro_13_landscape","ipad_mini","ipad_mini_landscape","ipad_10th","ipad_10th_landscape","galaxy_tab_s9","galaxy_tab_s9_landscape","surface_pro_9","surface_pro_9_landscape","kindle_fire_hdx","kindle_fire_hdx_landscape","nexus_7","nexus_7_landscape","macbook_pro_14","macbook_pro_16","imac_24","desktop_1366","desktop_1440","desktop_1536","desktop_1600","desktop_2560","desktop_3840","og_image_twitter","og_image_square","linkedin_banner"]}},{"name":"viewport_width","in":"query","required":false,"schema":{"description":"Viewport width in CSS pixels.","default":1280,"type":"integer","minimum":50,"maximum":7680}},{"name":"viewport_height","in":"query","required":false,"schema":{"description":"Viewport height in CSS pixels.","default":1024,"type":"integer","minimum":50,"maximum":7680}},{"name":"device_scale_factor","in":"query","required":false,"schema":{"description":"Pixel density multiplier (2 = retina).","default":1,"type":"number","minimum":1,"maximum":5}},{"name":"viewport_mobile","in":"query","required":false,"schema":{"description":"Emulate a mobile browser.","default":false,"type":"boolean"}},{"name":"viewport_has_touch","in":"query","required":false,"schema":{"description":"Advertise touch support.","default":false,"type":"boolean"}},{"name":"viewport_landscape","in":"query","required":false,"schema":{"description":"Swap width and height of the selected device preset.","default":false,"type":"boolean"}},{"name":"image_quality","in":"query","required":false,"schema":{"description":"Encoder quality for lossy formats.","default":80,"type":"integer","minimum":1,"maximum":100}},{"name":"image_width","in":"query","required":false,"schema":{"description":"Resize output width. Aspect ratio is preserved when height is omitted.","type":"integer","minimum":1,"maximum":20000}},{"name":"image_height","in":"query","required":false,"schema":{"description":"Resize output height.","type":"integer","minimum":1,"maximum":20000}},{"name":"omit_background","in":"query","required":false,"schema":{"description":"Render with a transparent background where the format supports alpha.","default":false,"type":"boolean"}},{"name":"dark_mode","in":"query","required":false,"schema":{"description":"Emulate `prefers-color-scheme: dark`.","default":false,"type":"boolean"}},{"name":"reduced_motion","in":"query","required":false,"schema":{"description":"Emulate `prefers-reduced-motion: reduce`.","default":false,"type":"boolean"}},{"name":"media_type","in":"query","required":false,"schema":{"description":"CSS media type to emulate.","default":"screen","type":"string","enum":["screen","print"]}},{"name":"hide_selectors","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Selectors to hide before capturing.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"scripts","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"JavaScript executed in the page context, in order.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"scripts_wait_until","in":"query","required":false,"schema":{"description":"Navigation state to reach before running scripts.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle"]}},{"name":"styles","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"CSS injected into the page.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"click","in":"query","required":false,"schema":{"description":"Selector clicked before capturing.","type":"string"}},{"name":"hover","in":"query","required":false,"schema":{"description":"Selector hovered before capturing.","type":"string"}},{"name":"error_on_selector_not_found","in":"query","required":false,"schema":{"description":"Fail when the capture, hide or wait selector does not match, instead of skipping it.","default":false,"type":"boolean"}},{"name":"error_on_click_selector_not_found","in":"query","required":false,"schema":{"description":"Fail when the `click` selector does not match.","default":true,"type":"boolean"}},{"name":"error_on_hover_selector_not_found","in":"query","required":false,"schema":{"description":"Fail when the `hover` selector does not match.","default":true,"type":"boolean"}},{"name":"bypass_csp","in":"query","required":false,"schema":{"description":"Bypass the page Content Security Policy. Opt-in and recorded.","default":false,"type":"boolean"}},{"name":"block_cookie_banners","in":"query","required":false,"schema":{"description":"Remove consent banners using known rules.","default":false,"type":"boolean"}},{"name":"block_banners_by_heuristics","in":"query","required":false,"schema":{"description":"Also try a heuristic pass for banners with no known rule.","default":false,"type":"boolean"}},{"name":"block_chats","in":"query","required":false,"schema":{"description":"Remove live chat widgets.","default":false,"type":"boolean"}},{"name":"block_ads","in":"query","required":false,"schema":{"description":"Block ad networks.","default":false,"type":"boolean"}},{"name":"block_trackers","in":"query","required":false,"schema":{"description":"Block analytics and tracking requests.","default":false,"type":"boolean"}},{"name":"block_requests","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Glob patterns or domains to block.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"block_resources","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Resource types to block.","type":"array","items":{"type":"string","enum":["document","stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"maxItems":64}},{"name":"geolocation_latitude","in":"query","required":false,"schema":{"description":"Latitude reported to the Geolocation API.","type":"number","minimum":-90,"maximum":90}},{"name":"geolocation_longitude","in":"query","required":false,"schema":{"description":"Longitude reported to the Geolocation API.","type":"number","minimum":-180,"maximum":180}},{"name":"geolocation_accuracy","in":"query","required":false,"schema":{"description":"Accuracy in metres.","type":"number","minimum":0,"maximum":100000}},{"name":"ip_country_code","in":"query","required":false,"schema":{"description":"Country the managed proxy pool exits from. The catalog is served at /v1/regions.","type":"string","enum":["us","ca","mx","br","pe","gb","ie","is","de","fr","it","es","cn","jp","kr","in","au","nz"]}},{"name":"proxy","in":"query","required":false,"schema":{"description":"Your own proxy, as `http://user:pass@host:port`.","type":"string","writeOnly":true}},{"name":"proxy_bypass_hosts","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Hosts that skip the proxy.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"user_agent","in":"query","required":false,"schema":{"description":"Custom User-Agent header.","type":"string"}},{"name":"authorization","in":"query","required":false,"schema":{"description":"Authorization header sent to the target.","type":"string","writeOnly":true}},{"name":"cookies","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Cookies as `name=value; Domain=…; Path=…` strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"headers","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Extra request headers as `Name: value` strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"time_zone","in":"query","required":false,"schema":{"description":"IANA time zone for the browser context.","default":"UTC","type":"string"}},{"name":"wait_until","in":"query","required":false,"schema":{"description":"Navigation state to wait for. `networkidle0` waits for zero in-flight requests, `networkidle2` for at most two.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"]}},{"name":"delay","in":"query","required":false,"schema":{"description":"Extra seconds to wait after the navigation state.","default":0,"type":"integer","minimum":0,"maximum":30}},{"name":"timeout","in":"query","required":false,"schema":{"description":"Total budget for the capture, in seconds.","default":60,"type":"integer","minimum":1,"maximum":90}},{"name":"navigation_timeout","in":"query","required":false,"schema":{"description":"Budget for navigation alone, in seconds.","default":30,"type":"integer","minimum":1,"maximum":30}},{"name":"wait_for_selector","in":"query","required":false,"schema":{"description":"Wait until this CSS selector appears.","type":"string"}},{"name":"wait_for_selector_algorithm","in":"query","required":false,"schema":{"description":"How many nodes satisfy the wait: the first visible match, or every match currently rendering. The selector is always CSS.","default":"at_least_one","type":"string","enum":["at_least_one","at_least_by_count"]}},{"name":"cache","in":"query","required":false,"schema":{"description":"Serve and store this capture from the cache. Cache hits are never charged.","default":false,"type":"boolean"}},{"name":"cache_ttl","in":"query","required":false,"schema":{"description":"Cache lifetime in seconds. Minimum and default 4 hours, maximum 30 days.","default":14400,"type":"integer","minimum":14400,"maximum":2592000}},{"name":"cache_key","in":"query","required":false,"schema":{"description":"Custom cache key, scoped to your organization.","type":"string"}},{"name":"store","in":"query","required":false,"schema":{"description":"Upload the result to your own bucket.","default":false,"type":"boolean"}},{"name":"storage_config_id","in":"query","required":false,"schema":{"description":"Use a storage configuration saved in the dashboard instead of inline credentials.","type":"string"}},{"name":"storage_path","in":"query","required":false,"schema":{"description":"Object key template. Supports {request_id}, {timestamp}, {external_identifier}, {format}, {organization_id}.","type":"string"}},{"name":"storage_endpoint","in":"query","required":false,"schema":{"description":"S3-compatible endpoint.","type":"string"}},{"name":"storage_access_key_id","in":"query","required":false,"schema":{"description":"Access key id for the destination bucket.","type":"string","writeOnly":true}},{"name":"storage_secret_access_key","in":"query","required":false,"schema":{"description":"Secret access key for the destination bucket.","type":"string","writeOnly":true}},{"name":"storage_bucket","in":"query","required":false,"schema":{"description":"Destination bucket.","type":"string"}},{"name":"storage_class","in":"query","required":false,"schema":{"description":"Storage class applied to the uploaded object.","type":"string"}},{"name":"storage_acl","in":"query","required":false,"schema":{"description":"ACL applied to the uploaded object.","type":"string"}},{"name":"storage_return_location","in":"query","required":false,"schema":{"description":"Include the stored object location in the JSON response.","default":false,"type":"boolean"}},{"name":"metadata_image_size","in":"query","required":false,"schema":{"description":"Include the rendered image dimensions.","default":false,"type":"boolean"}},{"name":"metadata_fonts","in":"query","required":false,"schema":{"description":"Include the fonts the page actually used.","default":false,"type":"boolean"}},{"name":"metadata_icon","in":"query","required":false,"schema":{"description":"Include the favicon URL.","default":false,"type":"boolean"}},{"name":"metadata_open_graph","in":"query","required":false,"schema":{"description":"Include Open Graph tags.","default":false,"type":"boolean"}},{"name":"metadata_page_title","in":"query","required":false,"schema":{"description":"Include the page title.","default":false,"type":"boolean"}},{"name":"metadata_content","in":"query","required":false,"schema":{"description":"Include the rendered page content.","default":false,"type":"boolean"}},{"name":"metadata_content_format","in":"query","required":false,"schema":{"description":"Format of the returned content.","default":"text","type":"string","enum":["text","html","markdown"]}},{"name":"metadata_http_response_status_code","in":"query","required":false,"schema":{"description":"Include the main response status code.","default":false,"type":"boolean"}},{"name":"metadata_http_response_headers","in":"query","required":false,"schema":{"description":"Include allow-listed response headers. Set-Cookie and auth headers are always removed.","default":false,"type":"boolean"}},{"name":"async","in":"query","required":false,"schema":{"description":"Return 202 immediately and process in the background.","default":false,"type":"boolean"}},{"name":"webhook_url","in":"query","required":false,"schema":{"description":"HTTPS endpoint notified when the capture finishes.","type":"string"}},{"name":"webhook_sign","in":"query","required":false,"schema":{"description":"Sign the webhook body with HMAC-SHA256.","default":false,"type":"boolean"}},{"name":"webhook_errors","in":"query","required":false,"schema":{"description":"Also send the webhook when the capture fails.","default":true,"type":"boolean"}},{"name":"ignore_host_errors","in":"query","required":false,"schema":{"description":"Capture the page even when it responds with 4xx or 5xx.","default":false,"type":"boolean"}},{"name":"fail_if_request_failed","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Fail if a request matching any of these patterns fails.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"fail_if_content_missing","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Fail if the rendered page is missing any of these strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"fail_if_content_contains","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Fail if the rendered page contains any of these strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"fail_if_gpu_rendering_fails","in":"query","required":false,"schema":{"description":"Fail instead of falling back to CPU when GPU rendering is unavailable.","default":false,"type":"boolean"}},{"name":"signature","in":"query","schema":{"type":"string"},"description":"HMAC-SHA256 of the query string with the signature parameter removed."}],"responses":{"200":{"description":"The capture, in the requested format.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request starts allowed per minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Starts left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds when the bucket refills."},"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request. Keep it for support."},"X-PageCapture-Cache":{"schema":{"type":"string","enum":["HIT","MISS","BYPASS"]}}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"image/gif":{"schema":{"type":"string","format":"binary"}},"image/jp2":{"schema":{"type":"string","format":"binary"}},"image/tiff":{"schema":{"type":"string","format":"binary"}},"image/avif":{"schema":{"type":"string","format":"binary"}},"image/heif":{"schema":{"type":"string","format":"binary"}},"application/pdf":{"schema":{"type":"string","format":"binary"}},"text/html":{"schema":{"type":"string","format":"binary"}},"text/markdown":{"schema":{"type":"string","format":"binary"}},"text/plain":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"$ref":"#/components/schemas/JsonResult"},"examples":{"json":{"summary":"response_type=json","value":{"is_successful":true,"request_id":"req_01...","format":"png","cache_status":"MISS","result_url":"https://api.pagecapture.dev/api/artifacts/art_01...?expires=…&signature=…","size_bytes":128450}}}}}},"202":{"description":"Accepted for async processing.","content":{"application/json":{"schema":{"type":"object","properties":{"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"status":{"type":"string","enum":["accepted"]}}}}}},"204":{"description":"response_type=empty — the result went to storage or a webhook."},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Capture"],"operationId":"takePost","summary":"Capture a page (POST)","description":"Required for inline HTML or Markdown, cookies, headers, large scripts and storage credentials.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of `url`, `html` or `markdown` is required.","properties":{"access_key":{"type":"string","writeOnly":true,"description":"Alternative to the X-Access-Key header. Sending both with different values is an error."},"url":{"description":"Public HTTP or HTTPS URL to capture.","type":"string"},"html":{"description":"Inline HTML to render instead of a URL. POST only.","type":"string"},"markdown":{"description":"Inline Markdown rendered through a deterministic template. POST only.","type":"string"},"format":{"description":"Output format. Defaults to `jpg` on /take and `mp4` on /animate.","default":"jpg","type":"string","enum":["png","jpeg","jpg","webp","gif","jp2","tiff","avif","heif","pdf","html","markdown","text","mp4","mov","avi","webm"]},"response_type":{"description":"How the result is returned: raw bytes, a JSON envelope, or an empty acknowledgement.","default":"by_format","type":"string","enum":["by_format","json","empty"]},"selector":{"description":"Capture only the element matching this CSS selector.","type":"string"},"selector_algorithm":{"description":"How the element is captured: `default` uses the browser element API, `clip` converts the bounding box into a clip rectangle. The selector is always CSS.","default":"default","type":"string","enum":["default","clip"]},"selector_scroll_into_view":{"description":"Scroll the selected element into view before capturing.","default":true,"type":"boolean"},"capture_beyond_viewport":{"description":"Allow the capture to extend past the viewport bounds.","default":true,"type":"boolean"},"scroll_into_view":{"description":"Scroll this selector into view before capturing the viewport.","type":"string"},"scroll_into_view_adjust_top":{"description":"Pixel offset applied after `scroll_into_view`, to clear sticky headers.","default":0,"type":"integer","minimum":-10000,"maximum":10000},"request_gpu_rendering":{"description":"Route the job to the GPU-backed pool.","default":false,"type":"boolean"},"include_shadow_dom":{"description":"Traverse open shadow roots when resolving selectors and serializing HTML.","default":false,"type":"boolean"},"attachment_name":{"description":"Sets Content-Disposition so browsers download the result under this name.","type":"string"},"external_identifier":{"description":"Your own correlation id, echoed in logs, JSON responses and webhooks.","type":"string"},"pdf_print_background":{"description":"Print CSS backgrounds.","default":false,"type":"boolean"},"pdf_fit_one_page":{"description":"Fit the whole document onto a single custom-sized page.","default":false,"type":"boolean"},"pdf_landscape":{"description":"Landscape orientation.","default":false,"type":"boolean"},"pdf_paper_format":{"description":"Paper size. Ignored when `pdf_fit_one_page` is set.","type":"string","enum":["a0","a1","a2","a3","a4","a5","a6","letter","legal","tabloid","ledger"]},"pdf_margin":{"description":"Margin on all sides, in inches.","type":"number","minimum":0,"maximum":10},"pdf_margin_top":{"description":"Top margin in inches. Overrides `pdf_margin`.","type":"number","minimum":0,"maximum":10},"pdf_margin_right":{"description":"Right margin in inches.","type":"number","minimum":0,"maximum":10},"pdf_margin_bottom":{"description":"Bottom margin in inches.","type":"number","minimum":0,"maximum":10},"pdf_margin_left":{"description":"Left margin in inches.","type":"number","minimum":0,"maximum":10},"openai_api_key":{"description":"Your own OpenAI key. Used once, never stored, redacted from every log.","type":"string","writeOnly":true},"vision_prompt":{"description":"Prompt sent along with the rendered image.","type":"string"},"vision_max_tokens":{"description":"Token ceiling for the vision response.","default":512,"type":"integer","minimum":1,"maximum":4096},"clip_x":{"description":"Clip origin X, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000},"clip_y":{"description":"Clip origin Y, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000},"clip_width":{"description":"Clip width, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000},"clip_height":{"description":"Clip height, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000},"full_page":{"description":"Capture the entire scrollable document.","default":false,"type":"boolean"},"full_page_scroll":{"description":"Scroll through the page first so lazy content loads.","default":false,"type":"boolean"},"full_page_scroll_delay":{"description":"Milliseconds to wait after each scroll step.","default":400,"type":"integer","minimum":0,"maximum":10000},"full_page_scroll_by":{"description":"Pixels per scroll step. 0 uses the viewport height.","default":0,"type":"integer","minimum":0,"maximum":20000},"full_page_max_height":{"description":"Stop the capture at this document height.","type":"integer","minimum":1,"maximum":60000},"full_page_slices":{"description":"Return the page as several stitched slices instead of one image.","default":false,"type":"boolean"},"full_page_slice_height":{"description":"Height of each slice.","default":4000,"type":"integer","minimum":1,"maximum":16000},"full_page_slice_overlap_height":{"description":"Overlap between consecutive slices.","default":0,"type":"integer","minimum":0,"maximum":2000},"full_page_algorithm":{"description":"Full-page strategy: one capture of the whole document, or section-by-section for very tall pages.","default":"default","type":"string","enum":["default","by_sections"]},"viewport_device":{"description":"Device preset id. Sets width, height, scale, touch, mobile and user agent together.","type":"string","enum":["iphone_15_pro","iphone_15_pro_max","iphone_se","pixel_8","galaxy_s23","ipad_air","ipad_pro_11","macbook_air","desktop_1280","desktop_1920","og_image","iphone_16_pro","iphone_16_pro_landscape","iphone_16_pro_max","iphone_16_pro_max_landscape","iphone_16","iphone_16_landscape","iphone_14_pro","iphone_14_pro_landscape","iphone_14_pro_max","iphone_14_pro_max_landscape","iphone_13_pro","iphone_13_pro_landscape","iphone_13_pro_max","iphone_13_pro_max_landscape","iphone_13_mini","iphone_13_mini_landscape","iphone_12","iphone_12_landscape","iphone_11","iphone_11_landscape","iphone_x","iphone_x_landscape","iphone_8","iphone_8_landscape","iphone_8_plus","iphone_8_plus_landscape","pixel_9_pro","pixel_9_pro_landscape","pixel_7","pixel_7_landscape","pixel_5","pixel_5_landscape","pixel_4a","pixel_4a_landscape","galaxy_s24_ultra","galaxy_s24_ultra_landscape","galaxy_s21","galaxy_s21_landscape","galaxy_s20","galaxy_s20_landscape","galaxy_note_20","galaxy_note_20_landscape","galaxy_a54","galaxy_a54_landscape","xiaomi_13","xiaomi_13_landscape","oneplus_11","oneplus_11_landscape","moto_g_power","moto_g_power_landscape","nexus_5x","nexus_5x_landscape","nokia_lumia_520","nokia_lumia_520_landscape","blackberry_z30","blackberry_z30_landscape","ipad_pro_13","ipad_pro_13_landscape","ipad_mini","ipad_mini_landscape","ipad_10th","ipad_10th_landscape","galaxy_tab_s9","galaxy_tab_s9_landscape","surface_pro_9","surface_pro_9_landscape","kindle_fire_hdx","kindle_fire_hdx_landscape","nexus_7","nexus_7_landscape","macbook_pro_14","macbook_pro_16","imac_24","desktop_1366","desktop_1440","desktop_1536","desktop_1600","desktop_2560","desktop_3840","og_image_twitter","og_image_square","linkedin_banner"]},"viewport_width":{"description":"Viewport width in CSS pixels.","default":1280,"type":"integer","minimum":50,"maximum":7680},"viewport_height":{"description":"Viewport height in CSS pixels.","default":1024,"type":"integer","minimum":50,"maximum":7680},"device_scale_factor":{"description":"Pixel density multiplier (2 = retina).","default":1,"type":"number","minimum":1,"maximum":5},"viewport_mobile":{"description":"Emulate a mobile browser.","default":false,"type":"boolean"},"viewport_has_touch":{"description":"Advertise touch support.","default":false,"type":"boolean"},"viewport_landscape":{"description":"Swap width and height of the selected device preset.","default":false,"type":"boolean"},"image_quality":{"description":"Encoder quality for lossy formats.","default":80,"type":"integer","minimum":1,"maximum":100},"image_width":{"description":"Resize output width. Aspect ratio is preserved when height is omitted.","type":"integer","minimum":1,"maximum":20000},"image_height":{"description":"Resize output height.","type":"integer","minimum":1,"maximum":20000},"omit_background":{"description":"Render with a transparent background where the format supports alpha.","default":false,"type":"boolean"},"dark_mode":{"description":"Emulate `prefers-color-scheme: dark`.","default":false,"type":"boolean"},"reduced_motion":{"description":"Emulate `prefers-reduced-motion: reduce`.","default":false,"type":"boolean"},"media_type":{"description":"CSS media type to emulate.","default":"screen","type":"string","enum":["screen","print"]},"hide_selectors":{"description":"Selectors to hide before capturing.","type":"array","items":{"type":"string"},"maxItems":64},"scripts":{"description":"JavaScript executed in the page context, in order.","type":"array","items":{"type":"string"},"maxItems":64},"scripts_wait_until":{"description":"Navigation state to reach before running scripts.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle"]},"styles":{"description":"CSS injected into the page.","type":"array","items":{"type":"string"},"maxItems":64},"click":{"description":"Selector clicked before capturing.","type":"string"},"hover":{"description":"Selector hovered before capturing.","type":"string"},"error_on_selector_not_found":{"description":"Fail when the capture, hide or wait selector does not match, instead of skipping it.","default":false,"type":"boolean"},"error_on_click_selector_not_found":{"description":"Fail when the `click` selector does not match.","default":true,"type":"boolean"},"error_on_hover_selector_not_found":{"description":"Fail when the `hover` selector does not match.","default":true,"type":"boolean"},"bypass_csp":{"description":"Bypass the page Content Security Policy. Opt-in and recorded.","default":false,"type":"boolean"},"block_cookie_banners":{"description":"Remove consent banners using known rules.","default":false,"type":"boolean"},"block_banners_by_heuristics":{"description":"Also try a heuristic pass for banners with no known rule.","default":false,"type":"boolean"},"block_chats":{"description":"Remove live chat widgets.","default":false,"type":"boolean"},"block_ads":{"description":"Block ad networks.","default":false,"type":"boolean"},"block_trackers":{"description":"Block analytics and tracking requests.","default":false,"type":"boolean"},"block_requests":{"description":"Glob patterns or domains to block.","type":"array","items":{"type":"string"},"maxItems":64},"block_resources":{"description":"Resource types to block.","type":"array","items":{"type":"string","enum":["document","stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"maxItems":64},"geolocation_latitude":{"description":"Latitude reported to the Geolocation API.","type":"number","minimum":-90,"maximum":90},"geolocation_longitude":{"description":"Longitude reported to the Geolocation API.","type":"number","minimum":-180,"maximum":180},"geolocation_accuracy":{"description":"Accuracy in metres.","type":"number","minimum":0,"maximum":100000},"ip_country_code":{"description":"Country the managed proxy pool exits from. The catalog is served at /v1/regions.","type":"string","enum":["us","ca","mx","br","pe","gb","ie","is","de","fr","it","es","cn","jp","kr","in","au","nz"]},"proxy":{"description":"Your own proxy, as `http://user:pass@host:port`.","type":"string","writeOnly":true},"proxy_bypass_hosts":{"description":"Hosts that skip the proxy.","type":"array","items":{"type":"string"},"maxItems":64},"user_agent":{"description":"Custom User-Agent header.","type":"string"},"authorization":{"description":"Authorization header sent to the target.","type":"string","writeOnly":true},"cookies":{"description":"Cookies as `name=value; Domain=…; Path=…` strings.","type":"array","items":{"type":"string"},"maxItems":64},"headers":{"description":"Extra request headers as `Name: value` strings.","type":"array","items":{"type":"string"},"maxItems":64},"time_zone":{"description":"IANA time zone for the browser context.","default":"UTC","type":"string"},"wait_until":{"description":"Navigation state to wait for. `networkidle0` waits for zero in-flight requests, `networkidle2` for at most two.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"]},"delay":{"description":"Extra seconds to wait after the navigation state.","default":0,"type":"integer","minimum":0,"maximum":30},"timeout":{"description":"Total budget for the capture, in seconds.","default":60,"type":"integer","minimum":1,"maximum":90},"navigation_timeout":{"description":"Budget for navigation alone, in seconds.","default":30,"type":"integer","minimum":1,"maximum":30},"wait_for_selector":{"description":"Wait until this CSS selector appears.","type":"string"},"wait_for_selector_algorithm":{"description":"How many nodes satisfy the wait: the first visible match, or every match currently rendering. The selector is always CSS.","default":"at_least_one","type":"string","enum":["at_least_one","at_least_by_count"]},"cache":{"description":"Serve and store this capture from the cache. Cache hits are never charged.","default":false,"type":"boolean"},"cache_ttl":{"description":"Cache lifetime in seconds. Minimum and default 4 hours, maximum 30 days.","default":14400,"type":"integer","minimum":14400,"maximum":2592000},"cache_key":{"description":"Custom cache key, scoped to your organization.","type":"string"},"store":{"description":"Upload the result to your own bucket.","default":false,"type":"boolean"},"storage_config_id":{"description":"Use a storage configuration saved in the dashboard instead of inline credentials.","type":"string"},"storage_path":{"description":"Object key template. Supports {request_id}, {timestamp}, {external_identifier}, {format}, {organization_id}.","type":"string"},"storage_endpoint":{"description":"S3-compatible endpoint.","type":"string"},"storage_access_key_id":{"description":"Access key id for the destination bucket.","type":"string","writeOnly":true},"storage_secret_access_key":{"description":"Secret access key for the destination bucket.","type":"string","writeOnly":true},"storage_bucket":{"description":"Destination bucket.","type":"string"},"storage_class":{"description":"Storage class applied to the uploaded object.","type":"string"},"storage_acl":{"description":"ACL applied to the uploaded object.","type":"string"},"storage_return_location":{"description":"Include the stored object location in the JSON response.","default":false,"type":"boolean"},"metadata_image_size":{"description":"Include the rendered image dimensions.","default":false,"type":"boolean"},"metadata_fonts":{"description":"Include the fonts the page actually used.","default":false,"type":"boolean"},"metadata_icon":{"description":"Include the favicon URL.","default":false,"type":"boolean"},"metadata_open_graph":{"description":"Include Open Graph tags.","default":false,"type":"boolean"},"metadata_page_title":{"description":"Include the page title.","default":false,"type":"boolean"},"metadata_content":{"description":"Include the rendered page content.","default":false,"type":"boolean"},"metadata_content_format":{"description":"Format of the returned content.","default":"text","type":"string","enum":["text","html","markdown"]},"metadata_http_response_status_code":{"description":"Include the main response status code.","default":false,"type":"boolean"},"metadata_http_response_headers":{"description":"Include allow-listed response headers. Set-Cookie and auth headers are always removed.","default":false,"type":"boolean"},"async":{"description":"Return 202 immediately and process in the background.","default":false,"type":"boolean"},"webhook_url":{"description":"HTTPS endpoint notified when the capture finishes.","type":"string"},"webhook_sign":{"description":"Sign the webhook body with HMAC-SHA256.","default":false,"type":"boolean"},"webhook_errors":{"description":"Also send the webhook when the capture fails.","default":true,"type":"boolean"},"ignore_host_errors":{"description":"Capture the page even when it responds with 4xx or 5xx.","default":false,"type":"boolean"},"fail_if_request_failed":{"description":"Fail if a request matching any of these patterns fails.","type":"array","items":{"type":"string"},"maxItems":64},"fail_if_content_missing":{"description":"Fail if the rendered page is missing any of these strings.","type":"array","items":{"type":"string"},"maxItems":64},"fail_if_content_contains":{"description":"Fail if the rendered page contains any of these strings.","type":"array","items":{"type":"string"},"maxItems":64},"fail_if_gpu_rendering_fails":{"description":"Fail instead of falling back to CPU when GPU rendering is unavailable.","default":false,"type":"boolean"}}}}}},"responses":{"200":{"description":"The capture, in the requested format.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request starts allowed per minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Starts left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds when the bucket refills."},"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request. Keep it for support."},"X-PageCapture-Cache":{"schema":{"type":"string","enum":["HIT","MISS","BYPASS"]}}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"image/gif":{"schema":{"type":"string","format":"binary"}},"image/jp2":{"schema":{"type":"string","format":"binary"}},"image/tiff":{"schema":{"type":"string","format":"binary"}},"image/avif":{"schema":{"type":"string","format":"binary"}},"image/heif":{"schema":{"type":"string","format":"binary"}},"application/pdf":{"schema":{"type":"string","format":"binary"}},"text/html":{"schema":{"type":"string","format":"binary"}},"text/markdown":{"schema":{"type":"string","format":"binary"}},"text/plain":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"$ref":"#/components/schemas/JsonResult"},"examples":{"json":{"summary":"response_type=json","value":{"is_successful":true,"request_id":"req_01...","format":"png","cache_status":"MISS","result_url":"https://api.pagecapture.dev/api/artifacts/art_01...?expires=…&signature=…","size_bytes":128450}}}}}},"202":{"description":"Accepted for async processing.","content":{"application/json":{"schema":{"type":"object","properties":{"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"status":{"type":"string","enum":["accepted"]}}}}}},"204":{"description":"response_type=empty — the result went to storage or a webhook."},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/animate":{"get":{"tags":["Capture"],"operationId":"animateGet","summary":"Record a page (GET)","parameters":[{"name":"url","in":"query","required":false,"schema":{"description":"Public HTTP or HTTPS URL to capture.","type":"string"}},{"name":"html","in":"query","required":false,"schema":{"description":"Inline HTML to render instead of a URL. POST only.","type":"string"}},{"name":"markdown","in":"query","required":false,"schema":{"description":"Inline Markdown rendered through a deterministic template. POST only.","type":"string"}},{"name":"format","in":"query","required":false,"schema":{"description":"Output format. Defaults to `jpg` on /take and `mp4` on /animate.","default":"jpg","type":"string","enum":["png","jpeg","jpg","webp","gif","jp2","tiff","avif","heif","pdf","html","markdown","text","mp4","mov","avi","webm"]}},{"name":"response_type","in":"query","required":false,"schema":{"description":"How the result is returned: raw bytes, a JSON envelope, or an empty acknowledgement.","default":"by_format","type":"string","enum":["by_format","json","empty"]}},{"name":"scroll_into_view","in":"query","required":false,"schema":{"description":"Scroll this selector into view before capturing the viewport.","type":"string"}},{"name":"scroll_into_view_adjust_top","in":"query","required":false,"schema":{"description":"Pixel offset applied after `scroll_into_view`, to clear sticky headers.","default":0,"type":"integer","minimum":-10000,"maximum":10000}},{"name":"request_gpu_rendering","in":"query","required":false,"schema":{"description":"Route the job to the GPU-backed pool.","default":false,"type":"boolean"}},{"name":"attachment_name","in":"query","required":false,"schema":{"description":"Sets Content-Disposition so browsers download the result under this name.","type":"string"}},{"name":"external_identifier","in":"query","required":false,"schema":{"description":"Your own correlation id, echoed in logs, JSON responses and webhooks.","type":"string"}},{"name":"clip_x","in":"query","required":false,"schema":{"description":"Clip origin X, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000}},{"name":"clip_y","in":"query","required":false,"schema":{"description":"Clip origin Y, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000}},{"name":"clip_width","in":"query","required":false,"schema":{"description":"Clip width, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000}},{"name":"clip_height","in":"query","required":false,"schema":{"description":"Clip height, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000}},{"name":"viewport_device","in":"query","required":false,"schema":{"description":"Device preset id. Sets width, height, scale, touch, mobile and user agent together.","type":"string","enum":["iphone_15_pro","iphone_15_pro_max","iphone_se","pixel_8","galaxy_s23","ipad_air","ipad_pro_11","macbook_air","desktop_1280","desktop_1920","og_image","iphone_16_pro","iphone_16_pro_landscape","iphone_16_pro_max","iphone_16_pro_max_landscape","iphone_16","iphone_16_landscape","iphone_14_pro","iphone_14_pro_landscape","iphone_14_pro_max","iphone_14_pro_max_landscape","iphone_13_pro","iphone_13_pro_landscape","iphone_13_pro_max","iphone_13_pro_max_landscape","iphone_13_mini","iphone_13_mini_landscape","iphone_12","iphone_12_landscape","iphone_11","iphone_11_landscape","iphone_x","iphone_x_landscape","iphone_8","iphone_8_landscape","iphone_8_plus","iphone_8_plus_landscape","pixel_9_pro","pixel_9_pro_landscape","pixel_7","pixel_7_landscape","pixel_5","pixel_5_landscape","pixel_4a","pixel_4a_landscape","galaxy_s24_ultra","galaxy_s24_ultra_landscape","galaxy_s21","galaxy_s21_landscape","galaxy_s20","galaxy_s20_landscape","galaxy_note_20","galaxy_note_20_landscape","galaxy_a54","galaxy_a54_landscape","xiaomi_13","xiaomi_13_landscape","oneplus_11","oneplus_11_landscape","moto_g_power","moto_g_power_landscape","nexus_5x","nexus_5x_landscape","nokia_lumia_520","nokia_lumia_520_landscape","blackberry_z30","blackberry_z30_landscape","ipad_pro_13","ipad_pro_13_landscape","ipad_mini","ipad_mini_landscape","ipad_10th","ipad_10th_landscape","galaxy_tab_s9","galaxy_tab_s9_landscape","surface_pro_9","surface_pro_9_landscape","kindle_fire_hdx","kindle_fire_hdx_landscape","nexus_7","nexus_7_landscape","macbook_pro_14","macbook_pro_16","imac_24","desktop_1366","desktop_1440","desktop_1536","desktop_1600","desktop_2560","desktop_3840","og_image_twitter","og_image_square","linkedin_banner"]}},{"name":"viewport_width","in":"query","required":false,"schema":{"description":"Viewport width in CSS pixels.","default":1280,"type":"integer","minimum":50,"maximum":7680}},{"name":"viewport_height","in":"query","required":false,"schema":{"description":"Viewport height in CSS pixels.","default":1024,"type":"integer","minimum":50,"maximum":7680}},{"name":"device_scale_factor","in":"query","required":false,"schema":{"description":"Pixel density multiplier (2 = retina).","default":1,"type":"number","minimum":1,"maximum":5}},{"name":"viewport_mobile","in":"query","required":false,"schema":{"description":"Emulate a mobile browser.","default":false,"type":"boolean"}},{"name":"viewport_has_touch","in":"query","required":false,"schema":{"description":"Advertise touch support.","default":false,"type":"boolean"}},{"name":"viewport_landscape","in":"query","required":false,"schema":{"description":"Swap width and height of the selected device preset.","default":false,"type":"boolean"}},{"name":"image_quality","in":"query","required":false,"schema":{"description":"Encoder quality for lossy formats.","default":80,"type":"integer","minimum":1,"maximum":100}},{"name":"dark_mode","in":"query","required":false,"schema":{"description":"Emulate `prefers-color-scheme: dark`.","default":false,"type":"boolean"}},{"name":"reduced_motion","in":"query","required":false,"schema":{"description":"Emulate `prefers-reduced-motion: reduce`.","default":false,"type":"boolean"}},{"name":"media_type","in":"query","required":false,"schema":{"description":"CSS media type to emulate.","default":"screen","type":"string","enum":["screen","print"]}},{"name":"hide_selectors","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Selectors to hide before capturing.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"scripts","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"JavaScript executed in the page context, in order.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"scripts_wait_until","in":"query","required":false,"schema":{"description":"Navigation state to reach before running scripts.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle"]}},{"name":"styles","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"CSS injected into the page.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"click","in":"query","required":false,"schema":{"description":"Selector clicked before capturing.","type":"string"}},{"name":"hover","in":"query","required":false,"schema":{"description":"Selector hovered before capturing.","type":"string"}},{"name":"error_on_selector_not_found","in":"query","required":false,"schema":{"description":"Fail when the capture, hide or wait selector does not match, instead of skipping it.","default":false,"type":"boolean"}},{"name":"error_on_click_selector_not_found","in":"query","required":false,"schema":{"description":"Fail when the `click` selector does not match.","default":true,"type":"boolean"}},{"name":"error_on_hover_selector_not_found","in":"query","required":false,"schema":{"description":"Fail when the `hover` selector does not match.","default":true,"type":"boolean"}},{"name":"bypass_csp","in":"query","required":false,"schema":{"description":"Bypass the page Content Security Policy. Opt-in and recorded.","default":false,"type":"boolean"}},{"name":"block_cookie_banners","in":"query","required":false,"schema":{"description":"Remove consent banners using known rules.","default":false,"type":"boolean"}},{"name":"block_banners_by_heuristics","in":"query","required":false,"schema":{"description":"Also try a heuristic pass for banners with no known rule.","default":false,"type":"boolean"}},{"name":"block_chats","in":"query","required":false,"schema":{"description":"Remove live chat widgets.","default":false,"type":"boolean"}},{"name":"block_ads","in":"query","required":false,"schema":{"description":"Block ad networks.","default":false,"type":"boolean"}},{"name":"block_trackers","in":"query","required":false,"schema":{"description":"Block analytics and tracking requests.","default":false,"type":"boolean"}},{"name":"block_requests","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Glob patterns or domains to block.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"block_resources","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Resource types to block.","type":"array","items":{"type":"string","enum":["document","stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"maxItems":64}},{"name":"geolocation_latitude","in":"query","required":false,"schema":{"description":"Latitude reported to the Geolocation API.","type":"number","minimum":-90,"maximum":90}},{"name":"geolocation_longitude","in":"query","required":false,"schema":{"description":"Longitude reported to the Geolocation API.","type":"number","minimum":-180,"maximum":180}},{"name":"geolocation_accuracy","in":"query","required":false,"schema":{"description":"Accuracy in metres.","type":"number","minimum":0,"maximum":100000}},{"name":"ip_country_code","in":"query","required":false,"schema":{"description":"Country the managed proxy pool exits from. The catalog is served at /v1/regions.","type":"string","enum":["us","ca","mx","br","pe","gb","ie","is","de","fr","it","es","cn","jp","kr","in","au","nz"]}},{"name":"proxy","in":"query","required":false,"schema":{"description":"Your own proxy, as `http://user:pass@host:port`.","type":"string","writeOnly":true}},{"name":"proxy_bypass_hosts","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Hosts that skip the proxy.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"user_agent","in":"query","required":false,"schema":{"description":"Custom User-Agent header.","type":"string"}},{"name":"authorization","in":"query","required":false,"schema":{"description":"Authorization header sent to the target.","type":"string","writeOnly":true}},{"name":"cookies","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Cookies as `name=value; Domain=…; Path=…` strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"headers","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Extra request headers as `Name: value` strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"time_zone","in":"query","required":false,"schema":{"description":"IANA time zone for the browser context.","default":"UTC","type":"string"}},{"name":"wait_until","in":"query","required":false,"schema":{"description":"Navigation state to wait for. `networkidle0` waits for zero in-flight requests, `networkidle2` for at most two.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"]}},{"name":"delay","in":"query","required":false,"schema":{"description":"Extra seconds to wait after the navigation state.","default":0,"type":"integer","minimum":0,"maximum":30}},{"name":"timeout","in":"query","required":false,"schema":{"description":"Total budget for the capture, in seconds.","default":60,"type":"integer","minimum":1,"maximum":90}},{"name":"navigation_timeout","in":"query","required":false,"schema":{"description":"Budget for navigation alone, in seconds.","default":30,"type":"integer","minimum":1,"maximum":30}},{"name":"wait_for_selector","in":"query","required":false,"schema":{"description":"Wait until this CSS selector appears.","type":"string"}},{"name":"wait_for_selector_algorithm","in":"query","required":false,"schema":{"description":"How many nodes satisfy the wait: the first visible match, or every match currently rendering. The selector is always CSS.","default":"at_least_one","type":"string","enum":["at_least_one","at_least_by_count"]}},{"name":"cache","in":"query","required":false,"schema":{"description":"Serve and store this capture from the cache. Cache hits are never charged.","default":false,"type":"boolean"}},{"name":"cache_ttl","in":"query","required":false,"schema":{"description":"Cache lifetime in seconds. Minimum and default 4 hours, maximum 30 days.","default":14400,"type":"integer","minimum":14400,"maximum":2592000}},{"name":"cache_key","in":"query","required":false,"schema":{"description":"Custom cache key, scoped to your organization.","type":"string"}},{"name":"store","in":"query","required":false,"schema":{"description":"Upload the result to your own bucket.","default":false,"type":"boolean"}},{"name":"storage_config_id","in":"query","required":false,"schema":{"description":"Use a storage configuration saved in the dashboard instead of inline credentials.","type":"string"}},{"name":"storage_path","in":"query","required":false,"schema":{"description":"Object key template. Supports {request_id}, {timestamp}, {external_identifier}, {format}, {organization_id}.","type":"string"}},{"name":"storage_endpoint","in":"query","required":false,"schema":{"description":"S3-compatible endpoint.","type":"string"}},{"name":"storage_access_key_id","in":"query","required":false,"schema":{"description":"Access key id for the destination bucket.","type":"string","writeOnly":true}},{"name":"storage_secret_access_key","in":"query","required":false,"schema":{"description":"Secret access key for the destination bucket.","type":"string","writeOnly":true}},{"name":"storage_bucket","in":"query","required":false,"schema":{"description":"Destination bucket.","type":"string"}},{"name":"storage_class","in":"query","required":false,"schema":{"description":"Storage class applied to the uploaded object.","type":"string"}},{"name":"storage_acl","in":"query","required":false,"schema":{"description":"ACL applied to the uploaded object.","type":"string"}},{"name":"storage_return_location","in":"query","required":false,"schema":{"description":"Include the stored object location in the JSON response.","default":false,"type":"boolean"}},{"name":"async","in":"query","required":false,"schema":{"description":"Return 202 immediately and process in the background.","default":false,"type":"boolean"}},{"name":"webhook_url","in":"query","required":false,"schema":{"description":"HTTPS endpoint notified when the capture finishes.","type":"string"}},{"name":"webhook_sign","in":"query","required":false,"schema":{"description":"Sign the webhook body with HMAC-SHA256.","default":false,"type":"boolean"}},{"name":"webhook_errors","in":"query","required":false,"schema":{"description":"Also send the webhook when the capture fails.","default":true,"type":"boolean"}},{"name":"ignore_host_errors","in":"query","required":false,"schema":{"description":"Capture the page even when it responds with 4xx or 5xx.","default":false,"type":"boolean"}},{"name":"fail_if_request_failed","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Fail if a request matching any of these patterns fails.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"fail_if_content_missing","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Fail if the rendered page is missing any of these strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"fail_if_content_contains","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Fail if the rendered page contains any of these strings.","type":"array","items":{"type":"string"},"maxItems":64}},{"name":"fail_if_gpu_rendering_fails","in":"query","required":false,"schema":{"description":"Fail instead of falling back to CPU when GPU rendering is unavailable.","default":false,"type":"boolean"}},{"name":"scenario","in":"query","required":false,"schema":{"description":"What the recording does: hold the page, or scroll through it.","default":"default","type":"string","enum":["default","scroll"]}},{"name":"duration","in":"query","required":false,"schema":{"description":"Recording length in seconds.","default":5,"type":"integer","minimum":1,"maximum":30}},{"name":"width","in":"query","required":false,"schema":{"description":"Output width in pixels. Defaults to the viewport width.","type":"integer","minimum":100,"maximum":3840}},{"name":"height","in":"query","required":false,"schema":{"description":"Output height in pixels. Defaults to the viewport height.","type":"integer","minimum":100,"maximum":2160}},{"name":"aspect_ratio","in":"query","required":false,"schema":{"description":"Derive the missing dimension from this ratio.","type":"string","enum":["16:9","4:3","1:1","9:16","3:4"]}},{"name":"scroll_delay","in":"query","required":false,"schema":{"description":"Milliseconds between scroll steps.","default":500,"type":"integer","minimum":0,"maximum":10000}},{"name":"scroll_duration","in":"query","required":false,"schema":{"description":"Duration of each scroll step, in milliseconds.","default":1500,"type":"integer","minimum":100,"maximum":30000}},{"name":"scroll_by","in":"query","required":false,"schema":{"description":"Pixels per scroll step. 0 uses the viewport height.","default":1000,"type":"integer","minimum":0,"maximum":20000}},{"name":"scroll_start_immediately","in":"query","required":false,"schema":{"description":"Start scrolling as soon as recording begins.","default":true,"type":"boolean"}},{"name":"scroll_start_delay","in":"query","required":false,"schema":{"description":"Milliseconds to hold at the top before scrolling.","default":0,"type":"integer","minimum":0,"maximum":20000}},{"name":"scroll_back","in":"query","required":false,"schema":{"description":"Return to the top when the scroll finishes.","default":true,"type":"boolean"}},{"name":"scroll_back_algorithm","in":"query","required":false,"schema":{"description":"`once` returns to the top a single time, `repeat` loops down and back for the whole recording.","default":"once","type":"string","enum":["once","repeat"]}},{"name":"scroll_back_after_duration","in":"query","required":false,"schema":{"description":"Milliseconds into the recording at which the return to the top starts. Defaults to when the scroll ends.","type":"integer","minimum":0,"maximum":30000}},{"name":"scroll_complete","in":"query","required":false,"schema":{"description":"Hold the recording for the full `duration` even when the scroll finishes earlier.","default":true,"type":"boolean"}},{"name":"scroll_stop_after_duration","in":"query","required":false,"schema":{"description":"Milliseconds of scrolling before it stops, regardless of how much page is left.","type":"integer","minimum":0,"maximum":30000}},{"name":"scroll_easing","in":"query","required":false,"schema":{"description":"Easing applied to scroll motion.","default":"ease_in_out_quint","type":"string","enum":["linear","ease_in_sine","ease_out_sine","ease_in_out_sine","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_cubic","ease_out_cubic","ease_in_out_cubic","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint"]}},{"name":"scroll_try_navigate","in":"query","required":false,"schema":{"description":"Look for a link matching `scroll_navigate_link_hints` and follow it mid-recording, producing a site tour.","default":false,"type":"boolean"}},{"name":"scroll_navigate_after","in":"query","required":false,"schema":{"description":"Milliseconds into the recording at which navigation happens. Defaults to half the duration.","type":"integer","minimum":0,"maximum":30000}},{"name":"scroll_navigate_to_url","in":"query","required":false,"schema":{"description":"Navigate to this URL instead of following a hinted link. Subject to the same egress policy as `url`.","type":"string"}},{"name":"scroll_navigate_link_hints","in":"query","required":false,"style":"form","explode":true,"schema":{"description":"Link text fragments the tour looks for when `scroll_try_navigate` is set.","default":["pricing","about","customers"],"type":"array","items":{"type":"string"},"maxItems":64}},{"name":"scroll_till_selector","in":"query","required":false,"schema":{"description":"Stop the scroll when this CSS selector is reached.","type":"string"}},{"name":"scroll_till_selector_adjust_top","in":"query","required":false,"schema":{"description":"Pixel offset applied to the `scroll_till_selector` stop position.","default":0,"type":"integer","minimum":-10000,"maximum":10000}},{"name":"scroll_to_end_after","in":"query","required":false,"schema":{"description":"Milliseconds after which the scroll jumps straight to the bottom of the page.","type":"integer","minimum":0,"maximum":30000}}],"responses":{"200":{"description":"The capture, in the requested format.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request starts allowed per minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Starts left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds when the bucket refills."},"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request. Keep it for support."},"X-PageCapture-Cache":{"schema":{"type":"string","enum":["HIT","MISS","BYPASS"]}}},"content":{"video/mp4":{"schema":{"type":"string","format":"binary"}},"video/quicktime":{"schema":{"type":"string","format":"binary"}},"video/x-msvideo":{"schema":{"type":"string","format":"binary"}},"video/webm":{"schema":{"type":"string","format":"binary"}},"image/gif":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"$ref":"#/components/schemas/JsonResult"},"examples":{"json":{"summary":"response_type=json","value":{"is_successful":true,"request_id":"req_01...","format":"png","cache_status":"MISS","result_url":"https://api.pagecapture.dev/api/artifacts/art_01...?expires=…&signature=…","size_bytes":128450}}}}}},"202":{"description":"Accepted for async processing.","content":{"application/json":{"schema":{"type":"object","properties":{"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"status":{"type":"string","enum":["accepted"]}}}}}},"204":{"description":"response_type=empty — the result went to storage or a webhook."},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Capture"],"operationId":"animatePost","summary":"Record a page (POST)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of `url`, `html` or `markdown` is required.","properties":{"access_key":{"type":"string","writeOnly":true,"description":"Alternative to the X-Access-Key header. Sending both with different values is an error."},"url":{"description":"Public HTTP or HTTPS URL to capture.","type":"string"},"html":{"description":"Inline HTML to render instead of a URL. POST only.","type":"string"},"markdown":{"description":"Inline Markdown rendered through a deterministic template. POST only.","type":"string"},"format":{"description":"Output format. Defaults to `jpg` on /take and `mp4` on /animate.","default":"jpg","type":"string","enum":["png","jpeg","jpg","webp","gif","jp2","tiff","avif","heif","pdf","html","markdown","text","mp4","mov","avi","webm"]},"response_type":{"description":"How the result is returned: raw bytes, a JSON envelope, or an empty acknowledgement.","default":"by_format","type":"string","enum":["by_format","json","empty"]},"scroll_into_view":{"description":"Scroll this selector into view before capturing the viewport.","type":"string"},"scroll_into_view_adjust_top":{"description":"Pixel offset applied after `scroll_into_view`, to clear sticky headers.","default":0,"type":"integer","minimum":-10000,"maximum":10000},"request_gpu_rendering":{"description":"Route the job to the GPU-backed pool.","default":false,"type":"boolean"},"attachment_name":{"description":"Sets Content-Disposition so browsers download the result under this name.","type":"string"},"external_identifier":{"description":"Your own correlation id, echoed in logs, JSON responses and webhooks.","type":"string"},"clip_x":{"description":"Clip origin X, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000},"clip_y":{"description":"Clip origin Y, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":0,"maximum":100000},"clip_width":{"description":"Clip width, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000},"clip_height":{"description":"Clip height, in CSS pixels. On /animate this applies to GIF only.","type":"integer","minimum":1,"maximum":100000},"viewport_device":{"description":"Device preset id. Sets width, height, scale, touch, mobile and user agent together.","type":"string","enum":["iphone_15_pro","iphone_15_pro_max","iphone_se","pixel_8","galaxy_s23","ipad_air","ipad_pro_11","macbook_air","desktop_1280","desktop_1920","og_image","iphone_16_pro","iphone_16_pro_landscape","iphone_16_pro_max","iphone_16_pro_max_landscape","iphone_16","iphone_16_landscape","iphone_14_pro","iphone_14_pro_landscape","iphone_14_pro_max","iphone_14_pro_max_landscape","iphone_13_pro","iphone_13_pro_landscape","iphone_13_pro_max","iphone_13_pro_max_landscape","iphone_13_mini","iphone_13_mini_landscape","iphone_12","iphone_12_landscape","iphone_11","iphone_11_landscape","iphone_x","iphone_x_landscape","iphone_8","iphone_8_landscape","iphone_8_plus","iphone_8_plus_landscape","pixel_9_pro","pixel_9_pro_landscape","pixel_7","pixel_7_landscape","pixel_5","pixel_5_landscape","pixel_4a","pixel_4a_landscape","galaxy_s24_ultra","galaxy_s24_ultra_landscape","galaxy_s21","galaxy_s21_landscape","galaxy_s20","galaxy_s20_landscape","galaxy_note_20","galaxy_note_20_landscape","galaxy_a54","galaxy_a54_landscape","xiaomi_13","xiaomi_13_landscape","oneplus_11","oneplus_11_landscape","moto_g_power","moto_g_power_landscape","nexus_5x","nexus_5x_landscape","nokia_lumia_520","nokia_lumia_520_landscape","blackberry_z30","blackberry_z30_landscape","ipad_pro_13","ipad_pro_13_landscape","ipad_mini","ipad_mini_landscape","ipad_10th","ipad_10th_landscape","galaxy_tab_s9","galaxy_tab_s9_landscape","surface_pro_9","surface_pro_9_landscape","kindle_fire_hdx","kindle_fire_hdx_landscape","nexus_7","nexus_7_landscape","macbook_pro_14","macbook_pro_16","imac_24","desktop_1366","desktop_1440","desktop_1536","desktop_1600","desktop_2560","desktop_3840","og_image_twitter","og_image_square","linkedin_banner"]},"viewport_width":{"description":"Viewport width in CSS pixels.","default":1280,"type":"integer","minimum":50,"maximum":7680},"viewport_height":{"description":"Viewport height in CSS pixels.","default":1024,"type":"integer","minimum":50,"maximum":7680},"device_scale_factor":{"description":"Pixel density multiplier (2 = retina).","default":1,"type":"number","minimum":1,"maximum":5},"viewport_mobile":{"description":"Emulate a mobile browser.","default":false,"type":"boolean"},"viewport_has_touch":{"description":"Advertise touch support.","default":false,"type":"boolean"},"viewport_landscape":{"description":"Swap width and height of the selected device preset.","default":false,"type":"boolean"},"image_quality":{"description":"Encoder quality for lossy formats.","default":80,"type":"integer","minimum":1,"maximum":100},"dark_mode":{"description":"Emulate `prefers-color-scheme: dark`.","default":false,"type":"boolean"},"reduced_motion":{"description":"Emulate `prefers-reduced-motion: reduce`.","default":false,"type":"boolean"},"media_type":{"description":"CSS media type to emulate.","default":"screen","type":"string","enum":["screen","print"]},"hide_selectors":{"description":"Selectors to hide before capturing.","type":"array","items":{"type":"string"},"maxItems":64},"scripts":{"description":"JavaScript executed in the page context, in order.","type":"array","items":{"type":"string"},"maxItems":64},"scripts_wait_until":{"description":"Navigation state to reach before running scripts.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle"]},"styles":{"description":"CSS injected into the page.","type":"array","items":{"type":"string"},"maxItems":64},"click":{"description":"Selector clicked before capturing.","type":"string"},"hover":{"description":"Selector hovered before capturing.","type":"string"},"error_on_selector_not_found":{"description":"Fail when the capture, hide or wait selector does not match, instead of skipping it.","default":false,"type":"boolean"},"error_on_click_selector_not_found":{"description":"Fail when the `click` selector does not match.","default":true,"type":"boolean"},"error_on_hover_selector_not_found":{"description":"Fail when the `hover` selector does not match.","default":true,"type":"boolean"},"bypass_csp":{"description":"Bypass the page Content Security Policy. Opt-in and recorded.","default":false,"type":"boolean"},"block_cookie_banners":{"description":"Remove consent banners using known rules.","default":false,"type":"boolean"},"block_banners_by_heuristics":{"description":"Also try a heuristic pass for banners with no known rule.","default":false,"type":"boolean"},"block_chats":{"description":"Remove live chat widgets.","default":false,"type":"boolean"},"block_ads":{"description":"Block ad networks.","default":false,"type":"boolean"},"block_trackers":{"description":"Block analytics and tracking requests.","default":false,"type":"boolean"},"block_requests":{"description":"Glob patterns or domains to block.","type":"array","items":{"type":"string"},"maxItems":64},"block_resources":{"description":"Resource types to block.","type":"array","items":{"type":"string","enum":["document","stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"maxItems":64},"geolocation_latitude":{"description":"Latitude reported to the Geolocation API.","type":"number","minimum":-90,"maximum":90},"geolocation_longitude":{"description":"Longitude reported to the Geolocation API.","type":"number","minimum":-180,"maximum":180},"geolocation_accuracy":{"description":"Accuracy in metres.","type":"number","minimum":0,"maximum":100000},"ip_country_code":{"description":"Country the managed proxy pool exits from. The catalog is served at /v1/regions.","type":"string","enum":["us","ca","mx","br","pe","gb","ie","is","de","fr","it","es","cn","jp","kr","in","au","nz"]},"proxy":{"description":"Your own proxy, as `http://user:pass@host:port`.","type":"string","writeOnly":true},"proxy_bypass_hosts":{"description":"Hosts that skip the proxy.","type":"array","items":{"type":"string"},"maxItems":64},"user_agent":{"description":"Custom User-Agent header.","type":"string"},"authorization":{"description":"Authorization header sent to the target.","type":"string","writeOnly":true},"cookies":{"description":"Cookies as `name=value; Domain=…; Path=…` strings.","type":"array","items":{"type":"string"},"maxItems":64},"headers":{"description":"Extra request headers as `Name: value` strings.","type":"array","items":{"type":"string"},"maxItems":64},"time_zone":{"description":"IANA time zone for the browser context.","default":"UTC","type":"string"},"wait_until":{"description":"Navigation state to wait for. `networkidle0` waits for zero in-flight requests, `networkidle2` for at most two.","default":"load","type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"]},"delay":{"description":"Extra seconds to wait after the navigation state.","default":0,"type":"integer","minimum":0,"maximum":30},"timeout":{"description":"Total budget for the capture, in seconds.","default":60,"type":"integer","minimum":1,"maximum":90},"navigation_timeout":{"description":"Budget for navigation alone, in seconds.","default":30,"type":"integer","minimum":1,"maximum":30},"wait_for_selector":{"description":"Wait until this CSS selector appears.","type":"string"},"wait_for_selector_algorithm":{"description":"How many nodes satisfy the wait: the first visible match, or every match currently rendering. The selector is always CSS.","default":"at_least_one","type":"string","enum":["at_least_one","at_least_by_count"]},"cache":{"description":"Serve and store this capture from the cache. Cache hits are never charged.","default":false,"type":"boolean"},"cache_ttl":{"description":"Cache lifetime in seconds. Minimum and default 4 hours, maximum 30 days.","default":14400,"type":"integer","minimum":14400,"maximum":2592000},"cache_key":{"description":"Custom cache key, scoped to your organization.","type":"string"},"store":{"description":"Upload the result to your own bucket.","default":false,"type":"boolean"},"storage_config_id":{"description":"Use a storage configuration saved in the dashboard instead of inline credentials.","type":"string"},"storage_path":{"description":"Object key template. Supports {request_id}, {timestamp}, {external_identifier}, {format}, {organization_id}.","type":"string"},"storage_endpoint":{"description":"S3-compatible endpoint.","type":"string"},"storage_access_key_id":{"description":"Access key id for the destination bucket.","type":"string","writeOnly":true},"storage_secret_access_key":{"description":"Secret access key for the destination bucket.","type":"string","writeOnly":true},"storage_bucket":{"description":"Destination bucket.","type":"string"},"storage_class":{"description":"Storage class applied to the uploaded object.","type":"string"},"storage_acl":{"description":"ACL applied to the uploaded object.","type":"string"},"storage_return_location":{"description":"Include the stored object location in the JSON response.","default":false,"type":"boolean"},"async":{"description":"Return 202 immediately and process in the background.","default":false,"type":"boolean"},"webhook_url":{"description":"HTTPS endpoint notified when the capture finishes.","type":"string"},"webhook_sign":{"description":"Sign the webhook body with HMAC-SHA256.","default":false,"type":"boolean"},"webhook_errors":{"description":"Also send the webhook when the capture fails.","default":true,"type":"boolean"},"ignore_host_errors":{"description":"Capture the page even when it responds with 4xx or 5xx.","default":false,"type":"boolean"},"fail_if_request_failed":{"description":"Fail if a request matching any of these patterns fails.","type":"array","items":{"type":"string"},"maxItems":64},"fail_if_content_missing":{"description":"Fail if the rendered page is missing any of these strings.","type":"array","items":{"type":"string"},"maxItems":64},"fail_if_content_contains":{"description":"Fail if the rendered page contains any of these strings.","type":"array","items":{"type":"string"},"maxItems":64},"fail_if_gpu_rendering_fails":{"description":"Fail instead of falling back to CPU when GPU rendering is unavailable.","default":false,"type":"boolean"},"scenario":{"description":"What the recording does: hold the page, or scroll through it.","default":"default","type":"string","enum":["default","scroll"]},"duration":{"description":"Recording length in seconds.","default":5,"type":"integer","minimum":1,"maximum":30},"width":{"description":"Output width in pixels. Defaults to the viewport width.","type":"integer","minimum":100,"maximum":3840},"height":{"description":"Output height in pixels. Defaults to the viewport height.","type":"integer","minimum":100,"maximum":2160},"aspect_ratio":{"description":"Derive the missing dimension from this ratio.","type":"string","enum":["16:9","4:3","1:1","9:16","3:4"]},"scroll_delay":{"description":"Milliseconds between scroll steps.","default":500,"type":"integer","minimum":0,"maximum":10000},"scroll_duration":{"description":"Duration of each scroll step, in milliseconds.","default":1500,"type":"integer","minimum":100,"maximum":30000},"scroll_by":{"description":"Pixels per scroll step. 0 uses the viewport height.","default":1000,"type":"integer","minimum":0,"maximum":20000},"scroll_start_immediately":{"description":"Start scrolling as soon as recording begins.","default":true,"type":"boolean"},"scroll_start_delay":{"description":"Milliseconds to hold at the top before scrolling.","default":0,"type":"integer","minimum":0,"maximum":20000},"scroll_back":{"description":"Return to the top when the scroll finishes.","default":true,"type":"boolean"},"scroll_back_algorithm":{"description":"`once` returns to the top a single time, `repeat` loops down and back for the whole recording.","default":"once","type":"string","enum":["once","repeat"]},"scroll_back_after_duration":{"description":"Milliseconds into the recording at which the return to the top starts. Defaults to when the scroll ends.","type":"integer","minimum":0,"maximum":30000},"scroll_complete":{"description":"Hold the recording for the full `duration` even when the scroll finishes earlier.","default":true,"type":"boolean"},"scroll_stop_after_duration":{"description":"Milliseconds of scrolling before it stops, regardless of how much page is left.","type":"integer","minimum":0,"maximum":30000},"scroll_easing":{"description":"Easing applied to scroll motion.","default":"ease_in_out_quint","type":"string","enum":["linear","ease_in_sine","ease_out_sine","ease_in_out_sine","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_cubic","ease_out_cubic","ease_in_out_cubic","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint"]},"scroll_try_navigate":{"description":"Look for a link matching `scroll_navigate_link_hints` and follow it mid-recording, producing a site tour.","default":false,"type":"boolean"},"scroll_navigate_after":{"description":"Milliseconds into the recording at which navigation happens. Defaults to half the duration.","type":"integer","minimum":0,"maximum":30000},"scroll_navigate_to_url":{"description":"Navigate to this URL instead of following a hinted link. Subject to the same egress policy as `url`.","type":"string"},"scroll_navigate_link_hints":{"description":"Link text fragments the tour looks for when `scroll_try_navigate` is set.","default":["pricing","about","customers"],"type":"array","items":{"type":"string"},"maxItems":64},"scroll_till_selector":{"description":"Stop the scroll when this CSS selector is reached.","type":"string"},"scroll_till_selector_adjust_top":{"description":"Pixel offset applied to the `scroll_till_selector` stop position.","default":0,"type":"integer","minimum":-10000,"maximum":10000},"scroll_to_end_after":{"description":"Milliseconds after which the scroll jumps straight to the bottom of the page.","type":"integer","minimum":0,"maximum":30000}}}}}},"responses":{"200":{"description":"The capture, in the requested format.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request starts allowed per minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Starts left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds when the bucket refills."},"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request. Keep it for support."},"X-PageCapture-Cache":{"schema":{"type":"string","enum":["HIT","MISS","BYPASS"]}}},"content":{"video/mp4":{"schema":{"type":"string","format":"binary"}},"video/quicktime":{"schema":{"type":"string","format":"binary"}},"video/x-msvideo":{"schema":{"type":"string","format":"binary"}},"video/webm":{"schema":{"type":"string","format":"binary"}},"image/gif":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"$ref":"#/components/schemas/JsonResult"},"examples":{"json":{"summary":"response_type=json","value":{"is_successful":true,"request_id":"req_01...","format":"png","cache_status":"MISS","result_url":"https://api.pagecapture.dev/api/artifacts/art_01...?expires=…&signature=…","size_bytes":128450}}}}}},"202":{"description":"Accepted for async processing.","content":{"application/json":{"schema":{"type":"object","properties":{"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"status":{"type":"string","enum":["accepted"]}}}}}},"204":{"description":"response_type=empty — the result went to storage or a webhook."},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/bulk":{"post":{"tags":["Batch"],"operationId":"bulk","summary":"Submit up to 1,000 captures","description":"An invalid envelope rejects the whole call; an invalid item rejects only that item. Index-to-result correspondence is preserved.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["requests"],"properties":{"endpoint":{"type":"string","enum":["take","animate"],"default":"take"},"options":{"type":"object","description":"Defaults applied to every item."},"requests":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"Per-item overrides."}},"execute":{"type":"boolean","default":true,"description":"false validates the batch without queueing or charging anything."},"optimize":{"type":"boolean","default":false}}}}}},"responses":{"202":{"description":"At least one item accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkResult"}}}},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage":{"get":{"tags":["Account"],"operationId":"usage","summary":"Current period usage and limits","description":"Does not consume a credit or a rate-limit token.","responses":{"200":{"description":"Usage snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/requests/{request_id}":{"get":{"tags":["Account"],"operationId":"getRequest","summary":"Status of a request","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Request status and, when available, a signed result URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestStatus"}}}},"400":{"description":"access_key_required, access_key_invalid, signature_is_required, signature_is_not_valid, screenshots_limit_reached, concurrency_limit_reached, request_not_valid, invalid_cookie_parameter, invalid_header_parameter, invalid_storage_configuration, name_not_resolved, selector_not_found, script_triggers_redirect, resulting_image_too_large, storage_access_denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"request_body_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"network_error, host_returned_error, matched_failed_request, content_missing_specified_string, content_contains_specified_string, timeout_error, storage_returned_transient_error, request_aborted, internal_application_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporary_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"capture":{"post":{"summary":"Delivered when an async capture finishes","description":"Signed with HMAC-SHA256 over `timestamp + \".\" + raw_body`. Retries reuse the same event id so you can deduplicate.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"}}}},"responses":{"2xx":{"description":"Any 2xx marks the delivery successful."}}}}},"components":{"securitySchemes":{"AccessKeyHeader":{"type":"apiKey","in":"header","name":"X-Access-Key"},"AccessKeyQuery":{"type":"apiKey","in":"query","name":"access_key"}},"schemas":{"Error":{"type":"object","required":["is_successful","error_code","error_message"],"properties":{"is_successful":{"type":"boolean","enum":[false]},"error_code":{"type":"string","enum":["access_key_required","access_key_invalid","signature_is_required","signature_is_not_valid","screenshots_limit_reached","concurrency_limit_reached","request_not_valid","request_body_too_large","invalid_cookie_parameter","invalid_header_parameter","invalid_storage_configuration","name_not_resolved","network_error","host_returned_error","matched_failed_request","selector_not_found","content_missing_specified_string","content_contains_specified_string","timeout_error","script_triggers_redirect","resulting_image_too_large","storage_access_denied","storage_returned_transient_error","request_aborted","temporary_unavailable","internal_application_error"],"description":"Stable across versions. Branch on this, not on the HTTP status."},"error_message":{"type":"string"},"documentation_url":{"type":"string","format":"uri"},"request_id":{"type":["string","null"]}}},"JsonResult":{"type":"object","properties":{"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"external_identifier":{"type":["string","null"]},"format":{"type":"string"},"cache_status":{"type":"string","enum":["HIT","MISS","BYPASS"]},"result_url":{"type":"string","format":"uri","description":"Signed and short-lived."},"size_bytes":{"type":"integer"},"storage":{"type":["object","null"]}}},"BulkResult":{"type":"object","properties":{"is_successful":{"type":"boolean"},"bulk_id":{"type":"string"},"accepted":{"type":"integer"},"rejected":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"error_code":{"type":"string","enum":["access_key_required","access_key_invalid","signature_is_required","signature_is_not_valid","screenshots_limit_reached","concurrency_limit_reached","request_not_valid","request_body_too_large","invalid_cookie_parameter","invalid_header_parameter","invalid_storage_configuration","name_not_resolved","network_error","host_returned_error","matched_failed_request","selector_not_found","content_missing_specified_string","content_contains_specified_string","timeout_error","script_triggers_redirect","resulting_image_too_large","storage_access_denied","storage_returned_transient_error","request_aborted","temporary_unavailable","internal_application_error"]},"error_message":{"type":"string"}}}}}},"Usage":{"type":"object","properties":{"is_successful":{"type":"boolean"},"period":{"type":"object","properties":{"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"}}},"credits":{"type":"object","properties":{"included":{"type":"integer"},"used":{"type":"integer"},"available":{"type":"integer"},"overage_used":{"type":"integer"},"hard_limit":{"type":["integer","null"]}}},"requests":{"type":"object","properties":{"limit_per_minute":{"type":"integer"},"remaining_in_current_window":{"type":"integer"},"resets_at":{"type":"string","format":"date-time"}}},"plan":{"type":"string"},"overage_enabled":{"type":"boolean"}}},"RequestStatus":{"type":"object","properties":{"is_successful":{"type":"boolean"},"request_id":{"type":"string"},"status":{"type":"string","enum":["accepted","queued","running","succeeded","failed","rejected","cancelled","expired"]},"format":{"type":"string"},"cache_status":{"type":"string"},"billable":{"type":"boolean"},"error_code":{"type":["string","null"]},"duration_ms":{"type":["integer","null"]},"result_url":{"type":["string","null"],"format":"uri"}}},"WebhookEvent":{"type":"object","properties":{"id":{"type":"string","description":"Stable across retries — deduplicate on this."},"type":{"type":"string","enum":["capture.succeeded","capture.failed"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"request_id":{"type":"string"},"external_identifier":{"type":["string","null"]},"is_successful":{"type":"boolean"},"status":{"type":"string"},"format":{"type":"string"},"result_url":{"type":["string","null"]},"storage":{"type":["object","null"]},"cache_status":{"type":"string"},"billable":{"type":"boolean"},"error_code":{"type":["string","null"]},"error_message":{"type":["string","null"]}}}}}}}}