ShotAPI docs
One endpoint. GET or POST. PNG/JPEG/WebP out.
GET /api/v1/screenshot
Pass query params:
url— the page to screenshot (http/https). Required if nohtml.html— raw HTML to render. Required if nourl.w,h— viewport width and height (default 1280×800).full— set to1for a full-page scroll-capture.format—png(default),jpeg, orwebp.transparent— set to1to omit the background (PNG/WebP only).waitUntil—load,domcontentloaded,networkidle0,networkidle2.
POST /api/v1/screenshot
JSON body with the same fields:
{
"url": "https://example.com",
"fullPage": true,
"format": "webp",
"viewport": { "width": 1280, "height": 800 },
"waitUntil": "networkidle0"
}
Response
Image bytes streamed back with the right content-type. Errors return JSON:
{"error":"Browser Rendering failed: 502","detail":"..."}
Limits (free tier)
- 100 screenshots per IP per day
- 30-second timeout per request
- Max viewport 1920×1080, max full-page height 10000px
Library snippets
Node.js
const res = await fetch("https://shotapi.coldsmith.dev/api/v1/screenshot?url=https://example.com&format=webp");
const buf = await res.arrayBuffer();
fs.writeFileSync("page.webp", Buffer.from(buf));
Python
import requests
r = requests.get("https://shotapi.coldsmith.dev/api/v1/screenshot",
params={"url": "https://example.com", "full": "1"})
open("page.png", "wb").write(r.content)