Brand voice, factsheet, and profile
Read and edit the brand voice, factsheet, and company profile that ground every piece of content.
Brand voice, the factsheet, and the company profile are a brand's source-of-truth context: how it writes, what it does, and who it's for. Read these before generating any content so it matches the brand; edit them to keep the brand's positioning current. This context is what content workflows draw on when writing — see Build a workflow.
When to use
Read (get_*) before writing content, so tone and facts are accurate. Patch by hand (update_*) for targeted edits. Rebuild from the knowledge base (rebuild_brand_voice / regenerate_factsheet) when the underlying material has changed and you want a fresh pass. A field returned as null is empty in Pendium, not unsupported.
Typical sequence
get_brand_voice,get_factsheet, and/orget_company_profileto load current context.- Edit by hand:
update_brand_voice,update_factsheet,update_company_profile. - Or regenerate from knowledge:
rebuild_brand_voice,regenerate_factsheet(background, Paid).
Tools
get_brand_voice
Get brand voice guidelines plus the core company profile — voice summary, tone traits, style guide, emotional tone targets, storytelling style, do/don't examples, writing examples, visual aesthetics, and the positioning fields (what we do, offerings label, who it's for, target audience, key facts, credibility signals, AI-ready answers, business profiles, and more). Use it to write content that matches the brand's tone.
Authentication: Required.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent ID to get brand voice for. |
Either brandVoice or companyProfile may be null if the brand hasn't completed onboarding for that data. For only the company profile (every stored field), use get_company_profile.
update_brand_voice
Patch a brand's voice guidelines — the tone and style settings that steer how content is written. Partial update: only the fields you pass change; object fields (storytellingStyle, examples, writingExamples, visualAesthetics) are replaced wholesale. Synchronous, no LLM call, no credit cost. Pass at least one field — an all-empty update is rejected. Call get_brand_voice first to see current values.
Authentication: Required.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent whose brand voice to update. |
voiceSummary | string | No | How the brand communicates — tone, personality, positioning. |
formalityLevel | enum | No | casual, neutral, or professional. |
sentenceLength | enum | No | short, medium, or long. |
useOfEmojis | enum | No | never, sometimes, or often. |
useOfHashtags | enum | No | minimal, moderate, or strategic. |
preferredPerspective | string | No | Preferred narrative perspective (e.g. first-person, third-person, mixed). |
coreToneTraits | array | No | Core tone traits (replaces the existing list). Each item is { trait, description }. |
emotionalToneTargets | array | No | Emotional goals for content, e.g. ["inspire action", "build trust"] (replaces the existing list). |
storytellingStyle | object | No | { narrativePreference, callToActionStyle } (replaces the existing object). |
examples | object | No | Do / don't examples: { do[], dont[] } (replaces the existing object). |
writingExamples | object | No | { headlineExample, captionExample, responseExample } (replaces the existing object). |
visualAesthetics | object | No | { typography, designAesthetic, logoPresence, logoStyle } (replaces the existing object). |
The style enums plus preferredPerspective are stored under styleGuide; passing only some leaves the rest of styleGuide untouched. To edit the company profile instead, use update_company_profile. To rebuild the whole voice from the knowledge base, use rebuild_brand_voice.
rebuild_brand_voice
Regenerate the brand voice from the agent's knowledge base, falling back to the company profile when no knowledge sources exist. Runs in the background — returns immediately after enqueueing (status: "queued"); the rebuilt voice lands a short while later. Already-populated fields are preserved. Poll get_brand_voice after a minute or two to see the result.
Authentication: Paid — requires a Starter or Pro plan (LLM regeneration).
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent whose brand voice to rebuild. |
To patch individual voice fields by hand instead (no plan requirement), use update_brand_voice.
get_factsheet
Get the brand's factsheet — a comprehensive markdown overview of the company, its products, positioning, and key facts. Auto-generated during onboarding from website content and optionally refined by the brand owner. Use it as foundational context when writing any content.
Authentication: Required.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent ID to get the factsheet for. |
Returns content (markdown), autoGeneratedAt, lastEditedAt, and interviewAnswers (onboarding responses — differentiators, customers, etc.). The factsheet field is null if the brand hasn't completed onboarding.
update_factsheet
Replace the brand's factsheet content. This overwrites the whole factsheet with the text you provide (it's not a merge). Synchronous, no LLM call, no credit cost. The change takes effect immediately across the dashboard's brand-context surfaces. Use get_factsheet first to see the current content.
Authentication: Required.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent whose factsheet to update. |
content | string | Yes | The full factsheet content (replaces the existing factsheet). |
To regenerate it from the knowledge base instead, use regenerate_factsheet.
regenerate_factsheet
Regenerate the brand factsheet from the agent's knowledge base. Runs in the background — returns immediately after enqueueing (status: "queued"); the new factsheet lands a short while later and replaces the existing one even if a factsheet already exists. Poll get_factsheet after a minute or two to see the result.
Authentication: Paid — requires a Starter or Pro plan (LLM regeneration).
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent whose factsheet to regenerate. |
To set the factsheet text by hand instead (no plan requirement), use update_factsheet.
get_company_profile
Get the complete company profile — every stored positioning field, exactly as entered in the Pendium UI. This is the full read-only export of the brand's source-of-truth positioning data.
Authentication: Required.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent ID to get the company profile for. |
Includes offeringsLabel, whatWeDo, whoItsFor (personas), targetAudience, keyFacts, credibilitySignals, aiReadyAnswers, businessProfiles, and more. companyProfile is null if the brand hasn't created a profile yet; any individual field returned as null is empty, not unsupported. For brand voice (tone, style guide, writing examples), use get_brand_voice.
update_company_profile
Patch a brand's company profile — what it does, who it's for, key facts, credibility signals, offerings, AI-ready answers, and more. Partial update: only the fields you pass change; array/object fields are replaced wholesale. Synchronous, no LLM call, no credit cost. Pass at least one field — an all-empty update is rejected. Use get_company_profile first to see current values.
Authentication: Required.
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The agent whose company profile to update. |
name | string | No | Company or brand name. |
tagline | string | No | Company tagline or slogan. |
industry | string | No | Primary industry or sector. |
website | string | No | Company website URL. |
description | string | No | Comprehensive company description. |
missionStatement | string | No | Company mission or purpose statement. |
uniqueValueProposition | string | No | What makes the company unique. |
geographicFocus | string | No | Geographic market focus. |
brandPersonality | string | No | Brand personality description. |
whatWeDo | string | No | Rich explanation of what the company does (2-4 sentences). |
offeringsLabel | enum | No | Offerings category label: Services, Products, or Features. |
productsOrServices | array | No | Products or services offered (replaces the existing list). |
competitorsOrPeers | array | No | Competitors or peer brands (replaces the existing list). |
credibilitySignals | array | No | Trust signals — awards, partnerships, metrics (replaces the existing list). |
keyFacts | array | No | Business facts — each item is { label, value } (replaces the existing list). |
whoItsFor | array | No | Target personas — each item is { title, description, painPoints[] } (replaces the existing list). |
targetAudience | object | No | Structured audience { demographics, psychographics, keyPainPoints, desiredOutcomes } (replaces the existing object). |
aiReadyAnswers | array | No | Q&A pairs — each item is { question, answer } (replaces the existing list). |
socialHandles | object | No | Per-platform handles { instagram, facebook, linkedin, twitter_x, tiktok, youtube } (replaces the existing object — include every handle you want to keep). Scrapeable profiles (LinkedIn company pages, YouTube channels) are also read into the brand's knowledge base in the background; changing or clearing one cleans up the old profile's knowledge automatically. |
businessProfiles | object | No | External directory profile URLs (replaces the existing object). |
keyPages | array | No | Curated brand pages for internal linking — each item is { url, title, description?, instructions? } (replaces the existing list). |
toneExamples | object | No | Example on-brand content { websiteExcerpt?, socialMediaExcerpt? } (replaces the existing object). |
To edit brand voice (tone, style, writing examples) instead, use update_brand_voice.