Docs / Getting started
Request Parameters
Every capture goes through POST /v1/capture (GET works too). All parameters are optional except url — sensible defaults render a 1440×900 PNG above the fold.
Authentication
Send your API key as a Bearer token. Keys are created in the dashboard and start with sk_live_. Each key is shown once at creation — store it safely.
header
Authorization: Bearer sk_live_8c1f4a2e9b7d3f6a
Parameters
| Param | Type | Range / values | Default | Description |
|---|---|---|---|---|
url required | string | valid http(s) URL | — | The page to capture. Redirects are followed (max 5). |
width | int | 320 – 3840 | 1440 | Viewport width in CSS pixels. |
height | int | 240 – 2160 | 900 | Viewport height. Ignored when full_size is true. |
full_size | bool | true / false | false | Capture the entire page, up to 20,000px tall. |
lazy_load | bool | true / false | false | Scroll the page first so lazy-loaded images render. |
zoom | int | 25 – 400 | 100 | Page zoom in percent before capture. |
format | string | png · jpeg · pdf | png | Output format. pdf renders a print-quality A4 document (scaled_width/retina ignored). |
html | string | ≤ 2 MB · POST only | — | Raw HTML to render instead of url (send one or the other). Subresources load normally. |
wait_until | string | load · domcontentloaded · networkidle0 · networkidle2 | networkidle2 | Navigation event that counts as "loaded". |
wait_for_selector | string | CSS selector | — | Wait (up to 10s) for this selector before capturing; missing selectors don't fail the capture. |
dark_mode | bool | true / false | false | Emulate prefers-color-scheme: dark. |
omit_background | bool | true / false | false | Transparent background — requires format=png. |
css | string | ≤ 20 KB | — | Custom CSS injected before capture (hide elements, force themes). |
clip_x · clip_y · clip_width · clip_height | int | px | — | Capture a region. clip_width + clip_height together activate it; wins over full_size. |
quality | int | 1 – 100 | 80 | JPEG quality. Ignored for PNG. |
region eu only | string | eu | eu | Capture region. US is on the roadmap — region=us returns 422 today. |
sleep_time | int | 0 – 10000 | 0 | Extra wait in ms after load, for animations and late JS. |
timeout | int | 5000 – 60000 | 45000 | Max ms to wait for the page to settle. Whatever has rendered by then is captured. |
retina | int | 1 – 3 | 1 | Device pixel ratio. retina=2 doubles output resolution for crisp HiDPI captures. |
no_ads | bool | true / false | — | Ads and trackers are always blocked at the renderer; parameter accepted for compatibility. |
no_cookie_banners | bool | true / false | false | Remove common cookie-consent banners before capture. |
nocache | bool | true / false | false | Force a fresh render. Cached repeats within 24h are free. |
max_height | int | 240 – 20000 | 20000 | Hard cap for full-page captures, in CSS pixels. |
scaled_width | int | 100 – 3840 | — | Downscale the output image to this width (thumbnails). |
Example request
A full-page capture with ad blocking and lazy-load handling:
terminal
curl "https://screenshotink.com/v1/capture" \
-H "Authorization: Bearer sk_live_…" \
-d url="https://example.com" \
-d full_size=true \
-d no_ads=true \
-d lazy_load=true
Example response
200 OK · application/json
{
"status": "done",
"image_url": "https://screenshotink.com/shots/9f/9f2k1x.png",
"width": 1440,
"height": 8260,
"format": "png",
"bytes": 1984412,
"render_ms": 1840,
"cached": false,
"expires_at": "2026-07-12T14:03:00Z"
}
Image URLs are valid for 30 days on Free, 90 on Starter, 365 on Pro and Scale. Re-request with the same parameters within 24 hours and you get the cached render for free ("cached": true).
Agents: every parameter on this page will also be exposed through the MCP server's take_screenshot tool with the same names and defaults.