hosting

PUT /v1/sites/{siteId}/cdn

Choose a site's CDN tier.

All hosting endpoints

Authentication

Send an API key as a bearer token. The key must carry the hosting.cdn.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 PUT https://api.zinndigital.com/v1/sites/{siteId}/cdn \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "tier": <CdnTier> }'

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

Mainstream lines only — a managed (footprint-free) site returns `FOOTPRINT_MANAGED`. Selecting `byo` requires an already-connected Cloudflare account, else `NO_CLOUDFLARE_CONNECTION`. The zone is created or torn down asynchronously; the response reflects the requested desired state. Requires `hosting.cdn.manage`.

Parameters

NameTypeRequiredWhat it is
siteId (path)UuidYesSite ID (UUIDv7).
Idempotency-Key (header)stringNoClient-generated key that makes an unsafe request replay-safe: the server stores the first response and returns it verbatim for repeats.

Request body

NameTypeRequiredWhat it is
tierCdnTierYes`byo` runs the site CDN on a CDN account the customer has **connected** — we hold the credential and drive it, so purge, TLS and zone state all work from the dashboard. ⛔⛔ `pass…
footprint_acknowledgedbooleanNoThe customer's explicit answer to "your own CDN account is a shared footprint across every site you put on it". **Required to move a Footprint-Free site to `byo`** (owner ruling…
passthrough_targetstringNo⛔⛔ **Accepted by the schema and REFUSED by this endpoint, on every tier.** It is declared so the refusal can name what the caller did wrong rather than arriving as a generic unk…
passthrough_labelstringNoAccepted and ignored here for the same reason as `passthrough_target` — set it on `switchSiteCdn`, which is the operation that moves the site.

Response

NameTypeRequiredWhat it is
old_zone_removedbooleanNoOnly on a `switchSiteCdn` response: whether the site's **previous** zone was really deleted. ⛔ An observation, not an intention — a source account that refuses the delete does n…
nameserversstring[]NoOnly on a switch response, and only for a zone-owning CDN: the nameservers the destination zone is served from. ⛔ **The customer has to act on this.** Cloudflare assigns a names…
site_idUuidYesUUIDv7 identifier — sortable by creation time (docs/02 §8).
product_linestringYesThe site product line, which decides whether the CDN is managed.
managedbooleanYesTrue on the footprint-free line, where the CDN is platform-owned footprint machinery the customer neither configures nor sees.
enabledbooleanYes
tierCdnTierYes`byo` runs the site CDN on a CDN account the customer has **connected** — we hold the credential and drive it, so purge, TLS and zone state all work from the dashboard. ⛔⛔ `pass…
providerobjectYesDisplay name of the active CDN, or **null when managed is true** — naming the CDN in front of a footprint-free site would leak the footprint the line exists to hide (register #9…
accountCdnAccountYesWhich CDN account serves this site, and whether its credential still works. ⛔ Always present — never omitted for "we do not know", because an absent object is read by a client a…
passthrough_targetstringNoWhere a `passthrough` site's traffic is pointed — the edge hostname the customer's own CDN gave them, which we publish as this domain's answer. **Empty on every other tier**, wh…
passthrough_labelstringNoWhat the customer calls the CDN they run themselves. ⚠️ **Unverified** — we hold no credential for that edge, so this is their claim and a client must present it as theirs rathe…
price_minorintegerYesMonthly premium-tier price in integer minor units (§2.8).
currencystringYesISO-4217 code the price_minor above is expressed in.
edgeCdnEdgeYesWhich edge is **actually** in front of this site, and which of the CDN screen's controls will do anything. ⛔⛔ **`enabled` above is not the same question and the two disagree on…

Errors this endpoint can return

401 · 403 · 404 · 422 · 429