reseller

POST /v1/branding/logo

Upload your logo.

All reseller endpoints

Authentication

Send an API key as a bearer token. The key must carry the reseller.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 POST https://api.zinndigital.com/v1/branding/logo \
  -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 logo, as an image file. Requires `reseller.manage`. ⚖️ **Uploaded, never linked** — owner ruling 2026-09-01. We store the image ourselves and serve it from `GET /v1/branding/logo/{sha256}`, and that is what makes it possible to print it on your invoices: an invoice is rendered offline from a frozen copy of the document and cannot fetch anything, so a link to your own web server could never appear on one. It would also mean a document that changes if your site goes down. Send the file as the `logo` part of a `multipart/form-data` request. PNG, JPEG, WebP and GIF, up to 256 KB and 4000 px on a side. ⛔ SVG is refused: it can carry scripts and remote references. ⛔ Changing your logo does **not** change invoices already issued. Each document keeps the logo it was issued with, because it is referenced by a digest of the exact image.

Parameters

NameTypeRequiredWhat it is
org_id (query)UuidNoThe 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…

Response

NameTypeRequiredWhat it is
logo_urlstringYes
sha256stringYes
purposestring<panel, favicon, email>NoWhich mark was stored — echoed back so a caller can confirm.
content_typestringNo
widthintegerNo
heightintegerNo
byte_sizeintegerNo

Errors this endpoint can return

401 · 403 · 422 · 429