Topolo Docs Topolo Platform
Open workspace

List built-in Socialize voice templates

Inspect the shipped voice templates, their full settings and the distinction between templates and saved brand presets.

Outcome

Read the built-in voice templates shipped with Socialize before choosing a starting point for a brand voice. This read does not create a saved preset or select a default.

Action: app_topolo_socialize.brand_voice.presets.builtin.list.

GET /api/brand-voice/presets/builtin

Before you start

  1. Verify the original credential, production environment and intended organization. The published permission is app_topolo_socialize.posts:read; an in-memory template read does not waive authentication or credential permissions.

  2. Discover any credential-required authorized Socialize workspace/resource and bind it separately using the current published resource contract. Input is exactly {}; a built-in template id is not a workspace id. Do not forge identity headers or switch principals after a refusal.

Request and identifiers

The action input is an empty object. There are no search, paging, brand, preset or organization fields.

{}

Use supported workspace/resource discovery for the original credential where binding is required. The workspace boundary is supplied separately from action input. This particular handler reads global shipped templates and does not resolve a brand from a body field.

topolo workspaces list topolo-socialize --json
topolo actions get app_topolo_socialize.brand_voice.presets.builtin.list --json
topolo actions validate app_topolo_socialize.brand_voice.presets.builtin.list --data '{}' --json

Only after discovery and successful validation should you plan and run the read with any required actual resource binding. Do not copy a template id into resource-id.

Interpret the response

The routed getBuiltinPresets handler maps the shipped BUILTIN_PRESETS constant to {success:true,presets:[...]}, adds isBuiltin:true and isDefault:false, and preserves source order. It does not call the repository constructor, inspect a brand, query SQL, generate content or call a provider/model. This statement is about this handler; it does not certify zero side effects throughout authentication/credential infrastructure.

The reviewed source contains five templates: Thought Leader, Friendly Expert, Punchy Founder, Warm Community Builder and Minimalist Operator. This is a version-qualified shipped list, not a promise that future builds have the same count or order.

Built-in records are template definitions, not persisted brand voice records: the builtin response does not add brandId, createdBy, createdAt or updatedAt. Sentence and punctuation styles remain nested objects; arrays are arrays. Do not apply the different full-preset list projection or JSON-string database representation here.

The response has presets, not items or data, and no total/count/cursor/hasMore fields. The current structural output schema permits this envelope without precisely requiring its fields. The generic published resource idPath $.items[].id does not locate these presets; inspect presets[].id and do not treat any preset id as an authorized brand.

Reading templates does not select or save a default, duplicate a template, change voice settings, retrieve private RAG context or generate a post. A later duplicate/edit/default operation requires separate discovery, authority, reviewed input and verification.

FieldMeaning
successThis handler returns true on its normal template-list path. It is not evidence of a saved brand setting.
presetsComplete in-memory template array in shipped source order; no pagination envelope.
presets[].idShipped template identifier, such as builtin_thought_leader; not a brand or user id.
presets[].isBuiltin / isDefaulttrue / false added by this handler. These flags do not show the selected workspace’s saved default.
Style and vocabulary fieldsVoice instructions, numeric tone settings, nested sentence/punctuation objects and actual arrays; preserve their types.

Complete worked response

Source-derived and unrun. This is the full five-template projection from the reviewed source, including every shipped field and both added flags. It is not a captured production response, a tenant record or a promise about a later build.

