hosting
GET /v1/site-imports/platform
What the archived site was built on, and what a restore can recover.
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/platform?domain=<domain>&day=<day> \
-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
⚖️ **Owner ruling 2026-09-08.** A web-archive capture holds rendered HTML and nothing else — no database, no PHP, no administrator — so a Joomla, Drupal or Magento site cannot be restored *as* that application. This endpoint says what the archive was, so the restore form can state plainly, **before the customer commits**, what they get back (`gains`) and what is gone (`losses`). Every value is a machine code the client localises; the engine composes no sentences (they could only ever be English). ⛔ A cached read, like `/v1/site-imports/snapshots`, and for a related but different reason: one home-page fetch measured 1.13 s live on 2026-09-08, which is affordable once and not affordable per viewer of a shared aged-domain list. A miss starts a durable probe and answers `202` with `state: "pending"`; poll it. `state` has the same four values as the snapshot index and they are not interchangeable. Requires `sites.view`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
domain (query) | string | Yes | The archived domain, e.g. `example.com`. `www.` is ignored. |
day (query) | string | Yes | The snapshot day being considered, `YYYY-MM-DD`. Required, because a domain's platform changes over its life — a 2009 capture and a 2019 capture of one domain routinely answer d… |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
domain | string | Yes | — |
day | string | Yes | The snapshot day this verdict is about, `YYYY-MM-DD`. |
state | string<pending, ready, stale, error> | Yes | The same four values `ArchiveSnapshotIndex.state` carries, and the same rule — `pending` ("nobody has looked") and `error` ("we looked and the archive refused") lead a customer… |
platform | string<wordpress, joomla, drupal, magento, shopify, wix, squarespace, blogger, typo3, prestashop, opencart, dotnetnuke, frontpage, static_html, unknown> | Yes | ⛔ `unknown` and `static_html` are different answers and must not be collapsed: the first is "we could not tell", the second is "this was hand-written HTML, so there was nothing… |
confidence | integer | Yes | `0` nothing seen · `1` a signature (an asset path or a script global) · `2` the page's own `<meta name="generator">`. Carried so a client can say "looks like" on a `1` rather th… |
was_dynamic | boolean | Yes | True when the site was an application rather than a set of pages — i.e. when the customer must be told something beyond "here are your pages back". |
gains | string[] | Yes | Codes for what the restore DOES recover. Stated as explicitly as the losses: a panel that lists only what is missing reads as "this will not work", and it is describing a featur… |
losses | string[] | Yes | Codes for what a web archive cannot contain, so cannot come back — `admin`, `database`, `plugins`, `checkout`, `forms`, and so on. |
suggested_output | string<static, wordpress> | Yes | A recommendation the customer may override, never a forced choice. WordPress in, WordPress out — it is the one platform whose content we can genuinely re-home, because our WXR w… |
error | string | No | Why the last probe failed; empty when it did not. |
probed_at | string | No | — |
Errors this endpoint can return
401 · 403 · 422 · 429