{"openapi":"3.1.0","info":{"title":"ScreenshotNeo API","version":"1.0.0","description":"Clean website screenshots, PDFs and page metadata. Only clean, freshly rendered shots are billed: bot checks, blank pages, failures and cache hits are free."},"servers":[{"url":"https://api.screenshotneo.com"}],"security":[{"accessKey":[]},{"bearer":[]}],"paths":{"/v1/shot":{"get":{"operationId":"takeScreenshot","summary":"Capture a URL","parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string","description":"The page to capture. https:// is added when missing. Private and internal addresses are refused, including through redirects."}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["png","jpeg","webp","pdf"],"default":"png","description":"Output format. jpg is accepted for jpeg."}},{"name":"quality","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":80,"description":"JPEG and WebP quality. Also accepted as: image_quality."}},{"name":"image_width","in":"query","required":false,"schema":{"type":"integer","minimum":16,"maximum":3840,"description":"Resize the result to this width (thumbnails). With image_height too, the result is cropped to fill both. Also accepted as: thumb_width, thumbnail_width."}},{"name":"image_height","in":"query","required":false,"schema":{"type":"integer","minimum":16,"maximum":4320,"description":"Resize the result to this height. Also accepted as: thumb_height."}},{"name":"omit_background","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Transparent background (PNG and WebP) where the page sets none. Also accepted as: transparent."}},{"name":"attachment_name","in":"query","required":false,"schema":{"type":"string","description":"Send the file as a download with this name. Also accepted as: download."}},{"name":"device","in":"query","required":false,"schema":{"type":"string","enum":["desktop","laptop","full_hd","macbook_air","tablet","ipad_air","ipad_pro","mobile","iphone_15","iphone_15_pro_max","pixel_8","galaxy_s24"],"description":"A preset that sets width, height, pixel ratio, mobile mode and touch in one go. Also accepted as: viewport_device."}},{"name":"width","in":"query","required":false,"schema":{"type":"integer","minimum":320,"maximum":3840,"default":1280,"description":"Browser width in CSS pixels. Also accepted as: viewport_width."}},{"name":"height","in":"query","required":false,"schema":{"type":"integer","minimum":240,"maximum":4320,"default":800,"description":"Browser height in CSS pixels. Also accepted as: viewport_height."}},{"name":"scale","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":3,"default":1,"description":"Device pixel ratio. 2 gives a Retina image twice the size. Also accepted as: device_scale_factor."}},{"name":"mobile","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Mobile mode: the page’s meta viewport applies and a mobile browser is reported. Also accepted as: viewport_mobile."}},{"name":"touch","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Report a touch screen. Also accepted as: viewport_has_touch."}},{"name":"landscape","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Swap width and height. Also accepted as: viewport_landscape."}},{"name":"full_page","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Capture the whole scrollable page, not just the first screen."}},{"name":"full_page_scroll","in":"query","required":false,"schema":{"type":"boolean","description":"Scroll down first so lazy images and sections load."}},{"name":"full_page_max_height","in":"query","required":false,"schema":{"type":"integer","minimum":500,"maximum":16000,"default":16000,"description":"Stop a full-page capture at this height (useful for endless feeds). Also accepted as: max_height."}},{"name":"selector","in":"query","required":false,"schema":{"type":"string","description":"Capture only the first element matching this CSS selector."}},{"name":"clip","in":"query","required":false,"schema":{"type":"string","description":"Capture a rectangle: x,y,width,height in CSS pixels. clip_x, clip_y, clip_width and clip_height work too."}},{"name":"wait_until","in":"query","required":false,"schema":{"type":"string","enum":["auto","load","domcontentloaded","networkidle0","networkidle2"],"default":"auto","description":"When the page counts as loaded. auto = the load event plus up to 3 seconds for the network to settle."}},{"name":"wait_for_selector","in":"query","required":false,"schema":{"type":"string","description":"Wait until an element matching this selector exists (up to 20 seconds). If it never appears, the call fails and isn’t billed. Also accepted as: wait_for."}},{"name":"delay","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":20,"default":0,"description":"Extra seconds to wait before the capture."}},{"name":"timeout","in":"query","required":false,"schema":{"type":"integer","minimum":5,"maximum":90,"default":40,"description":"Give up after this many seconds. A timeout isn’t billed."}},{"name":"block_cookie_banners","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Accept or remove cookie and consent dialogs (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast and 50 more). Also accepted as: no_cookie_banners, hide_cookie_banners."}},{"name":"block_popups","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Remove newsletter popups, full-screen overlays and open dialogs, and unlock scrolling."}},{"name":"block_chats","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Remove chat widgets (Intercom, Drift, Crisp, Zendesk, HubSpot, Tawk and others)."}},{"name":"block_ads","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Block ad networks. Also accepted as: no_ads."}},{"name":"block_trackers","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Block analytics and tracking scripts. Also accepted as: no_tracking."}},{"name":"block_requests","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Block URLs matching these patterns, like *.example.com/widget*. Repeat the parameter or separate with commas."},"style":"form","explode":true},{"name":"block_resources","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","enum":["stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"description":"Block whole kinds of requests."},"style":"form","explode":true},{"name":"hide_selectors","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Hide elements matching these selectors. Repeat the parameter for several. Also accepted as: hide_selector."},"style":"form","explode":true},{"name":"styles","in":"query","required":false,"schema":{"type":"string","description":"CSS to add to the page before the capture. Also accepted as: css."}},{"name":"scripts","in":"query","required":false,"schema":{"type":"string","description":"JavaScript to run in the page before the capture; await works. If it throws, the call fails and isn’t billed. Also accepted as: js."}},{"name":"click","in":"query","required":false,"schema":{"type":"string","description":"Click the first element matching this selector, then wait for the page to settle."}},{"name":"dark_mode","in":"query","required":false,"schema":{"type":"boolean","description":"true or false sets prefers-color-scheme; leave it out for the site’s default."}},{"name":"reduced_motion","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Set prefers-reduced-motion: reduce."}},{"name":"media_type","in":"query","required":false,"schema":{"type":"string","enum":["screen","print"],"description":"Emulate screen or print CSS. Also accepted as: media."}},{"name":"user_agent","in":"query","required":false,"schema":{"type":"string","description":"A user agent of your own. By default a current Chrome on Windows (or Android on mobile) is reported."}},{"name":"accept_language","in":"query","required":false,"schema":{"type":"string","default":"en-US,en;q=0.9","description":"Accept-Language sent to the site. Also accepted as: accept_lang."}},{"name":"headers","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Extra request headers as “Name: value”, sent only to the page’s own site. Repeat for several. Also accepted as: header."},"style":"form","explode":true},{"name":"cookies","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Cookies as name=value, optionally with ; Domain=… ; Path=…. Repeat for several. Also accepted as: cookie."},"style":"form","explode":true},{"name":"authorization","in":"query","required":false,"schema":{"type":"string","description":"An Authorization header for the page’s own site, like Basic … or Bearer …."}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","description":"IANA time zone, like Europe/Berlin. Also accepted as: time_zone, tz."}},{"name":"latitude","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90,"description":"Geolocation latitude (with longitude). Also accepted as: geolocation_latitude."}},{"name":"longitude","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180,"description":"Geolocation longitude. Also accepted as: geolocation_longitude."}},{"name":"pdf_paper","in":"query","required":false,"schema":{"type":"string","enum":["a3","a4","a5","letter","legal","tabloid"],"default":"a4","description":"Paper size for format=pdf. Also accepted as: pdf_paper_format."}},{"name":"pdf_landscape","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Landscape pages."}},{"name":"pdf_background","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Print background colours and images. Also accepted as: pdf_print_background."}},{"name":"pdf_margin","in":"query","required":false,"schema":{"type":"string","default":"0.4in","description":"Margin on every side, in px, mm, cm or in."}},{"name":"pdf_page_ranges","in":"query","required":false,"schema":{"type":"string","description":"Only these pages, like 1-3,5."}},{"name":"fail_if_content_contains","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text contains this. Case-insensitive; repeat for several."},"style":"form","explode":true},{"name":"fail_if_content_missing","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text doesn’t contain this."},"style":"form","explode":true},{"name":"fallback","in":"query","required":false,"schema":{"type":"string","enum":["og"],"description":"og: when a site blocks automated browsers, return its own share image instead of an error."}},{"name":"allow_blocked","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Return the capture even when it shows a bot check (still not billed)."}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Keep the result for 24 hours; the same request from your account within that time is served from the cache and isn’t billed."}},{"name":"cache_ttl","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":2592000,"description":"Cache for this many seconds instead (up to 30 days). Implies cache=true; 0 turns caching off. Also accepted as: ttl."}},{"name":"cache_key","in":"query","required":false,"schema":{"type":"string","description":"Keep separate cached copies of the same request."}},{"name":"fresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Render again even when a cached copy exists. Also accepted as: force."}},{"name":"response_type","in":"query","required":false,"schema":{"type":"string","enum":["image","json","empty"],"default":"image","description":"image returns the file; json returns a file URL (kept 24 hours) with page metadata; empty returns only headers."}},{"name":"async","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Queue the render and answer at once with a job id (202). Poll /v1/jobs/{id} or add webhook_url."}},{"name":"webhook_url","in":"query","required":false,"schema":{"type":"string","description":"We POST the result here when the job finishes, signed with your key’s signing secret. Implies async. Also accepted as: webhook."}},{"name":"external_id","in":"query","required":false,"schema":{"type":"string","description":"Your own id, returned in the job and the webhook. Also accepted as: external_identifier."}}],"responses":{"200":{"description":"The screenshot (or JSON / empty, per response_type).","headers":{"X-Page-Verdict":{"description":"ok, og, blocked or blank","schema":{"type":"string"}},"X-Billed":{"description":"1 when the shot counted toward your plan","schema":{"type":"string"}},"X-Cache":{"description":"HIT or MISS","schema":{"type":"string"}},"X-Render-Ms":{"description":"Render time in milliseconds","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Shots left this period","schema":{"type":"string"}},"X-Request-Id":{"description":"Id of this render in your logs","schema":{"type":"string"}},"X-Page-Status":{"description":"HTTP status of the captured page","schema":{"type":"string"}}},"content":{"image/png":{},"image/jpeg":{},"image/webp":{},"application/pdf":{},"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"202":{"description":"Queued (async=true or webhook_url).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Queued"}}}},"400":{"description":"A parameter is missing or wrong (bad_request, url_not_allowed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Monthly quota used up.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Account off, e-mail not verified, or signature missing/wrong.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"bot_check, blank_page, selector_not_found, script_error or content_check_failed. Never billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited or concurrency_limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"The page could not be rendered. Not billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"timeout. Not billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"takeScreenshotPost","summary":"Capture a URL or HTML (JSON body)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The page to capture. https:// is added when missing. Private and internal addresses are refused, including through redirects."},"html":{"type":"string","description":"Raw HTML to render instead of a URL (POST it in a JSON body). Good for Open Graph images and templates. Up to 2 MB."},"format":{"type":"string","enum":["png","jpeg","webp","pdf"],"default":"png","description":"Output format. jpg is accepted for jpeg."},"quality":{"type":"integer","minimum":1,"maximum":100,"default":80,"description":"JPEG and WebP quality. Also accepted as: image_quality."},"image_width":{"type":"integer","minimum":16,"maximum":3840,"description":"Resize the result to this width (thumbnails). With image_height too, the result is cropped to fill both. Also accepted as: thumb_width, thumbnail_width."},"image_height":{"type":"integer","minimum":16,"maximum":4320,"description":"Resize the result to this height. Also accepted as: thumb_height."},"omit_background":{"type":"boolean","default":false,"description":"Transparent background (PNG and WebP) where the page sets none. Also accepted as: transparent."},"attachment_name":{"type":"string","description":"Send the file as a download with this name. Also accepted as: download."},"device":{"type":"string","enum":["desktop","laptop","full_hd","macbook_air","tablet","ipad_air","ipad_pro","mobile","iphone_15","iphone_15_pro_max","pixel_8","galaxy_s24"],"description":"A preset that sets width, height, pixel ratio, mobile mode and touch in one go. Also accepted as: viewport_device."},"width":{"type":"integer","minimum":320,"maximum":3840,"default":1280,"description":"Browser width in CSS pixels. Also accepted as: viewport_width."},"height":{"type":"integer","minimum":240,"maximum":4320,"default":800,"description":"Browser height in CSS pixels. Also accepted as: viewport_height."},"scale":{"type":"number","minimum":1,"maximum":3,"default":1,"description":"Device pixel ratio. 2 gives a Retina image twice the size. Also accepted as: device_scale_factor."},"mobile":{"type":"boolean","default":false,"description":"Mobile mode: the page’s meta viewport applies and a mobile browser is reported. Also accepted as: viewport_mobile."},"touch":{"type":"boolean","default":false,"description":"Report a touch screen. Also accepted as: viewport_has_touch."},"landscape":{"type":"boolean","default":false,"description":"Swap width and height. Also accepted as: viewport_landscape."},"full_page":{"type":"boolean","default":false,"description":"Capture the whole scrollable page, not just the first screen."},"full_page_scroll":{"type":"boolean","description":"Scroll down first so lazy images and sections load."},"full_page_max_height":{"type":"integer","minimum":500,"maximum":16000,"default":16000,"description":"Stop a full-page capture at this height (useful for endless feeds). Also accepted as: max_height."},"selector":{"type":"string","description":"Capture only the first element matching this CSS selector."},"clip":{"type":"string","description":"Capture a rectangle: x,y,width,height in CSS pixels. clip_x, clip_y, clip_width and clip_height work too."},"wait_until":{"type":"string","enum":["auto","load","domcontentloaded","networkidle0","networkidle2"],"default":"auto","description":"When the page counts as loaded. auto = the load event plus up to 3 seconds for the network to settle."},"wait_for_selector":{"type":"string","description":"Wait until an element matching this selector exists (up to 20 seconds). If it never appears, the call fails and isn’t billed. Also accepted as: wait_for."},"delay":{"type":"number","minimum":0,"maximum":20,"default":0,"description":"Extra seconds to wait before the capture."},"timeout":{"type":"integer","minimum":5,"maximum":90,"default":40,"description":"Give up after this many seconds. A timeout isn’t billed."},"block_cookie_banners":{"type":"boolean","default":true,"description":"Accept or remove cookie and consent dialogs (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast and 50 more). Also accepted as: no_cookie_banners, hide_cookie_banners."},"block_popups":{"type":"boolean","default":true,"description":"Remove newsletter popups, full-screen overlays and open dialogs, and unlock scrolling."},"block_chats":{"type":"boolean","default":true,"description":"Remove chat widgets (Intercom, Drift, Crisp, Zendesk, HubSpot, Tawk and others)."},"block_ads":{"type":"boolean","default":true,"description":"Block ad networks. Also accepted as: no_ads."},"block_trackers":{"type":"boolean","default":true,"description":"Block analytics and tracking scripts. Also accepted as: no_tracking."},"block_requests":{"type":"array","items":{"type":"string"},"description":"Block URLs matching these patterns, like *.example.com/widget*. Repeat the parameter or separate with commas."},"block_resources":{"type":"array","items":{"type":"string","enum":["stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"description":"Block whole kinds of requests."},"hide_selectors":{"type":"array","items":{"type":"string"},"description":"Hide elements matching these selectors. Repeat the parameter for several. Also accepted as: hide_selector."},"styles":{"type":"string","description":"CSS to add to the page before the capture. Also accepted as: css."},"scripts":{"type":"string","description":"JavaScript to run in the page before the capture; await works. If it throws, the call fails and isn’t billed. Also accepted as: js."},"click":{"type":"string","description":"Click the first element matching this selector, then wait for the page to settle."},"dark_mode":{"type":"boolean","description":"true or false sets prefers-color-scheme; leave it out for the site’s default."},"reduced_motion":{"type":"boolean","default":false,"description":"Set prefers-reduced-motion: reduce."},"media_type":{"type":"string","enum":["screen","print"],"description":"Emulate screen or print CSS. Also accepted as: media."},"user_agent":{"type":"string","description":"A user agent of your own. By default a current Chrome on Windows (or Android on mobile) is reported."},"accept_language":{"type":"string","default":"en-US,en;q=0.9","description":"Accept-Language sent to the site. Also accepted as: accept_lang."},"headers":{"type":"array","items":{"type":"string"},"description":"Extra request headers as “Name: value”, sent only to the page’s own site. Repeat for several. Also accepted as: header."},"cookies":{"type":"array","items":{"type":"string"},"description":"Cookies as name=value, optionally with ; Domain=… ; Path=…. Repeat for several. Also accepted as: cookie."},"authorization":{"type":"string","description":"An Authorization header for the page’s own site, like Basic … or Bearer …."},"timezone":{"type":"string","description":"IANA time zone, like Europe/Berlin. Also accepted as: time_zone, tz."},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Geolocation latitude (with longitude). Also accepted as: geolocation_latitude."},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Geolocation longitude. Also accepted as: geolocation_longitude."},"pdf_paper":{"type":"string","enum":["a3","a4","a5","letter","legal","tabloid"],"default":"a4","description":"Paper size for format=pdf. Also accepted as: pdf_paper_format."},"pdf_landscape":{"type":"boolean","default":false,"description":"Landscape pages."},"pdf_background":{"type":"boolean","default":true,"description":"Print background colours and images. Also accepted as: pdf_print_background."},"pdf_margin":{"type":"string","default":"0.4in","description":"Margin on every side, in px, mm, cm or in."},"pdf_page_ranges":{"type":"string","description":"Only these pages, like 1-3,5."},"fail_if_content_contains":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text contains this. Case-insensitive; repeat for several."},"fail_if_content_missing":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text doesn’t contain this."},"fallback":{"type":"string","enum":["og"],"description":"og: when a site blocks automated browsers, return its own share image instead of an error."},"allow_blocked":{"type":"boolean","default":false,"description":"Return the capture even when it shows a bot check (still not billed)."},"cache":{"type":"boolean","default":false,"description":"Keep the result for 24 hours; the same request from your account within that time is served from the cache and isn’t billed."},"cache_ttl":{"type":"integer","minimum":0,"maximum":2592000,"description":"Cache for this many seconds instead (up to 30 days). Implies cache=true; 0 turns caching off. Also accepted as: ttl."},"cache_key":{"type":"string","description":"Keep separate cached copies of the same request."},"fresh":{"type":"boolean","default":false,"description":"Render again even when a cached copy exists. Also accepted as: force."},"response_type":{"type":"string","enum":["image","json","empty"],"default":"image","description":"image returns the file; json returns a file URL (kept 24 hours) with page metadata; empty returns only headers."},"async":{"type":"boolean","default":false,"description":"Queue the render and answer at once with a job id (202). Poll /v1/jobs/{id} or add webhook_url."},"webhook_url":{"type":"string","description":"We POST the result here when the job finishes, signed with your key’s signing secret. Implies async. Also accepted as: webhook."},"external_id":{"type":"string","description":"Your own id, returned in the job and the webhook. Also accepted as: external_identifier."}},"additionalProperties":true}}}},"responses":{"200":{"description":"The screenshot (or JSON / empty, per response_type).","headers":{"X-Page-Verdict":{"description":"ok, og, blocked or blank","schema":{"type":"string"}},"X-Billed":{"description":"1 when the shot counted toward your plan","schema":{"type":"string"}},"X-Cache":{"description":"HIT or MISS","schema":{"type":"string"}},"X-Render-Ms":{"description":"Render time in milliseconds","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Shots left this period","schema":{"type":"string"}},"X-Request-Id":{"description":"Id of this render in your logs","schema":{"type":"string"}},"X-Page-Status":{"description":"HTTP status of the captured page","schema":{"type":"string"}}},"content":{"image/png":{},"image/jpeg":{},"image/webp":{},"application/pdf":{},"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"202":{"description":"Queued (async=true or webhook_url).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Queued"}}}},"400":{"description":"A parameter is missing or wrong (bad_request, url_not_allowed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Monthly quota used up.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Account off, e-mail not verified, or signature missing/wrong.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"bot_check, blank_page, selector_not_found, script_error or content_check_failed. Never billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited or concurrency_limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"The page could not be rendered. Not billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"timeout. Not billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/jobs/{id}":{"get":{"operationId":"getJob","summary":"State and result of an async job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"description":"No such job on this account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/bulk":{"post":{"operationId":"createBulk","summary":"Queue up to 100 captures","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["requests"],"properties":{"requests":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"url":{"type":"string","description":"The page to capture. https:// is added when missing. Private and internal addresses are refused, including through redirects."},"html":{"type":"string","description":"Raw HTML to render instead of a URL (POST it in a JSON body). Good for Open Graph images and templates. Up to 2 MB."},"format":{"type":"string","enum":["png","jpeg","webp","pdf"],"default":"png","description":"Output format. jpg is accepted for jpeg."},"quality":{"type":"integer","minimum":1,"maximum":100,"default":80,"description":"JPEG and WebP quality. Also accepted as: image_quality."},"image_width":{"type":"integer","minimum":16,"maximum":3840,"description":"Resize the result to this width (thumbnails). With image_height too, the result is cropped to fill both. Also accepted as: thumb_width, thumbnail_width."},"image_height":{"type":"integer","minimum":16,"maximum":4320,"description":"Resize the result to this height. Also accepted as: thumb_height."},"omit_background":{"type":"boolean","default":false,"description":"Transparent background (PNG and WebP) where the page sets none. Also accepted as: transparent."},"attachment_name":{"type":"string","description":"Send the file as a download with this name. Also accepted as: download."},"device":{"type":"string","enum":["desktop","laptop","full_hd","macbook_air","tablet","ipad_air","ipad_pro","mobile","iphone_15","iphone_15_pro_max","pixel_8","galaxy_s24"],"description":"A preset that sets width, height, pixel ratio, mobile mode and touch in one go. Also accepted as: viewport_device."},"width":{"type":"integer","minimum":320,"maximum":3840,"default":1280,"description":"Browser width in CSS pixels. Also accepted as: viewport_width."},"height":{"type":"integer","minimum":240,"maximum":4320,"default":800,"description":"Browser height in CSS pixels. Also accepted as: viewport_height."},"scale":{"type":"number","minimum":1,"maximum":3,"default":1,"description":"Device pixel ratio. 2 gives a Retina image twice the size. Also accepted as: device_scale_factor."},"mobile":{"type":"boolean","default":false,"description":"Mobile mode: the page’s meta viewport applies and a mobile browser is reported. Also accepted as: viewport_mobile."},"touch":{"type":"boolean","default":false,"description":"Report a touch screen. Also accepted as: viewport_has_touch."},"landscape":{"type":"boolean","default":false,"description":"Swap width and height. Also accepted as: viewport_landscape."},"full_page":{"type":"boolean","default":false,"description":"Capture the whole scrollable page, not just the first screen."},"full_page_scroll":{"type":"boolean","description":"Scroll down first so lazy images and sections load."},"full_page_max_height":{"type":"integer","minimum":500,"maximum":16000,"default":16000,"description":"Stop a full-page capture at this height (useful for endless feeds). Also accepted as: max_height."},"selector":{"type":"string","description":"Capture only the first element matching this CSS selector."},"clip":{"type":"string","description":"Capture a rectangle: x,y,width,height in CSS pixels. clip_x, clip_y, clip_width and clip_height work too."},"wait_until":{"type":"string","enum":["auto","load","domcontentloaded","networkidle0","networkidle2"],"default":"auto","description":"When the page counts as loaded. auto = the load event plus up to 3 seconds for the network to settle."},"wait_for_selector":{"type":"string","description":"Wait until an element matching this selector exists (up to 20 seconds). If it never appears, the call fails and isn’t billed. Also accepted as: wait_for."},"delay":{"type":"number","minimum":0,"maximum":20,"default":0,"description":"Extra seconds to wait before the capture."},"timeout":{"type":"integer","minimum":5,"maximum":90,"default":40,"description":"Give up after this many seconds. A timeout isn’t billed."},"block_cookie_banners":{"type":"boolean","default":true,"description":"Accept or remove cookie and consent dialogs (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast and 50 more). Also accepted as: no_cookie_banners, hide_cookie_banners."},"block_popups":{"type":"boolean","default":true,"description":"Remove newsletter popups, full-screen overlays and open dialogs, and unlock scrolling."},"block_chats":{"type":"boolean","default":true,"description":"Remove chat widgets (Intercom, Drift, Crisp, Zendesk, HubSpot, Tawk and others)."},"block_ads":{"type":"boolean","default":true,"description":"Block ad networks. Also accepted as: no_ads."},"block_trackers":{"type":"boolean","default":true,"description":"Block analytics and tracking scripts. Also accepted as: no_tracking."},"block_requests":{"type":"array","items":{"type":"string"},"description":"Block URLs matching these patterns, like *.example.com/widget*. Repeat the parameter or separate with commas."},"block_resources":{"type":"array","items":{"type":"string","enum":["stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"description":"Block whole kinds of requests."},"hide_selectors":{"type":"array","items":{"type":"string"},"description":"Hide elements matching these selectors. Repeat the parameter for several. Also accepted as: hide_selector."},"styles":{"type":"string","description":"CSS to add to the page before the capture. Also accepted as: css."},"scripts":{"type":"string","description":"JavaScript to run in the page before the capture; await works. If it throws, the call fails and isn’t billed. Also accepted as: js."},"click":{"type":"string","description":"Click the first element matching this selector, then wait for the page to settle."},"dark_mode":{"type":"boolean","description":"true or false sets prefers-color-scheme; leave it out for the site’s default."},"reduced_motion":{"type":"boolean","default":false,"description":"Set prefers-reduced-motion: reduce."},"media_type":{"type":"string","enum":["screen","print"],"description":"Emulate screen or print CSS. Also accepted as: media."},"user_agent":{"type":"string","description":"A user agent of your own. By default a current Chrome on Windows (or Android on mobile) is reported."},"accept_language":{"type":"string","default":"en-US,en;q=0.9","description":"Accept-Language sent to the site. Also accepted as: accept_lang."},"headers":{"type":"array","items":{"type":"string"},"description":"Extra request headers as “Name: value”, sent only to the page’s own site. Repeat for several. Also accepted as: header."},"cookies":{"type":"array","items":{"type":"string"},"description":"Cookies as name=value, optionally with ; Domain=… ; Path=…. Repeat for several. Also accepted as: cookie."},"authorization":{"type":"string","description":"An Authorization header for the page’s own site, like Basic … or Bearer …."},"timezone":{"type":"string","description":"IANA time zone, like Europe/Berlin. Also accepted as: time_zone, tz."},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Geolocation latitude (with longitude). Also accepted as: geolocation_latitude."},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Geolocation longitude. Also accepted as: geolocation_longitude."},"pdf_paper":{"type":"string","enum":["a3","a4","a5","letter","legal","tabloid"],"default":"a4","description":"Paper size for format=pdf. Also accepted as: pdf_paper_format."},"pdf_landscape":{"type":"boolean","default":false,"description":"Landscape pages."},"pdf_background":{"type":"boolean","default":true,"description":"Print background colours and images. Also accepted as: pdf_print_background."},"pdf_margin":{"type":"string","default":"0.4in","description":"Margin on every side, in px, mm, cm or in."},"pdf_page_ranges":{"type":"string","description":"Only these pages, like 1-3,5."},"fail_if_content_contains":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text contains this. Case-insensitive; repeat for several."},"fail_if_content_missing":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text doesn’t contain this."},"fallback":{"type":"string","enum":["og"],"description":"og: when a site blocks automated browsers, return its own share image instead of an error."},"allow_blocked":{"type":"boolean","default":false,"description":"Return the capture even when it shows a bot check (still not billed)."},"cache":{"type":"boolean","default":false,"description":"Keep the result for 24 hours; the same request from your account within that time is served from the cache and isn’t billed."},"cache_ttl":{"type":"integer","minimum":0,"maximum":2592000,"description":"Cache for this many seconds instead (up to 30 days). Implies cache=true; 0 turns caching off. Also accepted as: ttl."},"cache_key":{"type":"string","description":"Keep separate cached copies of the same request."},"fresh":{"type":"boolean","default":false,"description":"Render again even when a cached copy exists. Also accepted as: force."},"response_type":{"type":"string","enum":["image","json","empty"],"default":"image","description":"image returns the file; json returns a file URL (kept 24 hours) with page metadata; empty returns only headers."},"async":{"type":"boolean","default":false,"description":"Queue the render and answer at once with a job id (202). Poll /v1/jobs/{id} or add webhook_url."},"webhook_url":{"type":"string","description":"We POST the result here when the job finishes, signed with your key’s signing secret. Implies async. Also accepted as: webhook."},"external_id":{"type":"string","description":"Your own id, returned in the job and the webhook. Also accepted as: external_identifier."}},"additionalProperties":true}},"defaults":{"type":"object","properties":{"url":{"type":"string","description":"The page to capture. https:// is added when missing. Private and internal addresses are refused, including through redirects."},"html":{"type":"string","description":"Raw HTML to render instead of a URL (POST it in a JSON body). Good for Open Graph images and templates. Up to 2 MB."},"format":{"type":"string","enum":["png","jpeg","webp","pdf"],"default":"png","description":"Output format. jpg is accepted for jpeg."},"quality":{"type":"integer","minimum":1,"maximum":100,"default":80,"description":"JPEG and WebP quality. Also accepted as: image_quality."},"image_width":{"type":"integer","minimum":16,"maximum":3840,"description":"Resize the result to this width (thumbnails). With image_height too, the result is cropped to fill both. Also accepted as: thumb_width, thumbnail_width."},"image_height":{"type":"integer","minimum":16,"maximum":4320,"description":"Resize the result to this height. Also accepted as: thumb_height."},"omit_background":{"type":"boolean","default":false,"description":"Transparent background (PNG and WebP) where the page sets none. Also accepted as: transparent."},"attachment_name":{"type":"string","description":"Send the file as a download with this name. Also accepted as: download."},"device":{"type":"string","enum":["desktop","laptop","full_hd","macbook_air","tablet","ipad_air","ipad_pro","mobile","iphone_15","iphone_15_pro_max","pixel_8","galaxy_s24"],"description":"A preset that sets width, height, pixel ratio, mobile mode and touch in one go. Also accepted as: viewport_device."},"width":{"type":"integer","minimum":320,"maximum":3840,"default":1280,"description":"Browser width in CSS pixels. Also accepted as: viewport_width."},"height":{"type":"integer","minimum":240,"maximum":4320,"default":800,"description":"Browser height in CSS pixels. Also accepted as: viewport_height."},"scale":{"type":"number","minimum":1,"maximum":3,"default":1,"description":"Device pixel ratio. 2 gives a Retina image twice the size. Also accepted as: device_scale_factor."},"mobile":{"type":"boolean","default":false,"description":"Mobile mode: the page’s meta viewport applies and a mobile browser is reported. Also accepted as: viewport_mobile."},"touch":{"type":"boolean","default":false,"description":"Report a touch screen. Also accepted as: viewport_has_touch."},"landscape":{"type":"boolean","default":false,"description":"Swap width and height. Also accepted as: viewport_landscape."},"full_page":{"type":"boolean","default":false,"description":"Capture the whole scrollable page, not just the first screen."},"full_page_scroll":{"type":"boolean","description":"Scroll down first so lazy images and sections load."},"full_page_max_height":{"type":"integer","minimum":500,"maximum":16000,"default":16000,"description":"Stop a full-page capture at this height (useful for endless feeds). Also accepted as: max_height."},"selector":{"type":"string","description":"Capture only the first element matching this CSS selector."},"clip":{"type":"string","description":"Capture a rectangle: x,y,width,height in CSS pixels. clip_x, clip_y, clip_width and clip_height work too."},"wait_until":{"type":"string","enum":["auto","load","domcontentloaded","networkidle0","networkidle2"],"default":"auto","description":"When the page counts as loaded. auto = the load event plus up to 3 seconds for the network to settle."},"wait_for_selector":{"type":"string","description":"Wait until an element matching this selector exists (up to 20 seconds). If it never appears, the call fails and isn’t billed. Also accepted as: wait_for."},"delay":{"type":"number","minimum":0,"maximum":20,"default":0,"description":"Extra seconds to wait before the capture."},"timeout":{"type":"integer","minimum":5,"maximum":90,"default":40,"description":"Give up after this many seconds. A timeout isn’t billed."},"block_cookie_banners":{"type":"boolean","default":true,"description":"Accept or remove cookie and consent dialogs (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast and 50 more). Also accepted as: no_cookie_banners, hide_cookie_banners."},"block_popups":{"type":"boolean","default":true,"description":"Remove newsletter popups, full-screen overlays and open dialogs, and unlock scrolling."},"block_chats":{"type":"boolean","default":true,"description":"Remove chat widgets (Intercom, Drift, Crisp, Zendesk, HubSpot, Tawk and others)."},"block_ads":{"type":"boolean","default":true,"description":"Block ad networks. Also accepted as: no_ads."},"block_trackers":{"type":"boolean","default":true,"description":"Block analytics and tracking scripts. Also accepted as: no_tracking."},"block_requests":{"type":"array","items":{"type":"string"},"description":"Block URLs matching these patterns, like *.example.com/widget*. Repeat the parameter or separate with commas."},"block_resources":{"type":"array","items":{"type":"string","enum":["stylesheet","image","media","font","script","texttrack","xhr","fetch","eventsource","websocket","manifest","other"]},"description":"Block whole kinds of requests."},"hide_selectors":{"type":"array","items":{"type":"string"},"description":"Hide elements matching these selectors. Repeat the parameter for several. Also accepted as: hide_selector."},"styles":{"type":"string","description":"CSS to add to the page before the capture. Also accepted as: css."},"scripts":{"type":"string","description":"JavaScript to run in the page before the capture; await works. If it throws, the call fails and isn’t billed. Also accepted as: js."},"click":{"type":"string","description":"Click the first element matching this selector, then wait for the page to settle."},"dark_mode":{"type":"boolean","description":"true or false sets prefers-color-scheme; leave it out for the site’s default."},"reduced_motion":{"type":"boolean","default":false,"description":"Set prefers-reduced-motion: reduce."},"media_type":{"type":"string","enum":["screen","print"],"description":"Emulate screen or print CSS. Also accepted as: media."},"user_agent":{"type":"string","description":"A user agent of your own. By default a current Chrome on Windows (or Android on mobile) is reported."},"accept_language":{"type":"string","default":"en-US,en;q=0.9","description":"Accept-Language sent to the site. Also accepted as: accept_lang."},"headers":{"type":"array","items":{"type":"string"},"description":"Extra request headers as “Name: value”, sent only to the page’s own site. Repeat for several. Also accepted as: header."},"cookies":{"type":"array","items":{"type":"string"},"description":"Cookies as name=value, optionally with ; Domain=… ; Path=…. Repeat for several. Also accepted as: cookie."},"authorization":{"type":"string","description":"An Authorization header for the page’s own site, like Basic … or Bearer …."},"timezone":{"type":"string","description":"IANA time zone, like Europe/Berlin. Also accepted as: time_zone, tz."},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Geolocation latitude (with longitude). Also accepted as: geolocation_latitude."},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Geolocation longitude. Also accepted as: geolocation_longitude."},"pdf_paper":{"type":"string","enum":["a3","a4","a5","letter","legal","tabloid"],"default":"a4","description":"Paper size for format=pdf. Also accepted as: pdf_paper_format."},"pdf_landscape":{"type":"boolean","default":false,"description":"Landscape pages."},"pdf_background":{"type":"boolean","default":true,"description":"Print background colours and images. Also accepted as: pdf_print_background."},"pdf_margin":{"type":"string","default":"0.4in","description":"Margin on every side, in px, mm, cm or in."},"pdf_page_ranges":{"type":"string","description":"Only these pages, like 1-3,5."},"fail_if_content_contains":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text contains this. Case-insensitive; repeat for several."},"fail_if_content_missing":{"type":"array","items":{"type":"string"},"description":"Fail (not billed) if the page text doesn’t contain this."},"fallback":{"type":"string","enum":["og"],"description":"og: when a site blocks automated browsers, return its own share image instead of an error."},"allow_blocked":{"type":"boolean","default":false,"description":"Return the capture even when it shows a bot check (still not billed)."},"cache":{"type":"boolean","default":false,"description":"Keep the result for 24 hours; the same request from your account within that time is served from the cache and isn’t billed."},"cache_ttl":{"type":"integer","minimum":0,"maximum":2592000,"description":"Cache for this many seconds instead (up to 30 days). Implies cache=true; 0 turns caching off. Also accepted as: ttl."},"cache_key":{"type":"string","description":"Keep separate cached copies of the same request."},"fresh":{"type":"boolean","default":false,"description":"Render again even when a cached copy exists. Also accepted as: force."},"response_type":{"type":"string","enum":["image","json","empty"],"default":"image","description":"image returns the file; json returns a file URL (kept 24 hours) with page metadata; empty returns only headers."},"async":{"type":"boolean","default":false,"description":"Queue the render and answer at once with a job id (202). Poll /v1/jobs/{id} or add webhook_url."},"webhook_url":{"type":"string","description":"We POST the result here when the job finishes, signed with your key’s signing secret. Implies async. Also accepted as: webhook."},"external_id":{"type":"string","description":"Your own id, returned in the job and the webhook. Also accepted as: external_identifier."}},"additionalProperties":true},"webhook_url":{"type":"string"}}}}}},"responses":{"202":{"description":"Queued batch"},"400":{"description":"Bad batch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/bulk/{id}":{"get":{"operationId":"getBulk","summary":"Progress of a batch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Batch with its jobs"}}}},"/v1/usage":{"get":{"operationId":"getUsage","summary":"Plan, quota and use this period","responses":{"200":{"description":"Usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}}}}},"/v1/files/{name}":{"get":{"operationId":"getFile","summary":"A stored result (from JSON or async responses)","security":[],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The file"},"404":{"description":"Expired or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"accessKey":{"type":"apiKey","in":"query","name":"access_key"},"bearer":{"type":"http","scheme":"bearer"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"billed":{"type":"boolean"}},"required":["error"]},"Result":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["done","failed"]},"verdict":{"type":"string"},"billed":{"type":"boolean"},"cached":{"type":"boolean"},"render_ms":{"type":"integer"},"url":{"type":"string"},"image":{"type":"object","properties":{"url":{"type":"string"},"format":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"bytes":{"type":"integer"},"expires_at":{"type":"string"}}},"metadata":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"language":{"type":"string"},"canonical":{"type":"string"},"favicon":{"type":"string"},"final_url":{"type":"string"},"status":{"type":"integer"},"og":{"type":"object"}}}}},"Queued":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"status_url":{"type":"string"}}},"Job":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","done","failed"]},"result":{"$ref":"#/components/schemas/Result"}}},"Usage":{"type":"object","properties":{"plan":{"type":"string"},"quota":{"type":"integer"},"used":{"type":"integer"},"remaining":{"type":"integer"},"requests_per_minute":{"type":"integer"},"period_start":{"type":"string"},"period_end":{"type":"string"}}}}}}