domains
GET /v1/domains/{domainId}/premium-dns
Whether Premium DNS can be sold for this domain, and which row to sell.
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/domains/{domainId}/premium-dns \
-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
Premium DNS by Sectigo is sold **per zone**, so it is meaningless without a domain and its catalogue rows are deliberately not public — the account-level storefront must not offer it and the domain's own screen must. This is the read that screen uses. ⛔ **The offer is SUPPRESSED where the domain cannot use the product**, computed here rather than in a client. A Cloudflare-registrar domain cannot be delegated anywhere else at all, and a domain riding the shared fleet nameservers has no authoritative zone of its own for Sectigo to replace. Selling to either would charge the customer and then refuse them. `reason` is a **code**, never a sentence — the customer-facing wording is localizable and belongs in the client's own catalogue. `registrar_locks_nameservers` means the registrar permits no other nameservers; `no_zone_of_its_own` means there is no zone to upgrade; `registry_unavailable` means the public registry did not answer, so we cannot tell which case this is — and an unknown is not a yes. `code` is the `Extra.code` to purchase, chosen by the domain's product line through the catalogue's own fence rather than by a second price table. `site_id` is the site the purchase must name: the extra is site-scoped, so a buy button offered without one produces a charge that fulfilment then refuses. Requires `sites.view`, RLS-scoped.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
domainId (path) | Uuid | Yes | The domain's id. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
available | boolean | Yes | Show the offer. |
reason | string<registrar_locks_nameservers, no_zone_of_its_own, registry_unavailable> | Yes | Why the offer is hidden, as a CODE for the client to translate. `null` when `available` is true, and also when `active` is true — an existing purchase is not a suppression. |
code | string | Yes | The `Extra.code` to purchase, chosen by the domain's product line. |
active | boolean | Yes | Already bought for this domain and not refunded. The screen says so rather than offering it again — and it is a THIRD state, not `available: false` with a reason: hiding the car… |
Errors this endpoint can return
401 · 403 · 404 · 429