{
  "success": true,
  "presets": [
    {
      "id": "builtin_thought_leader",
      "name": "Thought Leader",
      "description": "Authoritative voice for sharing insights and industry expertise",
      "persona": "Industry expert sharing hard-won insights and contrarian takes",
      "pointOfView": "first",
      "targetAudience": "Professionals seeking cutting-edge insights",
      "audiencePainPoints": [
        "Information overload",
        "Generic advice",
        "Lack of actionable insights"
      ],
      "audienceSophistication": "expert",
      "toneFormality": 3,
      "toneBoldness": 4,
      "toneWarmth": 3,
      "toneHumor": 2,
      "sentenceStyle": {
        "mixLengths": true,
        "preferFragments": true
      },
      "emojiUsage": "minimal",
      "punctuationStyle": {
        "useExclamations": false,
        "preferDashes": true
      },
      "doList": [
        "Share specific data and examples",
        "Challenge conventional wisdom",
        "Use first-person experiences",
        "End with a provocative question",
        "Be direct and confident"
      ],
      "dontList": [
        "Use corporate jargon",
        "Be vague or hedge",
        "Start with \"I think\"",
        "Use passive voice",
        "Include obvious advice"
      ],
      "bannedPhrases": [
        "game-changer",
        "at the end of the day",
        "food for thought",
        "deep dive"
      ],
      "preferredVocabulary": [
        "actually",
        "here's the thing",
        "unpopular opinion"
      ],
      "spellingLocale": "US",
      "hashtagMin": 2,
      "hashtagMax": 4,
      "hashtagThemes": [
        "industry",
        "leadership"
      ],
      "isBuiltin": true,
      "isDefault": false
    },
    {
      "id": "builtin_friendly_expert",
      "name": "Friendly Expert",
      "description": "Warm and approachable voice for educational content",
      "persona": "Helpful friend who happens to be an expert in your field",
      "pointOfView": "first",
      "targetAudience": "Learners and curious professionals",
      "audiencePainPoints": [
        "Intimidating jargon",
        "Condescending experts",
        "Overwhelming information"
      ],
      "audienceSophistication": "general",
      "toneFormality": 2,
      "toneBoldness": 2,
      "toneWarmth": 5,
      "toneHumor": 3,
      "sentenceStyle": {
        "mixLengths": true,
        "preferFragments": true
      },
      "emojiUsage": "moderate",
      "punctuationStyle": {
        "useExclamations": true,
        "preferDashes": true
      },
      "doList": [
        "Use analogies and metaphors",
        "Break down complex concepts",
        "Celebrate small wins",
        "Ask rhetorical questions",
        "Share relatable mistakes"
      ],
      "dontList": [
        "Use technical jargon without explanation",
        "Be condescending",
        "Assume prior knowledge",
        "Skip the \"why\"",
        "Be overly formal"
      ],
      "bannedPhrases": [
        "obviously",
        "simply",
        "just",
        "easy",
        "everyone knows"
      ],
      "preferredVocabulary": [
        "here's the deal",
        "real talk",
        "pro tip"
      ],
      "spellingLocale": "US",
      "hashtagMin": 1,
      "hashtagMax": 3,
      "hashtagThemes": [
        "learning",
        "tips"
      ],
      "isBuiltin": true,
      "isDefault": false
    },
    {
      "id": "builtin_punchy_founder",
      "name": "Punchy Founder",
      "description": "Bold, direct voice for founders and entrepreneurs",
      "persona": "Confident founder who's been in the trenches",
      "pointOfView": "first",
      "targetAudience": "Entrepreneurs, startup teams, aspiring founders",
      "audiencePainPoints": [
        "Lack of real-world advice",
        "Survivorship bias",
        "Platitudes"
      ],
      "audienceSophistication": "general",
      "toneFormality": 1,
      "toneBoldness": 5,
      "toneWarmth": 2,
      "toneHumor": 3,
      "sentenceStyle": {
        "maxLength": 15,
        "preferFragments": true,
        "mixLengths": true
      },
      "emojiUsage": "minimal",
      "punctuationStyle": {
        "useExclamations": false,
        "preferDashes": true
      },
      "doList": [
        "Start with a bold claim",
        "Use short, punchy sentences",
        "Share real numbers",
        "Admit failures openly",
        "Give actionable takeaways"
      ],
      "dontList": [
        "Hedge or qualify too much",
        "Use corporate speak",
        "Be preachy",
        "Bury the lead",
        "Overcomplicate"
      ],
      "bannedPhrases": [
        "hustle",
        "grind",
        "crush it",
        "killing it",
        "10x",
        "scale"
      ],
      "preferredVocabulary": [
        "truth is",
        "here's what happened",
        "lesson learned"
      ],
      "spellingLocale": "US",
      "hashtagMin": 0,
      "hashtagMax": 2,
      "hashtagThemes": [
        "startup",
        "founder"
      ],
      "isBuiltin": true,
      "isDefault": false
    },
    {
      "id": "builtin_warm_community",
      "name": "Warm Community Builder",
      "description": "Inclusive voice for building engaged communities",
      "persona": "The welcoming host who makes everyone feel included",
      "pointOfView": "first",
      "targetAudience": "Community members, fans, engaged followers",
      "audiencePainPoints": [
        "Feeling invisible",
        "Generic broadcasts",
        "Lack of connection"
      ],
      "audienceSophistication": "general",
      "toneFormality": 2,
      "toneBoldness": 2,
      "toneWarmth": 5,
      "toneHumor": 4,
      "sentenceStyle": {
        "mixLengths": true
      },
      "emojiUsage": "frequent",
      "punctuationStyle": {
        "useExclamations": true
      },
      "doList": [
        "Address the audience directly",
        "Celebrate community wins",
        "Ask for input and opinions",
        "Share behind-the-scenes",
        "Use inclusive language (we, us)"
      ],
      "dontList": [
        "Sound corporate",
        "Broadcast without engaging",
        "Ignore comments/replies",
        "Be exclusive or gatekeep",
        "Focus only on selling"
      ],
      "bannedPhrases": [
        "valued customer",
        "loyal followers",
        "tribe"
      ],
      "preferredVocabulary": [
        "you all",
        "we",
        "together",
        "our community"
      ],
      "spellingLocale": "US",
      "hashtagMin": 2,
      "hashtagMax": 5,
      "hashtagThemes": [
        "community",
        "engagement"
      ],
      "isBuiltin": true,
      "isDefault": false
    },
    {
      "id": "builtin_minimalist",
      "name": "Minimalist Operator",
      "description": "Clean, no-nonsense voice that gets to the point",
      "persona": "Efficient professional who values clarity over flair",
      "pointOfView": "first",
      "targetAudience": "Busy professionals who value their time",
      "audiencePainPoints": [
        "Verbose content",
        "Unnecessary fluff",
        "Time wasters"
      ],
      "audienceSophistication": "expert",
      "toneFormality": 3,
      "toneBoldness": 3,
      "toneWarmth": 2,
      "toneHumor": 1,
      "sentenceStyle": {
        "maxLength": 12,
        "preferFragments": true
      },
      "emojiUsage": "none",
      "punctuationStyle": {
        "useExclamations": false,
        "preferDashes": false
      },
      "doList": [
        "Lead with the key point",
        "Use bullet points when possible",
        "Cut unnecessary words",
        "Be specific with numbers",
        "One idea per post"
      ],
      "dontList": [
        "Add filler words",
        "Use emojis",
        "Write long intros",
        "Over-explain",
        "Use multiple CTAs"
      ],
      "bannedPhrases": [
        "let me explain",
        "in other words",
        "basically",
        "honestly"
      ],
      "preferredVocabulary": [],
      "spellingLocale": "US",
      "hashtagMin": 0,
      "hashtagMax": 1,
      "hashtagThemes": [],
      "isBuiltin": true,
      "isDefault": false
    }
  ]
}

