hosting

GET /v1/wordpress/sites

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

All hosting endpoints

All developer docs →

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)WordPressUpdateStateNo422 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…

Response

NameTypeRequiredWhat it is
dataWordPressFleetSite[]Yes—
pagePageMetaYes—

Errors this endpoint can return

401 · 403 · 422 · 429