Brands
A brand is a structured token kit — logos, colors, typography, icons — that templates bind to. Bind a layer's fill to colors.primary once, and every render follows the brand; swap the brand (or override tokens per render) and the same design re-skins itself.
Token model
Brand tokens are a nested object addressed by dot paths:
| Group | Example tokens |
|---|---|
logos | logos.logo, logos.logoDark, logos.logoLight, logos.icon, logos.iconLight |
colors | colors.primary, colors.secondary, colors.accent, copy/background colors |
| Typography, icons, … | font families and weights, icon style preferences |
Each brand holds draft tokens (being edited) and live tokens (what published renders use). Templates reference tokens through brand bindings in the editor; a template can also declare a defaultBrandId.

Per-render overrides (brandTweaks)
Any render can override brand tokens by dot path without touching the brand itself — see the Rendering API:
{
"pageId": "PAGE_ID",
"format": "png",
"brandTweaks": {
"colors.primary": "#7c3aed",
"logos.logo": "https://cdn.example.com/acme-logo.svg"
}
}
This is the multi-brand pattern: one template, N brands, N on-brand outputs — without duplicating designs.
Managing brands
In the app: create and edit brands under your space's Brands section; the editor's brand panel binds layers to tokens.
Via MCP (API-key friendly): AI agents and scripts can manage brands through the MCP server with a Bearer API key — list_brands, get_brand, create_brand, update_brand, and resolve_brand (extract brand tokens from a website).
Via REST (session-authenticated): the dashboard uses these endpoints. They require a logged-in session — they are not callable with an API key today; use MCP for programmatic access.
| Method | Path | Notes |
|---|---|---|
GET | /api/v1/brands?page=&perPage= | List brands in the current space. ?public=true lists public brands without auth. |
GET | /api/v1/brands/:id | Fetch one brand. Public brands (with publicOn) need no auth. |
POST | /api/v1/brands | Create — { name, tokens?, draftTokens?, liveTokens?, variants?, extra? }. External image URLs in tokens are re-uploaded to your space. |
PUT | /api/v1/brands/:id | Update (same fields, all optional). |
DELETE | /api/v1/brands/:id | Soft-delete. |
List responses have the standard shape { list, count, pagesCount }; single-document responses return { doc }.
Brand fields
| Field | Description |
|---|---|
_id, name | Identity. |
draftTokens | Tokens as currently edited. |
liveTokens | Tokens used by published renders. |
tokens | Resolved/legacy token set. |
variants | Named variations of the kit. |
publicOn | When set, the brand is publicly readable. |