Developer-first screenshot infrastructure

Screenshot API for Developers

Capture website screenshots with a simple API. Powered by cloud Playwright infrastructure.

API key auth
Rate limit + quota
Async jobs
Quick start
curl -X POST "https://api.your-domain.com/api/v1/screenshots" \
  -H "Authorization: Bearer $SCREENSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'

Code examples

Copy-paste friendly. No SDK required.

API parameters
Endpoint: POST /api/v1/screenshots
More details
Required
url
Common options
fullPage, viewport, format, quality, waitUntil, delayMs, selector
Sync mode constraints
If you request mode=sync, the server will fall back to async unless timeoutMs is provided and 0 < timeoutMs < 10000 and fullPage=false.
curl -X POST "http://localhost:5000/api/v1/screenshots" \
  -H "Authorization: Bearer $SCREENSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
import fetch from "node-fetch";

const resp = await fetch("http://localhost:5000/api/v1/screenshots", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.SCREENSHOT_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ url: "https://example.com" })
});

console.log(await resp.json());
import os
import requests

resp = requests.post(
  "http://localhost:5000/api/v1/screenshots",
  headers={
    "Authorization": f"Bearer {os.environ['SCREENSHOT_API_KEY']}",
    "Content-Type": "application/json",
  },
  json={"url": "https://example.com"},
)

print(resp.json())
package main

import (
  "bytes"
  "net/http"
  "os"
)

func main() {
  body := []byte(`{"url":"https://example.com"}`)
  req, _ := http.NewRequest("POST", "http://localhost:5000/api/v1/screenshots", bytes.NewBuffer(body))
  req.Header.Set("Authorization", "Bearer "+os.Getenv("SCREENSHOT_API_KEY"))
  req.Header.Set("Content-Type", "application/json")
  http.DefaultClient.Do(req)
}

Playground

A mock UI to explore the workflow before wiring in your API key.

Tip: switch to Console to create an API key.
Preview
(Mock preview)

Features

Everything you need to ship reliable screenshots at scale.

Fast async jobs
Create a job, poll status, download results. Built for throughput.
API key auth
Developer-friendly Bearer tokens. Rotate keys with confidence.
Quota + rate limit
Protect your infra with plan-based usage control.
Playwright-powered
Modern browser rendering for real-world pages.
Multi-tenant workspaces
Separate environments and teams with workspace isolation.
Simple integration
A single HTTP request. Works from CI, cron, or your backend.

Use cases

Website Monitoring
Track broken layouts and outages with scheduled captures.
SEO Screenshot
Audit important pages and keep historical snapshots.
Social Media Preview
Generate preview images and OG assets automatically.
Visual Regression Testing
Diff screenshots in CI to catch UI bugs before release.

How it works

1) API request
POST a URL (and options) to create a screenshot job.
2) Cloud browser
We render it in an isolated browser environment.
3) Screenshot result
Poll status and fetch the final asset when ready.

Pricing

Plans are loaded from your DB (public plans).

Free
free
Public
Workspaces1
API keys3
Users1
Monthly screenshots5000
Pro
pro
Public
Workspaces10
API keys20
Users5
Monthly screenshots200000
Team
team
Public
Workspacesunlimited
API keys100
Usersunlimited
Monthly screenshots1000000

FAQ

Do you support async jobs?
Yes. Create a job then query status until it completes.
How do rate limits work?
Limits are plan-based. Exceeding them returns HTTP 429.
What about quota?
Quota is enforced per rolling period. Exceeding returns HTTP 402.
Can I rotate API keys?
Yes. Create and rotate keys from the Console.

Start capturing screenshots today

Get an API key and ship your first integration in minutes.