Skip to main content

Brand Kits

Apply consistent colors, fonts, logos, and styling across every chart — without touching each spec. Six built-in presets, plus custom kits you manage via the dashboard or API.

Built-in presets

Pass the preset name directly as brandKitId — no dashboard setup required:

brandKitIdDescription
obsidianDark slate background, emerald accent — high contrast dark mode
linenWarm off-white background, subtle grid — clean and readable
polarCool blue-grey palette — suited for analytical dashboards
studioNeutral studio tones — versatile across light and dark contexts
emberWarm orange-red palette — energetic and bold
harborMuted coastal tones — calm and professional
json
{ "type": "bar", "brandKitId": "obsidian", "data": { "labels": ["Jan", "Feb", "Mar", "Apr"], "datasets": [{ "label": "Revenue", "data": [12000, 15000, 18000, 22000] }] } }

Before & after

The same chart spec with and without a brand kit — one line added, completely different output:

Without brand kit (system default)

JanFebMarApr
json
{ "type": "bar", "data": { ... } }

With brandKitId: "obsidian"

JanFebMarApr
json
{ "type": "bar", "brandKitId": "obsidian", "data": { ... } }

Custom brand kits

Via the dashboard

  1. Go to Brand Kits in your dashboard
  2. Click Create kit
  3. Set colors, font, grid style, corner rounding, and optionally a logo URL
  4. Save — you get a UUID to use as brandKitId

Via the API

json
POST /api/v1/brand-kits { "name": "Acme Corp", "primaryColor": "#e85729", "accentColor": "#3a6cf5", "font": "Inter", "gridStyle": "subtle", "rounding": 4, "isDefault": false, "logoUrl": "https://acme.com/logo.png", "logoHeight": 32, "logoAlign": "right" }

The response includes an id (UUID). Pass it as brandKitId in render requests.

Per-request theme override

The theme object lets you override any brand-kit token on a per-render basis. Useful when a preset is close but you need a custom background or palette for a specific chart.

json
{ "type": "line", "brandKitId": "polar", "theme": { "backgroundColor": "#0f172a", "palette": ["#60a5fa", "#34d399", "#f472b6"], "mode": "dark" }, "data": { ... } }

Theme precedence chain

When multiple sources define the same token, the highest-priority source wins:

  1. Per-request theme — highest priority
  2. Brand kit (preset or saved UUID)
  3. Template defaults (when using a template)
  4. Raw Chart.js values in your spec
  5. System defaults — lowest priority

Saved kit fields

FieldRequiredDescription
nameyesHuman-readable name for the dashboard
primaryColoryesMain chart elements (bars, lines, first series)
accentColoryesSecondary elements and highlights
palettenoArray of hex colors overriding the two-color generation logic
backgroundColornoCard and chart background color
fontnoInter (default), Roboto, Source Sans, Montserrat, or DM Sans
modeno"light" or "dark" — affects axis tick and legend text color
gridStyleno"none" or "subtle"
roundingnoBar corner radius in px: 0, 4, or 8
isDefaultnoWhen true, applied automatically when brandKitId is omitted
logoUrlnoHTTPS URL of the logo image (card compositions only)
logoHeightnoRendered logo height in logical pixels (16–120, default 32)
logoAlignno"left" or "right" (default "right")