Loading
Loading
Capture screenshots of up to 50 URLs in a single POST request. Each URL can have its own screenshot settings - format, dimensions, CSS/JS injection, ad blocking, and more. Returns individual screenshot URLs per submitted URL.
Send a JSON body with a urls array. Each item in the array is an object containing a url and any optional screenshot parameters (same options as the single Screenshot API). The API key is passed via the X-apiKey header.
Authorize every request with your API key, passed either as a header or as a query parameter:
X-apiKeyapiKeyThis is version v1.0 of the API.
Optional query parameters that control the bulk API response format.
formatoptionalStringdefault: jsonjson (default) or xml.The request body is a JSON object with a urls array. Each item requires a url field and supports all optional parameters from the single Website Screenshot API - file type, dimensions, dark mode, ad blocking, custom CSS/JS, and more. View all supported parameters
{
"urls": [
{
"url": "https://whoisfreaks.com/",
"file_type": "gif",
"width": 3840,
"height": 2160,
"fresh": true,
"image_quality": 100,
"scrolling_screenshot": true,
"duration": 10
}
]
}Each object in the urls array accepts the following parameters. Only url is required - all others are optional.
formatoptionalStringdefault: jsonjson.urlrequiredStringURL of the website to be rendered as a screenshot or other format.
file_typeoptionalStringdefault: PNGOutput format. PNG (lossless, transparency), JPEG (compressed, smaller size), WebP (modern, efficient), PDF (document). For scrolling captures: MP4, GIF, WebM.
omit_backgroundoptionalBooleandefault: falseReplaces simple white/plain backgrounds with transparency for a cut-out effect. Only works with PNG output.
destroy_screenshotoptionalBooleandefault: falseIf true, screenshot/PDF is not stored on server and must be downloaded immediately.
fail_on_erroroptionalBooleandefault: falseIf true, returns an error when the target page responds with 4xx or 5xx status.
longitudeoptionalFloatSpecify longitude for the browser Geolocation API. Provide a numeric value. Default: null (not set).
latitudeoptionalFloatSpecify latitude for the browser Geolocation API. Provide a numeric value. Default: null (not set).
proxyoptionalStringAllows defining a proxy for the connection. Provide a JSON string with keys: server (include port number), username, and password.
no_cookie_bannersoptionalBooleandefault: falseHides or blocks cookie consent banners and popups before capture.
block_adsoptionalBooleandefault: falseBlocks requests to known ad networks for cleaner, distraction-free screenshots.
headersoptionalStringCustom HTTP headers to include as key=value pairs. Use a semicolon to separate multiple headers (e.g., key1=value1;key2=value2).
cookiesoptionalStringdefault: Cookies to include in the request before rendering. Supports single or multiple cookies. Example: cookie=value; otherCookie=otherValue;.
scroll_to_elementoptionalStringdefault: Scrolls the page to bring the specified CSS selector into view before capture. Ideal for below-the-fold content. Default: empty.
selectoroptionalStringdefault: CSS selector to capture a specific element. Only that element is rendered. Falls back to full page if not found. Default: empty.
selector_to_clickoptionalStringdefault: CSS selector for an element to click before capturing the screenshot. Useful for opening dropdowns, modals, or triggering content.
click_recursionoptionalIntegerdefault: 1Number of times to click the selector (when set via selector_to_click).
blur_selectoroptionalStringdefault: CSS selectors to blur before capture. Masks sensitive data like emails, payments, or personal info. Multiple selectors supported. Default: empty.
remove_selectoroptionalStringdefault: CSS selectors to remove before capture. Deletes matched elements from DOM. Ideal for cleaning ads, popups, sidebars. Multiple selectors supported. Default: empty.
cssoptionalStringdefault: Allows injecting custom CSS code into the page before rendering. Pass the CSS code directly as a string.
css_urloptionalStringdefault: Allows loading external CSS into the page. Provide a URL pointing to the CSS file.
jsoptionalStringdefault: Allows injecting custom JavaScript code into the page before rendering. Pass the JavaScript code directly as a string.
js_urloptionalStringdefault: Allows loading external JavaScript into the page. Provide a URL pointing to the script file.
ttloptionalIntegerdefault: 2592000Time in seconds the render stays cached before auto-invalidation. Use higher values for static pages, lower for dynamic content. Default: 2592000 (30 days).
user_agentoptionalStringdefault: Custom User-Agent string sent in the request headers.
accept_languagesoptionalStringdefault: en-US,en;q=0.8Sets the accepted languages for the HTTP request. This is sent as the Accept-Language header.
delayoptionalIntegerdefault: 0Wait period in milliseconds before capture. Allows animations, API responses, and dynamic elements to finish rendering.
thumbnail_widthoptionalIntegerSpecifies the width of the thumbnail in pixels. Default value is 0 (meaning no specific value is set, and the screenshot is returned at its original resolution).
outputoptionalStringdefault: jsonSet the output format. json returns metadata with a hosted file URL. image streams the raw file bytes directly.
freshoptionalBooleandefault: trueIf true, bypasses cache and captures a fresh render. If false, returns cached version when available.
enable_cachingoptionalBooleandefault: falseStores the render in cache for reuse on subsequent identical requests.
lazy_loadoptionalBooleandefault: falseAutomatically scrolls the page to trigger lazy-loaded images and components. Ensures complete content capture.
scroll_delayoptionalIntegerdefault: 500Delay in milliseconds between scroll steps when lazy_load is enabled. Use higher values for heavy pages.
full_pageoptionalBooleandefault: falseCaptures the entire webpage from top to bottom, including scrollable content outside the viewport. Ideal for long-form pages.
retinaoptionalBooleandefault: falseCaptures at 2x resolution for sharper, high-DPI output. Increases file size.
heightoptionalIntegerdefault: 867Viewport height in pixels. Controls how much vertical area is visible. Max: 4320.
widthoptionalIntegerdefault: 1680Viewport width in pixels. Simulates device screen sizes. Max: 7680.
custom_htmloptionalStringdefault: Custom HTML to render instead of loading a URL. Overrides the url option. Use for capturing specific HTML structures or dynamic content.
block_chat_widgetsoptionalBooleandefault: falseBlocks live chat popups, support bubbles, and messaging interfaces.
block_jsoptionalBooleandefault: falseDisables all JavaScript execution. Renders a static version of the page. Speeds up capture but may break dynamic content.
block_stylesheetsoptionalBooleandefault: falseBlocks all stylesheets - page renders as raw HTML without visual formatting.
block_imagesoptionalBooleandefault: falseBlocks all image resources (jpg, png, gif, webp, svg, etc.) for faster rendering.
block_mediaoptionalBooleandefault: falseBlocks audio and video resources (mp3, mp4, webm, etc.) from loading.
block_fontoptionalBooleandefault: falseBlocks external font files - page falls back to system defaults. Supported: woff, woff2, ttf, otf, eot.
block_text_trackoptionalBooleandefault: falseBlocks subtitles and caption overlays from loading.
block_xhroptionalBooleandefault: falseBlocks all XMLHttpRequest (AJAX) calls - prevents dynamic API-driven content.
block_fetchoptionalBooleandefault: falseBlocks all Fetch API requests - stops async data loading.
block_event_sourceoptionalBooleandefault: falseBlocks EventSource (SSE) connections - prevents real-time data streams.
block_web_socketoptionalBooleandefault: falseBlocks WebSocket connections - prevents real-time bidirectional communication.
block_manifestoptionalBooleandefault: falseBlocks manifest files (.json, .webmanifest) - disables PWA-related functionality.
block_specific_requestsoptionalStringdefault: Fine-grained blocking of specific URLs or patterns. Separate multiple rules by comma, space, or newline. Default: empty.
adjust_topoptionalIntegerdefault: 0Initial vertical scroll position in pixels before capture. Use to position mid-page content in viewport. Not supported for PDF.
image_qualityoptionalIntegerdefault: 80Compression level for JPEG output (0-100). Lower = smaller file, higher = better quality. Only applies to JPEG.
extract_htmloptionalBooleandefault: falseReturns rendered HTML as a .html file (includes JS-executed DOM). Only available with output=json.
extract_markdownoptionalBooleandefault: falseExtracts rendered page content as a structured .md (Markdown) file. Preserves headings, lists, links. Only with output=json.
get_image_urlsoptionalBooleandefault: falseExtracts all image URLs from the rendered DOM and returns them in structured format. Only with output=json.
extract_textoptionalBooleandefault: falseStrips all HTML and returns visible text as a .txt file. Ideal for text analysis, indexing, or AI pipelines. Only with output=json.
dark_modeoptionalBooleandefault: falseWhen set to true, websites that support prefers-color-scheme: dark will render in dark mode.
block_trackingoptionalBooleandefault: falseBlocks tracking scripts and analytics services for cleaner, privacy-oriented renders.
wait_for_eventoptionalStringdefault: loadControls when rendering starts based on page load lifecycle. load (all resources), domcontentloaded (HTML parsed), networkidle (no network activity for 500ms).
grayscaleoptionalIntegerdefault: 0Applies a grayscale filter to the screenshot. Requires a value from 0 (no effect) to 100 (fully grayscale).
clip[x]optionalIntegerX coordinate (in pixels) for the top-left corner of the clip area. Default: null.
clip[y]optionalIntegerY coordinate (in pixels) for the top-left corner of the clip area. Default: null.
clip[width]optionalIntegerWidth of the clip area in pixels. Default: null.
clip[height]optionalIntegerHeight of the clip area in pixels. Default: null.
result_file_nameoptionalStringdefault: Custom name for the output file. Helps with organized storage and retrieval. Note: non-unique names may overwrite existing files.
enable_incognitooptionalBooleandefault: falseEnables private/incognito browsing. Each render starts with a clean slate - no cookies, cache, or session data persisted.
timeoutoptionalIntegerdefault: 100000Maximum wait in milliseconds for page load before aborting. Adjust for slow/heavy pages. Default: 100000 (100s).
Use these additional parameters when capturing scrolling screenshots as a video. Set scrolling_screenshot=true on any URL in the batch to enable scrolling capture mode.
Scrolling captures can be exported in multiple video formats. Use the file_type parameter to choose the output format:webm, mp4, or gif.
Example:scrolling_screenshot=true&file_type=mp4will generate an MP4 video of the page being automatically scrolled from top to bottom.
scrolling_screenshotoptionalBooleandefault: falseEnables scrolling screenshot mode to capture a video (webm, gif, mp4) of the webpage.
file_typeoptionalStringdefault: MP4Output format for scrolling capture. Possible values:
WEBMWeb-optimizedMP4Widely compatible (default)GIFShort loopsscroll_speedoptionalStringdefault: normalfast, normal (default), or slow. Affects render time and output pacing.durationoptionalIntegerDuration of scrolling action in seconds (0-60). Higher = longer video. Default: null (full page scroll).
scroll_backoptionalBooleandefault: falseIf true, scrolls to bottom then back to top, creating a seamless loop.
start_immediatelyoptionalBooleandefault: falseStarts recording immediately without waiting for full page load.
videooptionalBooleandefault: falseRecords visible viewport only for a specified duration. Use with duration parameter. Ideal for dashboards and animations.
A successful request returns a 200 OK with a JSON object containing a status string, metadata summary, and a results array with one entry per submitted URL.
statusAPI request status indicator. success for successful requests.
total_urls (Integer), successful_urls (Integer), failed_urls (Integer)
status (String), error_message (String | null), url (Object)
Besides the response body, every response carries custom headers you can use to track credit usage, and concurrency usage on endpoints that enforce a concurrency limit. See the Custom Response Headers documentation and the endpoints with concurrency limits for more details.
X-Concurrent-Threadsheaderconcurrency-limited endpointsSpecifies the maximum number of concurrent requests allowed.
X-Concurrent-Threads-Activeheaderconcurrency-limited endpointsIndicates the number of active concurrent requests being processed.
X-AF-Credits-Costheaderall responsesSpecifies the number of credits consumed by the current request.
See the HTTP Status Codes documentation for a complete reference of common API errors and HTTP status codes.
The target URL redirected too many times (redirect loop), so a final page could not be reached.
Please provide data in required format in request body
The url parameter is required but was not provided.
The file_type value is not a supported output format.
The proxy value is malformed or invalid.
The latitude or longitude value is outside the allowed range.
The css_url value is not a valid URL.
The js_url value is not a valid URL.
The JavaScript passed in js is invalid and could not be executed.
The clip[x], clip[y], clip[width] or clip[height] values are invalid.
A parameter that expects an integer received an invalid value.
A secure connection could not be established because of an SSL certificate problem on the target site.
The SSL certificate does not match the domain. The site may be down or may have moved.
HTML, Markdown or text extraction is not supported for the requested file_type.
PNG, JPG and WEBP are not supported for scrolling capture. Use a video format such as MP4, WEBM or GIF.
The request was aborted before it completed, for example due to a timeout, network issue or cancellation.
A tunnel connection to the target could not be established. Check the URL and proxy setting.
A tunnel to the target failed. Verify the URL and proxy configuration.
Maximum request body size limit exceeded
The target site unexpectedly closed the connection.
The target server closed the connection without returning any data.
The browser and the target website have incompatible SSL/TLS versions or ciphers.