One API call converts any webpage or HTML snippet to a pixel-perfect screenshot or PDF. Any language. Sub-second renders. Free tier included.
No account needed for the demo · 100 free renders/month after signup
Add screenshots and PDFs to any app in minutes.
# Screenshot a URL → PNG curl -X POST https://screenshotapis.org/v1/screenshot \ -H "X-Api-Key: sk_live_your_key" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com", "format": "png"}' \ --output screenshot.png # Render HTML → PDF curl -X POST https://screenshotapis.org/v1/pdf \ -H "X-Api-Key: sk_live_your_key" \ -H "Content-Type: application/json" \ -d '{"html": "<h1>Hello</h1>", "format": "A4"}' \ --output document.pdf
import requests # Screenshot resp = requests.post( "https://screenshotapis.org/v1/screenshot", headers={"X-Api-Key": "sk_live_your_key"}, json={"url": "https://example.com", "format": "png"}, ) with open("screenshot.png", "wb") as f: f.write(resp.content) # PDF resp = requests.post( "https://screenshotapis.org/v1/pdf", headers={"X-Api-Key": "sk_live_your_key"}, json={"html": "<h1>Invoice #42</h1>"}, ) with open("invoice.pdf", "wb") as f: f.write(resp.content)
import fs from "fs"; // Screenshot const resp = await fetch("https://screenshotapis.org/v1/screenshot", { method: "POST", headers: { "X-Api-Key": "sk_live_your_key", "Content-Type": "application/json", }, body: JSON.stringify({ url: "https://example.com", format: "png" }), }); const buf = Buffer.from(await resp.arrayBuffer()); fs.writeFileSync("screenshot.png", buf); // PDF const pdf = await fetch("https://screenshotapis.org/v1/pdf", { method: "POST", headers: { "X-Api-Key": "sk_live_your_key", "Content-Type": "application/json" }, body: JSON.stringify({ html: "<h1>Invoice</h1>" }), }); fs.writeFileSync("invoice.pdf", Buffer.from(await pdf.arrayBuffer()));
package main import ( "bytes"; "io"; "net/http"; "os" ) func main() { body := []byte(`{"url":"https://example.com","format":"png"}`) req, _ := http.NewRequest("POST", "https://screenshotapis.org/v1/screenshot", bytes.NewReader(body)) req.Header.Set("X-Api-Key", "sk_live_your_key") req.Header.Set("Content-Type", "application/json") resp, _ := http.DefaultClient.Do(req) data, _ := io.ReadAll(resp.Body) os.WriteFile("screenshot.png", data, 0644) }
Production-ready from day one.
PNG, JPEG, or WebP. Full-page or viewport. Retina-quality with device_scale_factor=2.
A4, Letter, Legal, A3, Tabloid. Custom margins, headers, footers, landscape mode.
Pass a CSS selector to capture just one element — perfect for OG image generation.
Render any public URL or inject your own HTML directly — no hosting required.
Set dark_mode=true to render with the dark color scheme enabled in the browser.
Powered by Playwright + Chromium. Semaphore-limited concurrency. 30 s timeout.
What developers are building with Screenshot API.
Render dynamic Open Graph / social card HTML on every publish.
Inject invoice HTML, get a branded PDF — no headless Chrome setup needed.
Snapshot any URL at a point in time. Full-page captures preserved as PNG.
Auto-generate preview images for any link pasted into your app.
Screenshot your staging app on every deploy and diff against baseline.
Render chart dashboards to PDF for weekly digests or scheduled emails.
1 credit = 1 render. Credits reset monthly. No overage surprises.
Need more? Contact us for volume pricing. Credit packs available for occasional bursts.