One authenticated endpoint. Send a GET or POST to /api/v1/screenshot with your X-Api-Key header. Add ?response=json to get a durable URL instead of raw bytes.
| Name | Values | Default | Description |
|---|---|---|---|
url | string | — | Target URL (http/https). Private IPs and metadata endpoints are blocked. |
format | png · jpeg · webp · pdf | png | Output format. |
full_page | boolean | false | Capture the whole scrollable page, up to 20,000px. |
width / height | number | 1280 / 800 | Viewport size in pixels. |
device | desktop · tablet · mobile | — | Device preset (overrides width/height/UA). |
dark_mode | boolean | false | Emulate prefers-color-scheme: dark. |
block_ads | boolean | true | Strip ad requests before rendering. |
block_cookie_banners | boolean | true | Remove consent/cookie modals. |
delay | ms | 0 | Wait after load before capturing. |
cache_ttl | seconds | 86400 | Cache lifetime. Cache hits don't count against quota. |
Every error uses the same JSON shape:
{ "error": {
"code": "invalid_url" | "blocked_url" | "unauthorized"
| "quota_exceeded" | "rate_limited"
| "render_failed" | "invalid_params",
"message": "human readable"
} }Status codes: 400 invalid/blocked · 401 unauthorized · 429 quota/rate (with Retry-After) · 500 render failure.