Screenshot API

Capture Any Webpage as
PNG, JPEG, or WebP

One REST call returns a pixel-perfect screenshot of any URL. Control format, viewport, full-page scroll, device emulation, dark mode, and custom CSS — all without managing headless browsers.

200 free requests/month · No credit card · PNG · JPEG · WebP · AVIF
Capabilities

Everything you need from a screenshot API.

From simple thumbnail generation to pixel-perfect full-page archival — SnapAPI handles every use case out of the box.

Multiple Formats

Return PNG, JPEG, WebP, or AVIF. WebP and AVIF cut file sizes 30–50% versus PNG with no visible quality loss.

Full-Page Capture

Set full_page=true to scroll and stitch the entire page — any height, no clipping.

Device Emulation

Emulate iPhone, iPad, Android, or set any custom width and height to test responsive layouts at any breakpoint.

Dark Mode Support

Pass dark_mode=true to force prefers-color-scheme: dark on any page — including sites that don't natively support it.

Custom CSS & JS Injection

Inject custom CSS to remove banners, hide cookie notices, or restyle the page before the screenshot is taken. Also supports JS injection for dynamic state.

Wait & Delay Controls

Set a delay in milliseconds or a wait_for CSS selector to ensure lazy-loaded content and animations finish before capture.

Code Examples

Start in under 60 seconds.

Replace YOUR_API_KEY with your key from the dashboard. That's it.

# Basic screenshot — returns PNG bytes
curl -G "https://api.snapapi.pics/v1/screenshot" \
  --data-urlencode "url=https://github.com" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --output screenshot.png

# Full-page WebP with 1440px viewport
curl -G "https://api.snapapi.pics/v1/screenshot" \
  --data-urlencode "url=https://github.com" \
  -d "format=webp&full_page=true&width=1440" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --output full-page.webp

# Mobile emulation (375px iPhone viewport)
curl -G "https://api.snapapi.pics/v1/screenshot" \
  --data-urlencode "url=https://github.com" \
  -d "width=375&height=812&device_scale_factor=3" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --output mobile.png
// npm install snapapi-js
import SnapAPI from 'snapapi-js';

const client = new SnapAPI('YOUR_API_KEY');

// Basic screenshot → Buffer
const buf = await client.screenshot.capture({
  url: 'https://github.com',
  format: 'webp',
  full_page: true,
  width: 1440,
});

// Save to disk
import { writeFileSync } from 'fs';
writeFileSync('screenshot.webp', buf);

// Dark mode with custom CSS
const darkBuf = await client.screenshot.capture({
  url: 'https://example.com',
  dark_mode: true,
  custom_css: '.cookie-banner { display: none !important; }',
  delay: 1500,
});
# pip install snapapi-python
from snapapi import SnapAPI

client = SnapAPI("YOUR_API_KEY")

# Basic screenshot
buf = client.screenshot.capture(
    url="https://github.com",
    format="png",
    full_page=True,
    width=1440,
)

with open("screenshot.png", "wb") as f:
    f.write(buf)

# Mobile screenshot with wait_for selector
mobile = client.screenshot.capture(
    url="https://example.com",
    width=390,
    height=844,
    wait_for="#main-content",
    delay=800,
)
// go get github.com/Sleywill/snapapi-go
import (
    "github.com/Sleywill/snapapi-go"
    "os"
)

client := snapapi.New("YOUR_API_KEY")

// Full-page PNG
buf, err := client.Screenshot.Capture(snapapi.ScreenshotOptions{
    URL:      "https://github.com",
    Format:   "png",
    FullPage: true,
    Width:    1440,
})
if err != nil { panic(err) }

os.WriteFile("screenshot.png", buf, 0644)
// composer require snapapi/snapapi-php
use SnapAPI\SnapAPI;

$client = new SnapAPI('YOUR_API_KEY');

// Full-page screenshot → binary
$bytes = $client->screenshot->capture([
    'url'       => 'https://github.com',
    'format'    => 'webp',
    'full_page' => true,
    'width'     => 1440,
]);

file_put_contents('screenshot.webp', $bytes);
API Reference

Screenshot API parameters.

All parameters are passed as query string values to GET /v1/screenshot.

Parameter Type Default Description
url string required The URL to screenshot. Must include protocol (https://).
format string png Output format: png, jpeg, webp, or avif.
width integer 1280 Viewport width in pixels (64–3840).
height integer 800 Viewport height in pixels (64–2160). Ignored when full_page is true.
full_page boolean false Capture the full scrollable page height rather than the visible viewport.
dark_mode boolean false Force prefers-color-scheme: dark before rendering.
delay integer 0 Wait N milliseconds after page load before capturing (0–10000).
wait_for string CSS selector to wait for before capturing. Times out after 10 seconds.
custom_css string CSS string injected into the page before capture.
quality integer 90 JPEG/WebP quality (1–100). Ignored for PNG.
device_scale_factor number 1 Pixel density multiplier. Use 2 for Retina, 3 for high-DPI mobile.
Use Cases

Built for every screenshot workflow.

From generating open-graph thumbnails to archiving 10,000 pages per hour — one API handles it all.

Monitoring

Visual Regression Testing

Capture production and staging screenshots on every deploy. Diff them with tools like Percy or Chromatic to catch unintended UI changes before they reach users.

SaaS Features

Website Thumbnails & Previews

Generate link preview images for social sharing, bookmarking tools, or directory listings. Return WebP thumbnails in milliseconds without a separate media pipeline.

Archiving

Web Archiving at Scale

Screenshot thousands of URLs per hour for compliance, e-discovery, or historical archives. SnapAPI's queue handles bursts — no rate limit errors, no dropped requests.

OG Images

Dynamic OG Image Generation

Render a dynamic HTML template — blog post title, author, brand — and screenshot it to produce a social share image. Ship og:image in one afternoon, no image editing library required.

Pricing

Start free. Scale when you need to.

All plans include screenshot, PDF, scraping, extraction, and video. No feature gates.

Free
For personal projects and prototyping
$0/month
200 requests/month · No credit card
Get started free
  • 200 requests/month
  • All 6 capabilities
  • PNG / JPEG / WebP / AVIF
  • REST API + 6 SDKs
Pro
For production apps at scale
$79/month
50,000 requests/month · ~$0.0016/req
  • 50,000 requests/month
  • All 6 capabilities
  • Highest priority queue
  • 3.3x cheaper than ScreenshotOne
Get started

Your first 200 screenshots are free.

No credit card. No setup. API key in under a minute.