Allscreenshots Docs
API reference

Screenshots

Capture screenshots with the core screenshot endpoint

Screenshots API

The screenshots endpoint is the core of AllScreenshots. Use it to capture any website as a PNG, JPEG, WebP, or PDF.

Endpoint

POST /v1/screenshots

Request body

{
  "url": "https://example.com",
  "viewport": {
    "width": 1920,
    "height": 1080,
    "deviceScaleFactor": 1
  },
  "format": "png",
  "quality": 80,
  "fullPage": false,
  "delay": 0,
  "waitFor": null,
  "waitUntil": "load",
  "timeout": 30000,
  "darkMode": false,
  "customCss": null,
  "hideSelectors": [],
  "selector": null,
  "blockAds": false,
  "blockCookieBanners": false,
  "blockLevel": "none",
  "responseType": "binary"
}

Parameters

Required

ParameterTypeDescription
urlstringThe URL to capture. Must start with http:// or https://.

Viewport options

ParameterTypeDefaultDescription
viewport.widthinteger1920Viewport width in pixels (100-4096)
viewport.heightinteger1080Viewport height in pixels (100-4096)
viewport.deviceScaleFactorinteger1Device pixel ratio (1-3)
devicestring-Device preset name (alternative to viewport). See devices.

Output options

ParameterTypeDefaultDescription
formatstring"png"Output format: png, jpeg, webp, or pdf
qualityinteger80Image quality for JPEG/WebP (1-100)
fullPagebooleanfalseCapture the full scrollable page
selectorstring-CSS selector to capture a specific element
responseTypestring"binary"Response type: binary or json

Timing options

ParameterTypeDefaultDescription
delayinteger0Wait time in ms after page load before capture (0-30000)
waitForstring-CSS selector to wait for before capturing
waitUntilstring"load"Page load event to wait for: load, domcontentloaded, networkidle
timeoutinteger30000Maximum time to wait in ms (1000-60000)

Styling options

ParameterTypeDefaultDescription
darkModebooleanfalseEmulate prefers-color-scheme: dark
customCssstring-CSS to inject into the page (max 10000 chars)
hideSelectorsarray[]CSS selectors to hide (max 50 selectors)

Blocking options

ParameterTypeDefaultDescription
blockAdsbooleanfalseBlock common ad networks
blockCookieBannersbooleanfalseBlock cookie consent banners
blockLevelstring"none"Domain blocking level: none, light, normal, pro, pro_plus, ultimate

See Blocking for details on blocking options.

Response

Binary response (default)

Returns the image data with appropriate content type:

  • image/png for PNG format
  • image/jpeg for JPEG format
  • image/webp for WebP format
  • application/pdf for PDF format

JSON response

When responseType: "json":

{
  "url": "https://storage.allscreenshots.com/screenshots/abc123.png",
  "expiresAt": "2025-01-30T12:00:00Z",
  "size": 245678,
  "width": 1920,
  "height": 1080,
  "format": "png",
  "renderTime": 1234,
  "cached": false
}
FieldTypeDescription
urlstringURL to download the screenshot
expiresAtstringISO 8601 timestamp when the URL expires
sizeintegerFile size in bytes
widthintegerImage width in pixels
heightintegerImage height in pixels (null for full page)
formatstringImage format
renderTimeintegerTime to render in milliseconds
cachedbooleanWhether result was served from cache

Examples

Basic screenshot

curl -X POST 'https://api.allscreenshots.com/v1/screenshots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://github.com"}' \
  --output screenshot.png

Mobile device

curl -X POST 'https://api.allscreenshots.com/v1/screenshots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://github.com",
    "device": "iphone_15"
  }' \
  --output mobile.png

Full page with dark mode

curl -X POST 'https://api.allscreenshots.com/v1/screenshots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://github.com",
    "fullPage": true,
    "darkMode": true,
    "blockAds": true,
    "blockCookieBanners": true
  }' \
  --output fullpage-dark.png

Capture specific element

curl -X POST 'https://api.allscreenshots.com/v1/screenshots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://github.com",
    "selector": "header.AppHeader"
  }' \
  --output header.png

Wait for dynamic content

curl -X POST 'https://api.allscreenshots.com/v1/screenshots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/dashboard",
    "waitFor": ".chart-loaded",
    "waitUntil": "networkidle",
    "delay": 500
  }' \
  --output dashboard.png

PDF output

curl -X POST 'https://api.allscreenshots.com/v1/screenshots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/invoice",
    "format": "pdf",
    "fullPage": true
  }' \
  --output invoice.pdf

Error responses

StatusErrorDescription
400invalid_requestInvalid request parameters
401unauthorizedMissing or invalid API key
402quota_exceededMonthly quota exceeded
408timeoutPage load timed out
422capture_failedScreenshot capture failed
429rate_limit_exceededRate limit exceeded

Example error response:

{
  "error": "invalid_request",
  "message": "URL must start with http:// or https://",
  "field": "url"
}

For capturing many URLs or long-running captures, consider using async jobs or bulk processing.

On this page