hosting
GET /v1/sites/{siteId}/subdomains
List a site's subdomains.
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/sites/{siteId}/subdomains \
-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 subdomains served by the site's hosting package and the document root each one points at. ⛔ Subdomains are the only surface here with a real quantity ceiling: limit is the lower of what the package template permits and what the customer bought, so can_create is arithmetic and not merely permitted. ⚖️ On our own fleet the ceiling is the plan's max_sites, because a subdomain spends one of them (owner ruling 2026-09-01). limit is then the site cap and used carries how much of it is already spent — by the customer's sites as well as their subdomains — so a client must render the caption from used and not from data.length. On the resold line used is absent and counting the rows is correct; nothing else about the shape differs. Requires sites.view. 404 for a site with no managed hosting package and no own-fleet placement.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
siteId (path) | Uuid | Yes | Site ID (UUIDv7). |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
data | SiteSubdomain[] | Yes | The subdomains on the package. |
limit | VendorAllowance | Yes | The effective ceiling on subdomains for this site. |
permitted | boolean | Yes | Whether the package type includes subdomains at all. |
can_create | boolean | Yes | permitted, and the effective ceiling has room. |
used | integer | No | How much of limit is already spent, when that is not data.length. ⚖️ Present only on our own fleet, where a subdomain consumes one of the plan's max_sites slots (owner… |
Errors this endpoint can return
401 · 403 · 404 · 429 · 503