Endpoint
POST method accepts parameters in the request body. The GET method accepts all parameters as query strings and always returns a binary image.
Headers
| Header | Required | Description |
|---|---|---|
X-API-Key | Yes | Your API key |
Content-Type | Yes (POST) | application/json |
Request body (POST)
The URL of the webpage to capture. Must be a valid URL.
Optional name for the screenshot (max 100 characters).
Capture options
Pass these inside theoptions object in the request body.
Output format. Options:
png, jpeg, webp, pdf.Viewport width in pixels (100–5000).
Viewport height in pixels (100–5000).
Capture the full scrollable page instead of just the viewport.
Image quality for JPEG, WebP, and PDF (0–100). Ignored for PNG.
Device pixel ratio (1–3). Use
2 for retina-quality screenshots.Emulate a mobile device viewport.
Enable touch event support.
Use landscape orientation.
Block advertisements on the page.
Block cookie consent banners.
Block chat widgets (e.g., Intercom, Drift).
CSS selector of a specific element to capture instead of the full page (max 255 characters).
Automatically scroll the selected element into view before capturing.
Return an error if the specified selector is not found on the page.
CSS selector to wait for before capturing (max 255 characters). The capture starts once this element exists in the DOM.
Milliseconds to wait after page load before capturing (0–10000).
Maximum time in milliseconds to wait for the page and screenshot process (1000–90000).
Maximum time in milliseconds to wait for page navigation (1000–30000).
When to consider navigation complete. Options:
load, domcontentloaded, networkidle0, networkidle2. Can also be an array of values.Controls the response format. Options:
by_format, json, empty.Emulate dark color scheme (
prefers-color-scheme: dark).Remove the default white background for transparent captures (PNG and WebP only).
Scroll through the page before capturing. Useful for triggering lazy-loaded content.
Milliseconds to wait between scroll steps (0–5000).
Number of pixels to scroll per step (0–5000).
Maximum height in pixels for full-page captures (0–50000).
Response
The response format depends on theresponse_type option.
response_type: "by_format" (default)
Returns the screenshot as binary data with the appropriate Content-Type header (e.g., image/png, image/jpeg, application/pdf).
For POST requests, a Content-Disposition: attachment header is also included.
response_type: "json"
Returns 201 Created with a JSON response:
response_type: "empty"
Returns 200 OK with an empty body. Useful for fire-and-forget captures.
Error responses
| Status | Code | Description |
|---|---|---|
| 401 | missing_api_key | No API key provided |
| 401 | invalid_api_key | Invalid or revoked API key |
| 402 | usage_limit_exceeded | Monthly screenshot limit reached |
| 422 | invalid_options | Validation failed — check the details field |
| 422 | invalid_url | URL format is invalid |
| 422 | selector_not_found | Specified CSS selector not found on page |
| 429 | rate_limit_exceeded | Too many requests per minute |
| 500 | render_failed | Screenshot capture failed |
| 502 | host_error | Could not reach the target URL |
| 503 | service_unavailable | Screenshot service is starting up |
| 504 | navigation_timeout | Page navigation timed out |

