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.
From simple thumbnail generation to pixel-perfect full-page archival — SnapAPI handles every use case out of the box.
Return PNG, JPEG, WebP, or AVIF. WebP and AVIF cut file sizes 30–50% versus PNG with no visible quality loss.
Set full_page=true to scroll and stitch the entire page — any height, no clipping.
Emulate iPhone, iPad, Android, or set any custom width and height to test responsive layouts at any breakpoint.
Pass dark_mode=true to force prefers-color-scheme: dark on any page — including sites that don't natively support it.
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.
Set a delay in milliseconds or a wait_for CSS selector to ensure lazy-loaded content and animations finish before capture.
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);
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. |
From generating open-graph thumbnails to archiving 10,000 pages per hour — one API handles it all.
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.
Generate link preview images for social sharing, bookmarking tools, or directory listings. Return WebP thumbnails in milliseconds without a separate media pipeline.
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.
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.
All plans include screenshot, PDF, scraping, extraction, and video. No feature gates.