hosting
GET /v1/site-imports/snapshots
What a web archive holds for a domain, by day.
Authentication
Send an API key as a bearer token. The key must carry the sites.view permission; a key without it is refused with 403, not 404.
This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X GET https://api.zinndigital.com/v1/site-imports/snapshots?domain=<domain> \
-H "Authorization: Bearer zdk_live_…"Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
The date picker's data for a Wayback restore. ⛔ **A cached database read, never a live archive call.** The Internet Archive's CDX index answered a two-row query in 41.9 seconds when measured on 2026-08-06, so an endpoint that blocked on it would hold a worker per customer and read as broken. When the cache is absent or stale this starts a durable refresh workflow and answers `202` with `state: "pending"`; poll it. `state` has four values and they are not interchangeable — `pending` (never fetched), `ready` (fresh), `stale` (usable but past its TTL, a refresh is running) and `error` (the archive refused, and the reason is in `error`). Requires `sites.view`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
domain (query) | string | Yes | The domain to look up, e.g. `example.com`. `www.` is ignored. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
domain | string | Yes | — |
state | string<pending, ready, stale, error> | Yes | Four states, and they are not interchangeable — collapsing `error` into `pending` leaves a customer watching a spinner for something that will never arrive. |
days | ArchiveSnapshotDay[] | Yes | — |
total_captures | integer | Yes | — |
truncated | boolean | Yes | True when the archive stopped short of the whole index. Reported rather than swallowed: a picker showing the first 50,000 of 400,000 captures while implying completeness tells t… |
error | string | Yes | Why the last refresh failed; empty when it did not. |
fetched_at | string | No | — |
Errors this endpoint can return
401 · 403 · 422 · 429