agency-board
PUT /v1/boards/brand
Set the branding your shared boards carry.
Authentication
Send an API key as a bearer token. The key must carry the agency.board.manage 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 PUT https://api.zinndigital.com/v1/boards/brand \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "name": <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
Creates or updates the identity on your board share links. Requires agency.board.manage — reading it is a view permission; changing what everyone you have shared a board with sees is not. ⛔ This endpoint is why Boards branding bought nothing until 2026-09-15. The resolver, the entitlement and the shared-board payload were all built and correct, and the only surface that could create the brand row required reseller.manage — which a Boards customer has no reason to hold. ⛔ Deliberately narrower than PUT /v1/reseller/brand. panel_hostname and sending_domain are refused here by name, as they are there: both are agency capabilities a Boards plan does not include, and both cost real money to provision. Refused with 422 when branding is not on your plan — storing a brand the resolver would decline to serve is configuration that silently does nothing.
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… |
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
name | string | Yes | What your clients call you. Shown on every share link. |
primary_colour | string | No | A hex value such as #2b8a3e. Empty means use ours. |
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 branding on shared boards is on this org's plan. ⛔ Computed on the shared-board surface, so a Boards Business org reads true here while holding no platform-wide… |
surface | string | Yes | Which branding surface this answer is about. Always shared_board. |
name | string | Yes | — |
logo_url | string | Yes | Where the stored mark is served from, or empty. Read-only — the logo is an upload. |
primary_colour | string | Yes | — |
Errors this endpoint can return
401 · 403 · 404 · 422 · 429