https://app.contenthero.ai/api/v1. All endpoints take a bearer API key.
Brand kit
Sections
A brand kit’s content is a set of sections, each one Markdown document. Every kit starts with eight:
The user can rename a section and add their own. Every section has:
- a key: stable and unique within the kit. Address sections by key; the user renames
sectionName, never the key. - a role: what a starter section means, the same in every kit whatever it is named. A section the user added has none.
- a body: Markdown, in the user’s own structure.
- a width:
fullorhalf, how wide its card is on the brand page. - a version: it increments on every body change. Send it back as
expectedVersionto write safely.
Reading a kit
GET /brand-kits/{brandKitId} answers one of three ways:
detail=summary with a filter, history without one, and any unknown role or tab are refused with a 400 naming the valid values.
Writing sections
Sendsections in the PATCH body, naming only the sections you change. An entry with a key edits that section:
bodyreplaces its whole content;revertTorestores an earlier version (it lands as a new version, so a revert can itself be reverted);sectionNamerenames it;widthsetsfullorhalf.
key adds a section of your own, and needs sectionName and tab. To remove a section, archive it through POST /archive with assetType: "brand_kit_section".
The write is all or nothing, and it lands before anything else in the patch. If any section has changed since the expectedVersion you sent, nothing is written and the response is a 409:
Removed inputs.
businessName, primaryOffer, nicheDefinition, positioning, audience, voiceProfile, contentStrategy, visualStyle, designPrinciples and fields are no longer accepted or returned, and GET /brand-kit-templates is gone. Sending a removed input is a 400 that names the replacement: write the matching section with sections, using the keys from a detail=summary read. Visual style and design principles belong in the design_guidelines section.Knowledge base
Large files and video or audio must be added by a hosted URL (
fileUrl), which the server fetches and chunks. Base64 (fileData) is for small documents and images. Adding is plan-limited; a limitReached response means the brand kit is at its cap.