hosting

POST /v1/sites/{siteId}/cdn/swap

Move this site's CDN to a named destination.

All hosting endpoints

All developer docs

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 POST https://api.zinndigital.com/v1/sites/{siteId}/cdn/swap \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "to_kind": <string<platform, own, passthrough>> }'

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

Starts a durable move of this site's CDN to the destination you name, and answers 202 with a row to poll. ⭐ The one way a site's CDN moves. The deprecated switchSiteCdn and the staff rotateSiteCdn start this same workflow; they differ only in how the destination is named. switchSiteCdn takes {to_own: boolean}, which cannot name one of several accounts; this takes {to_kind, to_account_id}. ⭐⭐ Asynchronous because of a step no request can hold. The move only finishes once your registrar points at the destination's nameservers — minutes if the domain is registered with us, days if it is not. The source zone is removed only after the new nameservers are observed answering, so there is no moment at which your domain names an edge that is not there. Poll getSiteCdnSwap. Every step can be undone and every failure leaves the site serving: if the destination refuses the zone, or the credential has been revoked since you connected it, the site carries on being served exactly where it was. A Footprint-Free site needs footprint_acknowledged to move onto one account of your own (owner ruling G-3) — every site on one account can be linked to every other on it, which is the connection that line exists to prevent. Requires hosting.cdn.manage.

Parameters

NameTypeRequiredWhat it is
siteId (path)UuidYesSite ID (UUIDv7).

Request body

NameTypeRequiredWhat it is
to_kindstring<platform, own, passthrough>Yes
to_account_idobjectNoRequired when to_kind is own. ⛔ Must be one of your own connected accounts: an id naming a platform pool account is refused rather than honoured, because which pool…
footprint_acknowledgedbooleanNoRequired to move a Footprint-Free site off our pool (owner ruling G-3).
passthrough_targetstringNoRequired when to_kind is passthrough — the edge hostname your own CDN serves this site from. ⛔ Refused together with to_account_id: those are opposite operations and…
passthrough_labelstringNo

Response

NameTypeRequiredWhat it is
idstringYes
site_idstringYes
statusstring<pending, creating, repointing, awaiting_delegation, completed, rolled_back, failed>Yesawaiting_delegation is the state to render carefully: the move is complete on our side, both edges are serving the site, and it is waiting on your registrar. ⛔…
from_kindstringYes
from_labelstringYes
to_kindstringYes
to_labelstringYes
to_account_idobjectYes
nameserversstring[]YesThe nameservers your domain must be delegated to. ⛔ The field this operation exists to deliver: without it the move never completes, and it does not fail either — it simply…
nameservers_appliedbooleanYesWhether we set them (the domain is registered with us, or with a registrar you have connected) or you must.
delegation_observed_atobjectYesWhen the new delegation was observed answering — never when it was requested. The source zone is not removed until this is set.
old_zone_removedbooleanYesAn observation, not an intention. A source zone we could not delete leaves you being billed by that vendor for a site it no longer serves.
records_copiedintegerYesHow many of your OTHER DNS records were carried to the new zone. ⛔ Moving between two zone-owning CDNs re-delegates the whole domain, so your MX, SPF, DMARC and…
records_source_readbooleanYesWhether your existing records could be read at all. ⛔ Read this with records_copied, never instead of it: 0 is the truthful answer for a domain that has nothing but an…
detailstringYes
created_atstringYes
completed_atobjectYes
in_flightbooleanYesawaiting_delegation counts as in flight. It is the state most likely to be read as finished — the site works, both edges serve it — and starting a second move from there would…
cancellablebooleanYesWhether DELETE can still put the site back. ⛔ Narrower than in_flight: false once the domain's nameservers have been changed or the new delegation has been seen answering,…

Errors this endpoint can return

401 · 403 · 404 · 422 · 429 · 503