public
POST /v1/public/domains/suggest
Alternative domains worth offering alongside a search.
Authentication
This endpoint is public. It takes no credential and no organisation — it is what our own marketing site and AI answer engines read.
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/public/domains/suggest \
-H "Content-Type: application/json" \
-d '{ "query": <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
The upsell grid (docs/31 §5.3). Ranked in tiers — **brand protection** (you are buying `acme.com`; somebody else buying `acme.net` can pass for you), then the **regional** extension for the visitor's country, then **same-intent** alternatives, then popular filler — and each row says which tier it came from, so a surface can make the argument rather than just list names. Every suggestion is priced and tokenised by **exactly the same code path as `searchPublicDomains`**: a grid price that came from anywhere else is a price the basket then refuses, at the moment the customer has already decided to buy. Its own endpoint rather than a field on the search response, because each suggestion is a paid registrar availability call: the primary result must not wait for the upsell, and the upsell must be skippable. It shares the search abuse budget — the two together are what one visitor's session costs us at the registrar. The visitor's country comes from Cloudflare's `CF-IPCountry`, an edge-set header the browser never sends, so no CORS allow-list entry is involved.
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
query | string | Yes | The name the visitor searched — bare (`acme`) or full (`acme.com`). |
country | string | No | ISO-3166 alpha-2 **hint**, used only when the edge did not state the visitor's country. The `CF-IPCountry` header wins whenever it is present: it is set by the edge and cannot b… |
exclude | string[] | No | Names the primary search already answered. Each suggestion costs a paid registrar call, so re-checking a name already on the visitor's screen is money spent to tell them what th… |
limit | integer | No | Grid size. The maximum is the hard cap on anonymous vendor spend per request. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
results | DomainSearchResult[] | Yes | — |
Errors this endpoint can return
422 · 429