hosting
GET /v1/wordpress/sites/{siteId}
One WordPress site's stored posture, with its component listings.
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/wordpress/sites/{siteId} \
-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 same row listWordPressSites returns, plus the stored plugin, theme and administrator listings the manager's detail drawer shows. Still Postgres only — the listings are whatever the last collection stored, with snapshot.collected_at beside them so the age is visible. 404 for a site outside the caller's scope and for one that does not run WordPress — a 403 would confirm the id exists. Requires sites.view.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
siteId (path) | Uuid | Yes | Site ID (UUIDv7). |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
site_id | string | Yes | — |
name | string | Yes | — |
primary_domain | string | Yes | — |
stack_type | string | Yes | wordpress or woocommerce — a shop IS a WordPress site. |
product_line | string | Yes | — |
deploy_target | string | Yes | — |
status | string | Yes | — |
php_version | string | Yes | — |
plan_name | string | Yes | The plan a customer would recognise, or "". Never an id. |
site_url | string | Yes | — |
admin_url | string | Yes | — |
update_state | WordPressUpdateState | Yes | ⛔⛔ unknown is a real member and must never be rendered as current. "We have not looked" and "you are up to date" are different statements, and a manager that collapses… |
reachability | WordPressReachability | Yes | What a visitor gets from the site's own homepage, from a cache-busted request. ⛔⛔ This is the only field on this surface measured over the path a human actually uses. Every… |
http_status | integer | Yes | — |
http_error_code | WordPressProbeErrorCode | Yes | Why the homepage request did not complete, blank when it did (whatever the status). A code rather than a sentence, because a sentence composed in the engine is English for ever… |
http_checked_at | string | Yes | — |
can_install | boolean | Yes | Whether software can be installed on this site's platform at all. ⛔ false for every managed hosting site — this platform exposes no shell and no install endpoint across its API… |
capabilities | object | Yes | What this site's platform permits, as of the last collection. |
disk | WordPressAllowance | Yes | One countable resource. ⛔ Three states, not two. limit: null, unlimited: false is no ceiling is stated; unlimited: true is the plan sells this as unlimited, which is… |
bandwidth | WordPressAllowance | Yes | One countable resource. ⛔ Three states, not two. limit: null, unlimited: false is no ceiling is stated; unlimited: true is the plan sells this as unlimited, which is… |
snapshot | WordPressSnapshot | Yes | ⛔ Null means nobody has ever collected this site. A client renders that as "not checked yet" with a refresh action — never as zeroes, which read as "you are up to date". |
plugins | WordPressComponent[] | Yes | — |
themes | WordPressComponent[] | Yes | — |
admins | WordPressAdmin[] | Yes | — |
Errors this endpoint can return
401 · 403 · 404 · 429