Welcome
Brandfine is a multi-tenant headless CMS. Pick your integration path.
Brandfine ships every workspace's content through one stable
HTTP surface: /external/*. Consumer sites — Astro, Next.js,
Remix, anywhere with fetch — read posts, navigations,
categories, and workspace metadata from that surface and
render them however they like.
Two integration paths:
REST API
Plain HTTP. Use it directly from any language with a JSON HTTP
client. Auth is a single workspace-scoped X-Api-Key header.
SDK (TypeScript)
@brandfine/client wraps the REST surface with typed methods,
server-side caches with stale-while-revalidate semantics, locale
helpers, navigation resolvers, and a framework-agnostic webhook
handler. @brandfine/client-astro adds an Astro APIRoute
shape on top.
npm install @brandfine/client @brandfine/client-astroStart with the SDK quickstart →
Core concepts
Whichever path you take, you'll work with the same domain model: workspaces own posts (grouped by post types), categories, and navigations. Translation groups tie locale variants of the same article together.
Built-in analytics
Every workspace gets a self-hosted analytics surface inside the CMS — visitor counts, top pages, sources, real-time view, and a content × traffic join that links each pageview back to the post that produced it. Cookieless, no consent banner, no third-party data sharing.
Concept overview → · SDK install →
Contact-form submissions
bf.submissions.create({...}) ingests contact-form submissions
into the workspace's Submissions inbox. Standard fields
(name, email, message) plus optional phone, subject,
source, and free-form metadata round-tripped to the CMS.
Using AI to integrate?
These docs ship with llms.txt and
llms-full.txt — markdown-formatted, AI-friendly
versions of everything you see here. Drop the URL into ChatGPT,
Claude, or Cursor (@docs https://docs.brandfine.co/llms-full.txt)
and the model has the full reference in context.