Docs / Reference
Examples
Copy-paste recipes for the common jobs. Full parameter reference here — or grab every recipe as a Postman collection (+ environment).
Full-page capture, four languages
curl "https://screenshotink.com/v1/capture" \
-H "Authorization: Bearer $INK_KEY" \
-d url="https://example.com" -d full_size=true \
-d no_ads=true -d lazy_load=true
$ch = curl_init('https://screenshotink.com/v1/capture');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $key, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://example.com',
'full_size' => true, 'no_ads' => true,
]),
]);
$shot = json_decode(curl_exec($ch), true);
echo $shot['image_url'];
const res = await fetch("https://screenshotink.com/v1/capture", {
method: "POST",
headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" },
body: JSON.stringify({ url: "https://example.com", full_size: true, no_ads: true })
});
const { image_url } = await res.json();
import requests
shot = requests.post("https://screenshotink.com/v1/capture",
headers={"Authorization": f"Bearer {key}"},
json={"url": "https://example.com", "full_size": True, "no_ads": True}
).json()
print(shot["image_url"])
Thumbnails (small & fast)
Render at full width but downscale the stored image — perfect for link previews and dashboards:
terminal
-d format=jpeg -d quality=80 -d scaled_width=400
Device viewports
mobile · tablet · desktop
# iPhone-ish -d width=375 -d height=812
# iPad-ish -d width=768 -d height=1024
# Desktop -d width=1440 -d height=900
Always-fresh captures
Identical requests within 24h return the cached render for free. When you explicitly need a new render every time (e.g. your own change detection), add nocache=true — or better, use a monitor and let us do the diffing.
Handling errors
javascript
if (!res.ok) {
const { error } = await res.json();
if (error.code === "rate_limited") await sleep(1000), retry();
else if (error.code === "quota_exceeded") notifyBilling();
else throw new Error(error.message);
}