💡 Try this endpoint in the Playground →

Screenshot API

Capture full-page screenshots of any URL. Choose from basic HTTP rendering, full browser rendering, or design-analysis mode — which also extracts the page's color palette, layout structure, and typography.

POST /v1/screenshot

POST https://api.webpeel.dev/v1/screenshot
Authorization: Bearer wp_live_xxxx
Content-Type: application/json

{
  "url": "https://example.com",
  "mode": "browser",
  "fullPage": true,
  "format": "png"
}

Parameters

ParameterTypeDefaultDescription
urlstringrequiredThe URL to capture
modestringbrowserCapture mode: basic, browser, or design-analysis
fullPagebooleanfalseCapture the full scrollable page (not just the viewport)
formatstringpngImage format: png or jpeg
widthnumber1280Viewport width in pixels
heightnumber800Viewport height in pixels

Mode Options

ModeDescription
basic Fast HTTP-only render. No JavaScript execution. Good for static pages.
browser Full Chromium render with JavaScript. Works on SPAs, React, Vue apps.
design-analysis Browser render + extracts color palette, layout structure, and typography details. Returns a design object in the response.

Design Analysis Mode

Use mode: "design-analysis" to extract the visual design system of any page alongside the screenshot. Useful for competitive analysis, brand audits, or feeding design context to an AI.

POST https://api.webpeel.dev/v1/screenshot
Authorization: Bearer wp_live_xxxx
Content-Type: application/json

{
  "url": "https://stripe.com",
  "mode": "design-analysis",
  "fullPage": false
}

Response Format

Basic / Browser mode

{
  "image": "data:image/png;base64,iVBORw0KGgo...",
  "url": "https://example.com",
  "elapsed": 1240,
  "width": 1280,
  "height": 800
}

Design Analysis mode

{
  "image": "data:image/png;base64,iVBORw0KGgo...",
  "url": "https://stripe.com",
  "elapsed": 2100,
  "width": 1280,
  "height": 800,
  "design": {
    "palette": ["#635BFF", "#0A2540", "#FFFFFF", "#F6F9FC", "#425466"],
    "fonts": ["Sohne", "Inter", "system-ui"],
    "layout": "single-column hero with 3-column feature grid",
    "primaryColor": "#635BFF",
    "backgroundColor": "#FFFFFF"
  }
}
FieldDescription
imageBase64-encoded image (data URL)
urlFinal URL after redirects
elapsedCapture time in milliseconds
design.paletteTop 5 colors as hex codes
design.fontsFont families detected on the page
design.layoutPlain-English layout description
design.primaryColorDominant brand color
design.backgroundColorPrimary background color

Code Examples

curl — Full-page PNG

curl -X POST "https://api.webpeel.dev/v1/screenshot" \
  -H "Authorization: Bearer wp_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","mode":"browser","fullPage":true}'

Node.js — Design analysis

const response = await fetch('https://api.webpeel.dev/v1/screenshot', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer wp_live_xxxx',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    url: 'https://linear.app',
    mode: 'design-analysis',
    fullPage: false,
    width: 1440
  })
});

const data = await response.json();
console.log('Colors:', data.design.palette);
console.log('Fonts:', data.design.fonts);

Python — Save screenshot to file

import requests, base64

response = requests.post(
    'https://api.webpeel.dev/v1/screenshot',
    headers={'Authorization': 'Bearer wp_live_xxxx'},
    json={
        'url': 'https://example.com',
        'mode': 'browser',
        'fullPage': True,
        'format': 'png'
    }
)
data = response.json()

# Strip the data URL prefix and decode
img_data = data['image'].split(',')[1]
with open('screenshot.png', 'wb') as f:
    f.write(base64.b64decode(img_data))

print(f"Saved screenshot in {data['elapsed']}ms")

Advanced Screenshot Endpoints

WebPeel offers several advanced screenshot capabilities beyond basic capture:

→ Full Advanced Screenshots documentation