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.png

Batches, 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

FieldValues
urlPublic http or https URL, up to 2048 characters
presetdesktop, tablet, mobile, full, or custom
width, heightRequired for custom. 320–1920 wide, 320–4000 tall
formatpng or jpeg
qualityJPEG only, 40–90, default 80
delayMs0–3000, and not above the operator’s cap
waitUntilload or domcontentloaded
waitForFontstrue by default