Instant Snap API

Retrieve a capture

Read a stored capture back by its id. The record is the same envelope the create call returned, with one difference that matters: the download link is minted fresh on every read.

The endpoint

GEThttps://api.websitescreenshotworld.com/instant-snap/v1/captures/{captureId}

{captureId} is the id from the create response. It is a UUID; anything else is a validation failure rather than a 404. Authenticate with the same X-Api-Key header, and note that a key only sees captures made by its own account.

Reading a capture back

curl https://api.websitescreenshotworld.com/instant-snap/v1/captures/0f9d1a6c-3b2e-4f18-8c6a-1d4b7e9a2c05 \
  -H "X-Api-Key: $WSW_API_KEY"

The response is the same envelope documented on Create a capture, with the same fields and the same meanings. There is no separate read schema to learn.

Waiting for an async capture

An async capture reads queued until a browser takes it, then running, then succeeded or failed like any capture. Read it every few seconds; the client libraries' wait does this for you. A capture that never got a browser within 15 minutes reads failed with error_code: capture_expired and was not charged.

Retention and expiry

ValueMeaning
Media retention: 24 hoursHow long the file itself is kept. After that it is deleted and cannot be recovered.
Download link: 60 minutesHow long one issued link works. Re-read the capture for a fresh one.

Once the media has been deleted the record survives, so a read still answers 200 — withstatus: expired, a null download_url and a null expires_at:

An expired capture
{
  "success": true,
  "id": "0f9d1a6c-3b2e-4f18-8c6a-1d4b7e9a2c05",
  "status": "expired",
  "response_type": "json",
  "media_category": "image",
  "format": "png",
  "content_type": "image/png",
  "size_bytes": 184203,
  "width": 1920,
  "height": 1080,
  "duration_ms": 3184,
  "page_http_status": 200,
  "captured_at": "2026-08-31T09:14:22.000Z",
  "final_url": null,
  "media_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "download_url": null,
  "expires_at": null,
  "page_source": null,
  "s3_delivery": null,
  "callback_url": null,
  "error_code": null,
  "spec_version": "v1"
}

Check status, not just the HTTP code

A 200 here does not mean there is a file to fetch. Code that assumes download_url is always a string will fail on a capture that is one day old.

If you need a capture for longer than a day, copy it into your own storage while the link is live — or have the API write it there for you with S3 delivery, which is not subject to our retention at all.

When it is not there

404 Not Found
{
  "success": false,
  "error_code": "capture_not_found",
  "error_message": "\"id\" was not found"
}
  • The id does not exist.
  • The id belongs to another account. The API answers 404 rather than 403 on purpose — the alternative would let anyone confirm which capture ids exist.
  • The capture was made with response_type: by_format and therefore never stored.

Did this page answer your question?

Tell us what is missing