GET /v1/mail/domains
Every domain the organization could have email on, searchable.
Authentication
Send an API key as a bearer token. The key must carry the mail.view permission; a key without it is refused with 403, not 404.
Where your organisation id goes
This endpoint takes org_id as a query parameter. Leave it out and the call covers your whole tenancy subtree; send it to narrow the call to one organisation.
Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.
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/mail/domains \
-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
The mail domain directory behind the /mail screen's domain picker (MAILUX, owner 2026-10-27: "we should have emails tied to domains on here … and no search option at all to find the one you're looking for"). One row per hostname, the union of: domains registered with us, connected to us or transferring in; every live site's primary domain; and every domain that already has an email service. Each row carries the service on it (or null) and whether email can be set up there at all, with the reason when it cannot (a hostname on our own platform domain — a preview or staging address — never takes mail). Searched and paged on the server (q, cursor, limit): an account with thousands of domains never loads them all. Ordered by hostname; the cursor is the last hostname returned. A site's extra alias hostnames are not listed (set mail up on the domain itself). Requires mail.view; RLS-scoped.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
cursor (query) | string | No | Opaque cursor from a previous page's page.next_cursor. |
limit (query) | integer | No | Maximum items to return (page size). |
org_id (query) | Uuid | No | Restrict to one organization in scope. Narrowing only, as on GET /v1/mail/services: an organization outside the caller's subtree filters to nothing rather than 403-ing. |
q (query) | string | No | Case-insensitive substring of the hostname. Empty lists everything. |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
data | MailDomain[] | Yes | — |
page | PageMeta | Yes | — |
Errors this endpoint can return
401 · 403 · 429