Brand Context API
Per-workspace business + voice profile. The active profile is injected as the leading block of every buddy’s system prompt, so updates take effect on the next chat turn.
See the Brand & Voice guide for the concept overview and UI walkthrough.
All endpoints require auth + workspace context.
Get
GET /api/v1/brand-context
Authorization: Bearer <token>Returns { "context": <BrandContext | {}> }. Empty object for a
workspace that has never configured one.
Upsert
PUT /api/v1/brand-context
Authorization: Bearer <token>
Content-Type: application/json
{
"businessName": "Acme Analytics",
"website": "https://acme.com",
"industry": "saas",
"description": "Revenue intelligence platform for mid-market operators.",
"audience": "Heads of Growth at Series-B SaaS",
"voice": {
"formality": 3,
"humor": 2,
"respect": 4,
"energy": 4
},
"links": {
"privacy": "https://acme.com/privacy",
"terms": "https://acme.com/terms"
}
}Shallow-merges nested voice and links objects. Unknown fields are
silently dropped. If enrichedSource is omitted it defaults to manual;
passing auto-detect stamps an enrichedAt timestamp.
Returns { "context": <BrandContext> } with the merged result.
Delete
DELETE /api/v1/brand-context
Authorization: Bearer <token>Returns { "ok": true }.
Field reference
| Field | Type | Constraint |
|---|---|---|
businessName | string | ≤ 200 chars |
website | string | ≤ 300 chars |
industry | enum | saas · ecommerce · fintech · healthcare · education · media · marketplace · agency · devtools · consumer · hardware · nonprofit · other |
industryOther | string | ≤ 120 chars |
description | string | ≤ 2000 chars |
audience | string | ≤ 1000 chars |
voice.formality | int 1–5 | Clamped; default 3 |
voice.humor | int 1–5 | Clamped; default 3 |
voice.respect | int 1–5 | Clamped; default 3 |
voice.energy | int 1–5 | Clamped; default 3 |
links.privacy / terms / pricing / download | URL | Must start with http:// or https://; ≤ 300 chars |
enrichedSource | enum | manual · auto-detect |
enrichedAt | ISO timestamp | Auto-set when enrichedSource = auto-detect |
Persisted per-workspace in ws_{id}_brand_context.json with the same
encryption policy as integration configs.