reseller

PUT /v1/reseller/brand

Set the identity your clients see.

Alle reseller Endpunkte

Authentifizierung

Senden Sie einen API-Schlüssel als Bearer-Token. Der Schlüssel muss über die Berechtigung reseller.manage verfügen; ein Schlüssel ohne diese wird mit 403 statt 404 abgelehnt.

Hier kommt Ihre Organisations-ID hin

Dieser Endpunkt akzeptiert org_id als Abfrageparameter. Lassen Sie ihn weg, erfasst der Aufruf Ihren gesamten Mandanten-Unterbaum; übergeben Sie ihn, um den Aufruf auf eine Organisation einzugrenzen.

Die ID Ihrer Organisation finden Sie im Dashboard auf dem Bildschirm für API-Schlüssel direkt neben dem Schlüssel selbst. Sie ist bei jedem Ihrer Aufrufe dieselbe.

Ausprobieren

Ersetzen Sie alles in spitzen Klammern durch Ihre eigenen Werte und den Platzhalter für den Schlüssel durch einen Schlüssel aus Ihrem Dashboard.

curl -X PUT https://api.zinndigital.com/v1/reseller/brand \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "name": <string> }'

Angemeldet? Die API-Konsole in Ihrem Dashboard trägt automatisch Ihre echte Organisations-ID sowie Ihren eigenen Schlüssel ein und führt die Anfrage gegen die Live-API aus, sodass Sie die tatsächliche Antwort sehen können. Öffnen Sie diesen Endpunkt in der API-Konsole

Details

Creates or updates your brand. Requires `reseller.manage` — reading your brand is a view permission; changing what every one of your clients sees is not. ⛔ **This endpoint is why white-label was unreachable until 2026-08-16.** The resolver, the entitlement gate, the org-tree walk, the e-mail path and the panel painting were all built and correct, and nothing anywhere could create the row they all read — `Brand` held zero rows across the estate. ⛔ `panel_hostname`, `sending_domain` and `sending_domain_verified` are **refused here, with a sentence saying why**, rather than ignored. All three are facts about the outside world this endpoint cannot establish: a hostname nobody serves is a link to nowhere, an unverified sending domain does not deliver, and a verified flag a customer can set is a wish rather than a verification. Refused with 422 when white-label is not on your plan — storing a brand the resolver would decline to serve is configuration that silently does nothing.

Parameter

NameTypErforderlichWas es ist
org_id (query)UuidNeinThe 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 agen…

Anfragekörper

NameTypErforderlichWas es ist
namestringJaWhat your clients are told they are using. Never blank.
primary_colourstringNein
support_urlstringNein
status_urlstringNein
paletteobjectNeinNamed colour tokens, hex values only. An unrecognised token is a **422 naming it**, not a silent drop — a field that is ignored is how somebody comes to believe the platform is…
font_sourcestring<catalogue, google, >Nein
font_keystringNein
font_google_familystringNeinInstall it with `POST /v1/reseller/brand/font` first — this field selects a family we already hold, and setting it alone would name a stylesheet with nothing behind it.
nav_positionstring<side, top, >Nein
densitystring<comfortable, compact, >Nein
corner_radiusstring<soft, square, >Nein
colour_schemestring<system, light, dark, >Nein
favicon_sha256stringNein
email_logo_sha256stringNein
dns_nameserversstring[]NeinYour own nameservers. **At least two, or none** — a registrar refuses a single one, and refusing it here with a sentence is better than at the registrar with a code.

Antwort

NameTypErforderlichWas es ist
configuredbooleanJaWhether a brand row exists yet. False renders an empty form, not a 404.
entitledbooleanJaWhether white-label is on this org's plan at all.
namestringJa
logo_urlstringJa
primary_colourstringJa
support_urlstringJa
status_urlstringJa
panel_hostnamestringJaRead-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_activebooleanJaWhether 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 engi…
panel_hostname_statusstringJaThe edge's own status word, for display. Never branch on it.
panel_hostname_recordsBrandDnsRecord[]Ja
sending_domainstringJaRead-only here — provisioned on `/v1/reseller/brand/sending-domain`, because an unverified domain does not deliver.
sending_domain_verifiedbooleanJaRead-only. The mail provider's answer, not a setting.
sending_domain_statusstringJaThe provider's own status word, for display. Never branch on it.
sending_domain_recordsBrandDnsRecord[]Ja
paletteobjectNeinNamed 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 CS…
font_sourcestring<catalogue, google, >Nein`catalogue` for one of `font_catalogue`, `google` for a family we self-host.
font_keystringNeinThe catalogue key when `font_source` is `catalogue`.
font_google_familystringNeinA 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 th…
nav_positionstring<side, top, >Nein
densitystring<comfortable, compact, >Nein
corner_radiusstring<soft, square, >Nein
colour_schemestring<system, light, dark, >NeinThe 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_sha256stringNeinA 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_urlstringNein
email_logo_sha256stringNeinThe 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_urlstringNein
dns_nameserversstring[]NeinYour **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 nameser…
font_catalogueobject[]NeinThe 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_optionsobjectNeinThe allowed values for each layout choice, keyed by field name.
palette_tokensstring[]NeinThe colour tokens `palette` may name.
accent_contrastBrandAccentContrastNeinHow 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 woul…

Fehler, die dieser Endpunkt zurückgeben kann

401 · 403 · 404 · 422 · 429