Brands API
The demo brand profiles, as JSON — so seed scripts and other tools can read the same data the Brands page renders.
Endpoints
| Method & path | Returns |
|---|---|
| GET /api/brands | All brands: { count, brands } |
| GET /api/brands?id=<id> | A single brand object, or 404 if the id is unknown. |
Valid ids: praxis-kessler, decades, soma-studio.
Asset URLs
The logo, service image, and staff image fields are returned as absolute URLs against the request origin, so a script can fetch them directly without rebuilding paths.
List response
{
"count": 3,
"brands": [
{ /* brand object, see below */ }
]
}Brand object
Each brand has these fields. Arrays are trimmed to one entry here for brevity.
{
"id": "praxis-kessler",
"name": "Praxis Kessler",
"type": "Small solo Heilpraktiker",
"shortDescription": "A one-woman naturopathic practice in Hamburg…",
"description": "A one-woman naturopathic practice run by Nora Kessler…",
"website": "praxis-kessler.de",
"offering": "Naturopathy, acupuncture & herbal medicine",
"logo": "https://<host>/brands/logos/kessler.png",
"initials": "NK",
"typeface": "Jost / Inter",
"palette": {
"bg": "#F5F0EB",
"primary": "#9C8B7E",
"accent": "#6F5F52",
"ink": "#25201C",
"onPrimary": "#FFFFFF"
},
"locations": ["Hamburg-Eimsbüttel"],
"services": [
{
"name": "Naturopathy Consultation",
"description": "90 min initial deep-dive, 45 min follow-ups.",
"icon": "consultation",
"image": "https://<host>/brands/kessler/services/naturopathy.png"
}
],
"staff": [
{
"name": "Nora Kessler",
"role": "Heilpraktikerin & Founder",
"image": "https://<host>/brands/kessler/staff/nora-kessler.png"
}
],
"personality": "Traditional and relationship-first…",
"circleOS": {
"used": ["Online booking for new and returning patients"],
"notUsed": ["Multi-location configuration (single location only)"]
}
}| Field | Description |
|---|---|
| id, name, type | Identity and category label. |
| shortDescription, description | One-line and full company copy. |
| website, offering, personality | Domain, what they offer, and tone. |
| logo, initials, typeface | Absolute logo URL, fallback initials, and the typeface label. |
| palette | Brand colours: bg, primary, accent, ink, onPrimary. |
| locations | Array of location strings. |
| services[] | name, description, icon, and optional image / price. |
| staff[] | name, role, and optional image. |
| circleOS | used and notUsed feature lists. |
Use it from a script
// All brands
const { brands } = await fetch("https://<host>/api/brands").then((r) =>
r.json(),
);
for (const brand of brands) {
console.log(brand.name, brand.services.length);
}
// A single brand
const decades = await fetch("https://<host>/api/brands?id=decades").then((r) =>
r.json(),
);