hosting
POST /v1/sites/{siteId}/edge-domains
Point a domain at this site's deploy target.
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 POST https://api.zinndigital.com/v1/sites/{siteId}/edge-domains \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "hostname": <string> }'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
Attaches the hostname at the provider and, unless `write_dns` is false, publishes its DNS records in the same call — on the customer's own connected DNS account where they have one, otherwise on ours. A DNS failure does not fail the bind: the binding at the provider has already happened, and reporting failure would leave the customer retrying into an "already bound" error. The DNS outcome is on the returned row instead. Requires `hosting.deploy.manage`.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
siteId (path) | Uuid | Yes | Site ID (UUIDv7). |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
hostname | string | Yes | — |
write_dns | boolean | No | Publish the DNS records in the same call. Defaults to true because doing the DNS for the customer is the point of this surface; opting out is the unusual request. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
hostname | string | Yes | — |
is_primary | boolean | Yes | — |
status | string<pending, active, failed> | Yes | The provider's verdict on the binding. |
is_apex | boolean | Yes | Whether this hostname is the zone apex. An apex cannot hold a CNAME, so its record set is provider-specific and sometimes impossible — see `refusal`. |
dns_mode | string<unknown, our_zone, byo_dns, nameservers, manual> | Yes | Which DNS tier this hostname landed on. `unknown` means nothing has been attempted yet and must not be rendered as "no action needed". |
dns_zone | string | Yes | — |
dns_vendor | string | Yes | — |
dns_written_at | string | Yes | — |
resolves | boolean | Yes | Three-valued. `true` every wanted record is live, `false` at least one answered and is wrong, `null` no check has answered. `null` is not `false`. |
last_checked_at | string | Yes | — |
last_check_detail | string | Yes | — |
records | DnsRecordPlan[] | Yes | — |
refusal | string | Yes | Non-empty when no valid record set exists for this hostname at this provider — today, a Cloudflare Pages apex on a zone that is not on Cloudflare DNS, because that provider publ… |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429