Read the names and tone/style settings to choose a starting template. This response has no persisted owner, saved default or created/updated timestamps to verify. A later copy or save requires a separate authorized action.

Reject an unsupported input locally

For example, {"brandId":"ws_example_not_a_real_grant"} fails the current action’s additionalProperties:false input schema. This is an illustrative local-preflight refusal, not a simulated HTTP response or a live workspace probe. Remove the undeclared field and resolve the actual resource binding separately; do not send it to the handler to test access.

The catalog declares authentication, permission, rate-limit, validation and dependency refusals with recovery guidance. Those are declaration-level guidance, not captured examples of this route’s exact outer-auth error carrier. Preserve the real code/status/request id if a call is refused; never reinterpret a refusal as an empty template array or switch accounts to bypass it.

Verify and recover

Validate the returned envelope against the current schema and inspect success plus the actual presets array; a broad structural schema passing alone does not establish the precise handler shape.

Treat each builtin_ identifier as a template id. Confirm isBuiltin:true and isDefault:false, interpret nested style objects/arrays, and do not infer a tenant owner, persisted record, creation timestamp or selected workspace default.

The exact source-derived example is unrun. A different served list may indicate a different build; preserve request/version evidence and ask the source owner to reconcile it. Do not rewrite the shipped list or mutate a brand merely to match this example.

No application template state is changed by this handler, so no rollback is required for the read. Preserve the original identity/resource and refusal/request evidence. Resolve an actual access or dependency refusal through its published recovery before retrying; never duplicate or delete a preset to repair a template-list read.

Discover app_topolo_socialize.brand_voice.presets.duplicate to plan a separately approved copy, and the relevant edit/default action for the saved record. This guide does not certify those operations’ source behavior or execute them. The action explorer provides the credential-visible current contract.

Change log

  • 2026-10-21: Documented the source-qualified built-in template-list handler, exact empty input, complete five-template response, template-versus-persisted-record distinction and local invalid-input example. No application, business, model or provider execution was performed. The reviewed source revision is not proof of the deployed serving revision.