reseller

PUT /v1/reseller/brand

Set the identity your clients see.

Semua titik akhir reseller

Pengesahan

Hantar kunci API sebagai token pembawa. Kunci tersebut mesti membawa kebenaran reseller.manage; kunci yang tidak mempunyainya akan ditolak dengan 403, bukan 404.

Tempat ID organisasi anda diletakkan

Titik akhir ini mengambil org_id sebagai parameter pertanyaan. Biarkan ia kosong dan panggilan tersebut meliputi keseluruhan subpohon penyewaan anda; hantarkannya untuk mengecilkan panggilan kepada satu organisasi.

ID organisasi anda terletak pada skrin kekunci API dalam papan pemuka anda, di sebelah kekunci itu sendiri. Ia adalah ID yang sama dalam setiap panggilan yang anda buat.

Cuba

Gantikan apa sahaja di dalam kurungan sudut dengan nilai anda sendiri, dan pemegang tempat kunci dengan kunci dari papan pemuka anda.

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

Sudah log masuk? Konsol API dalam papan pemuka anda mengisi id organisasi sebenar dan kunci anda sendiri, serta menjalankan permintaan terhadap API langsung supaya anda boleh melihat respons sebenar. Buka penamat ini dalam konsol API

Butiran

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

NamaJenisDiperlukanApakah ia
org_id (query)UuidTidakThe 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…

Badan permintaan

NamaJenisDiperlukanApakah ia
namestringYaWhat your clients are told they are using. Never blank.
primary_colourstringTidak
support_urlstringTidak
status_urlstringTidak
paletteobjectTidakNamed 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, >Tidak
font_keystringTidak
font_google_familystringTidakInstall 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, >Tidak
densitystring<comfortable, compact, >Tidak
corner_radiusstring<soft, square, >Tidak
colour_schemestring<system, light, dark, >Tidak
favicon_sha256stringTidak
email_logo_sha256stringTidak
dns_nameserversstring[]TidakYour 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.

Respons

NamaJenisDiperlukanApakah ia
configuredbooleanYaWhether a brand row exists yet. False renders an empty form, not a 404.
entitledbooleanYaWhether white-label is on this org's plan at all.
namestringYa
logo_urlstringYa
primary_colourstringYa
support_urlstringYa
status_urlstringYa
panel_hostnamestringYaRead-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_activebooleanYaWhether 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_statusstringYaThe edge's own status word, for display. Never branch on it.
panel_hostname_recordsBrandDnsRecord[]Ya
sending_domainstringYaRead-only here — provisioned on `/v1/reseller/brand/sending-domain`, because an unverified domain does not deliver.
sending_domain_verifiedbooleanYaRead-only. The mail provider's answer, not a setting.
sending_domain_statusstringYaThe provider's own status word, for display. Never branch on it.
sending_domain_recordsBrandDnsRecord[]Ya
paletteobjectTidakNamed 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, >Tidak`catalogue` for one of `font_catalogue`, `google` for a family we self-host.
font_keystringTidakThe catalogue key when `font_source` is `catalogue`.
font_google_familystringTidakA 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, >Tidak
densitystring<comfortable, compact, >Tidak
corner_radiusstring<soft, square, >Tidak
colour_schemestring<system, light, dark, >TidakThe 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_sha256stringTidakA 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_urlstringTidak
email_logo_sha256stringTidakThe 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_urlstringTidak
dns_nameserversstring[]TidakYour **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[]TidakThe 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_optionsobjectTidakThe allowed values for each layout choice, keyed by field name.
palette_tokensstring[]TidakThe colour tokens `palette` may name.
accent_contrastBrandAccentContrastTidakHow 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…

Ralat yang boleh dikembalikan oleh titik akhir ini

401 · 403 · 404 · 422 · 429