ai
GET /v1/ai/site-builds/targets
Where a draft can be published, and what is already on each destination.
Authentication
Send an API key as a bearer token. The key must carry the hosting.deploy.manage 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/ai/site-builds/targets \
-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
Lists every site the caller may deploy to, and — the part that did not exist before — **what is already there**. Publishing used to take a site id with no way to discover which ids were valid, and no way to learn that a destination had a live business on it. `occupancy` is the field to read, never `known_files`: * `empty` — nothing is deployed. Publishing here destroys nothing. * `ours` — we published the current contents ourselves, from an earlier draft. * `occupied` — something is there and we can read it, because the site has a connected repository. * `unknown` — something may be there and we **cannot** read it. This is deliberately not reported as `empty`: an empty destination is precisely the one where overwriting is safe, so the two must never collapse. A destination we cannot read offers `replace` only, and the customer is told to connect a repository if they want to add to it instead. `allowed_dispositions` is advisory — the screen uses it to decide which buttons to show, and the engine re-derives it when a publication is started. A client that offers a disposition this list omits is refused with `disposition_not_available`. Requires `hosting.deploy.manage`, even though this only reads: the list is "places you may publish to", and offering a destination the caller cannot use both answers the wrong question and discloses sites they may only view.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
search (query) | string | No | Match against the destination's primary domain. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
targets | SiteMakerTarget[] | Yes | — |
truncated | boolean | Yes | `true` when `targets` is a full page and more destinations exist beyond it. The list is ordered by hostname and capped, so a site that sorts past the cap is absent rather than l… |
dispositions | object[] | Yes | The catalogue, so a client never hardcodes the choices and adding one cannot leave a stale copy behind. |
Errors this endpoint can return
401 · 403 · 429