API
Website screenshot API
Send a public URL and the capture options. SnapSite returns a job id. Poll the job, then download the image. The server deletes the file when that download finishes. Keys are stored as hashes and can be revoked.
Create a job
Create an account and generate a key. The key spends the same daily allowance and batch size as that plan. A paid plan raises the allowance; it does not add a second quota. Send the key in the Authorization header, never in the URL.
curl -s "$SNAP_ORIGIN/api/v1/screenshots" \
-H "Authorization: Bearer $SNAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","preset":"desktop","format":"png"}'Read the job
The create call returns 202 and a job object with status queued. Poll until status is completed or failed. The response never includes the query string you sent.
curl -s "$SNAP_ORIGIN/api/v1/screenshots/JOB_ID" \
-H "Authorization: Bearer $SNAP_API_KEY"Download the image
Download the file once. The server deletes it when the download finishes, and anything left behind is removed within 15 minutes. The job id is the only credential for that file.
curl -L "$SNAP_ORIGIN/api/v1/screenshots/JOB_ID/image?download=1" \
-o page.pngBatches, quotas, and errors
POST /api/v1/batches with an items array. The site caps how many URLs you can send. The daily limit and a short-window burst limit both apply. A 400 with a blocked_target detail means an address was refused. A 429 is the daily limit or the burst limit. A failed job with code timeout or target_unreachable is about the other site.
curl -s "$SNAP_ORIGIN/api/v1/batches" \
-H "Authorization: Bearer $SNAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"url":"https://example.com","preset":"mobile"},{"url":"https://example.com/docs","preset":"desktop"}]}'Options
| Field | Values |
|---|---|
| url | Public http or https URL, up to 2048 characters |
| preset | desktop, tablet, mobile, full, or custom |
| width, height | Required for custom. 320–1920 wide, 320–4000 tall |
| format | png or jpeg |
| quality | JPEG only, 40–90, default 80 |
| delayMs | 0–3000, and not above the operator’s cap |
| waitUntil | load or domcontentloaded |
| waitForFonts | true by default |