reseller
GET /v1/reseller/brand
The identity your clients see.
Authentication
Send an API key as a bearer token. The key must carry the reseller.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/reseller/brand \
-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
Your brand as your clients see it — the name on their panel, the logo, the accent colour and the help links. Requires reseller.view. ⛔ A brand you have not set up yet is a 200 with configured: false, never a 404: the screen renders an empty form either way, and a 404 would make the app decide what "no brand" means. entitled reports whether white-label is on your plan at all.
Parameters
| Name | Type | Required | What it is |
|---|---|---|---|
org_id (query) | Uuid | No | The organization this call acts on. Optional for a caller with exactly one direct membership; required for anyone with more than one — which is every reseller and every agency… |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
configured | boolean | Yes | Whether a brand row exists yet. False renders an empty form, not a 404. |
entitled | boolean | Yes | Whether white-label is on this org's plan at all. |
name | string | Yes | — |
logo_url | string | Yes | — |
primary_colour | string | Yes | — |
support_url | string | Yes | — |
status_url | string | Yes | — |
panel_hostname | string | Yes | Read-only here — provisioned on /v1/reseller/brand/panel-hostname, because a hostname you merely typed is a link to nowhere on every client's screen. |
panel_hostname_active | boolean | Yes | Whether the edge is actually serving it. ⛔ Measured, not the edge's status word: a custom hostname can be active with a valid certificate and still answer 522, so the engine… |
panel_hostname_status | string | Yes | The edge's own status word, for display. Never branch on it. |
panel_hostname_records | BrandDnsRecord[] | Yes | — |
sending_domain | string | Yes | Read-only here — provisioned on /v1/reseller/brand/sending-domain, because an unverified domain does not deliver. |
sending_domain_verified | boolean | Yes | Read-only. The mail provider's answer, not a setting. |
sending_domain_status | string | Yes | The provider's own status word, for display. Never branch on it. |
sending_domain_records | BrandDnsRecord[] | Yes | — |
palette | object | No | Named design-system colour tokens, {token: "#rrggbb"}, over the closed set in palette_tokens. ⛔ Hex only, and that is a security boundary rather than a formatting rule: a CSS… |
font_source | string<catalogue, google, > | No | catalogue for one of font_catalogue, google for a family we self-host. |
font_key | string | No | The catalogue key when font_source is catalogue. |
font_google_family | string | No | A Google family NAME, never a URL. ⛔ We fetch the family once, server-side, and serve the woff2 files from our own origin — so your clients never make a request to Google and… |
nav_position | string<side, top, > | No | — |
density | string<comfortable, compact, > | No | — |
corner_radius | string<soft, square, > | No | — |
colour_scheme | string<system, light, dark, > | No | The scheme a client's first visit lands on. ⛔ A default, never a lock — the panel's own theme toggle still works, because removing a visitor's dark mode is an accessibility… |
favicon_sha256 | string | No | A favicon distinct from the panel logo. Upload it with POST /v1/branding/logo and purpose=favicon. Empty falls back to the logo — a 32px render of a wordmark beats somebody… |
favicon_url | string | No | — |
email_logo_sha256 | string | No | The mark used in transactional mail (purpose=email). Separate because the constraints differ: mail clients render on a light background whatever the reader's theme, block SVG,… |
email_logo_url | string | No | — |
dns_nameservers | string[] | No | Your own authoritative nameservers, so a client typing them into a registrar never reads ours. Empty means ours. ⛔ At least two, or none — registrars refuse a single… |
font_catalogue | object[] | No | The typefaces you may pick, served with the value so a new one appears in your picker on deploy rather than when somebody remembers to update the app too. |
layout_options | object | No | The allowed values for each layout choice, keyed by field name. |
palette_tokens | string[] | No | The colour tokens palette may name. |
accent_contrast | BrandAccentContrast | No | How readable your accent colour is, and the ink we will paint on it. ⚠️ Reported, never enforced. A legitimate corporate colour can be mid-grey, and refusing to save it would… |
Errors this endpoint can return
401 · 403 · 404 · 429