hosting

GET /v1/wordpress/sites

List every WordPress site the caller owns, across all product lines.

All hosting endpoints

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.

Where your organisation id goes

This endpoint takes org_id as a query parameter. Leave it out and the call covers your whole tenancy subtree; send it to narrow the call to one organisation.

Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.

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 \
  -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 fleet manager's list: every `wordpress` or `woocommerce` site in the caller's tenancy subtree, on every product line and every deploy target (own fleet, managed shared, managed cloud, CloudLinux), with each one's stored WordPress posture. ⛔ **This endpoint never calls a vendor**, however stale a row is. Collecting is `refreshWordPressSite`, an explicit act; a row that has never been collected reports `update_state: unknown` with a null `snapshot`, and the client renders that as *"not checked yet"* — **never** as "up to date". Those are different sentences and a customer acts differently on each. `update_state` and `needs_attention` are applied **after** pagination, because the state is derived from four snapshot columns with an explicit precedence and re-expressing that precedence in SQL would give this list and `getWordPressFleetOverview` two implementations of one rule. A filtered page can therefore be short; the totals come from the overview, which counts everything. Requires `sites.view`.

Parameters

NameTypeRequiredWhat it is
cursor (query)stringNoOpaque cursor from a previous page's `page.next_cursor`.
limit (query)integerNoMaximum items to return (page size).
org_id (query)stringNoNarrow to one organisation in the caller's subtree. Equivalent to the `X-Zinn-Org` header, which is now read centrally for every org-scoped operation — this parameter wins where…
q (query)stringNoSubstring match on the primary domain.
product_line (query)stringNo
deploy_target (query)stringNo
update_state (query)WordPressUpdateStateNo`422` on an unrecognised value rather than silently returning everything — a filter that quietly does nothing is how a customer concludes their estate is clean.
needs_attention (query)booleanNoOnly sites with a core or component update waiting, no WordPress installed, or a homepage that is not answering.
health (query)string<, healthy, unhealthy>NoFilter by the stored health verdict. ⭐ Applied **in the database**, unlike `update_state` — `health_status` is one indexed column written by one function, so there is no precede…

Response

NameTypeRequiredWhat it is
dataWordPressFleetSite[]Yes
pagePageMetaYes

Errors this endpoint can return

401 · 403 · 422 · 429