Skip to Content

Content Tools

Manage email, SMS, and push templates, reusable content modules, and brand voice profiles. 8 tools in this category.

templates.list

List email/SMS/push templates with optional filtering.

Roles: ALL_ROLES

FieldTypeRequiredDescription
channelenum(email|sms|push)NoFilter by channel
statusenum(active|draft|archived)NoFilter by status
brandIduuidNoFilter by brand
limitintegerNoMax results (default 20)
offsetintegerNoPagination offset
{ "tool": "templates.list", "input": { "channel": "email", "status": "active", "limit": 10 } }

templates.get

Get a template by ID with rendered preview.

Roles: ALL_ROLES

FieldTypeRequiredDescription
templateIdstringYesTemplate identifier
renderPreviewbooleanNoInclude rendered HTML (default false)
{ "tool": "templates.get", "input": { "templateId": "tpl_abc123", "renderPreview": true } }

templates.create

Create a new template. Draft by default.

Roles: MARKETING_AND_ADMIN | draftByDefault: true

FieldTypeRequiredDescription
namestringYesTemplate name
channelenum(email|sms|push)YesDelivery channel
brandIduuidYesBrand identifier
subjectstringNoEmail subject line (email only)
bodystringYesTemplate body (HTML for email, text for SMS/push)
modulesstring[]NoReusable module IDs to include
{ "tool": "templates.create", "input": { "name": "Welcome Email", "channel": "email", "brandId": "brand-uuid", "subject": "Welcome to {{brandName}}", "body": "<h1>Welcome, {{firstName}}!</h1><p>We're glad you're here.</p>" } }

templates.update

Update an existing template.

Roles: MARKETING_AND_ADMIN

FieldTypeRequiredDescription
templateIdstringYesTemplate identifier
namestringNoUpdated name
subjectstringNoUpdated subject
bodystringNoUpdated body
statusenum(active|draft|archived)NoUpdated status
{ "tool": "templates.update", "input": { "templateId": "tpl_abc123", "subject": "Welcome to Loop Health, {{firstName}}!", "status": "active" } }

modules.list

List reusable content modules (headers, footers, CTAs, etc.).

Roles: ALL_ROLES

FieldTypeRequiredDescription
brandIduuidNoFilter by brand
typeenum(header|footer|cta|section)NoFilter by module type
{ "tool": "modules.list", "input": { "brandId": "brand-uuid", "type": "footer" } }

modules.create

Create a reusable content module.

Roles: MARKETING_AND_ADMIN | draftByDefault: true

FieldTypeRequiredDescription
namestringYesModule name
typeenum(header|footer|cta|section)YesModule type
brandIduuidYesBrand identifier
htmlstringYesModule HTML content
{ "tool": "modules.create", "input": { "name": "Standard Footer", "type": "footer", "brandId": "brand-uuid", "html": "<footer><p>© 2026 Loop Health. <a href='{{unsubscribeUrl}}'>Unsubscribe</a></p></footer>" } }

voice.get

Get the brand voice profile (tone, vocabulary, guidelines).

Roles: ALL_ROLES

FieldTypeRequiredDescription
brandIduuidYesBrand identifier
{ "tool": "voice.get", "input": { "brandId": "brand-uuid" } }

voice.propose_change

Propose a change to the brand voice profile. Changes require admin approval.

Roles: MARKETING_AND_ADMIN | draftByDefault: true

FieldTypeRequiredDescription
brandIduuidYesBrand identifier
tonestringNoUpdated tone description
vocabularyobjectNoPreferred/avoided terms
guidelinesstringNoUpdated voice guidelines
rationalestringYesReason for the proposed change
{ "tool": "voice.propose_change", "input": { "brandId": "brand-uuid", "tone": "Warm, knowledgeable, and encouraging", "vocabulary": { "preferred": ["protocol", "wellness journey", "optimize"], "avoided": ["drug", "medication", "cure"] }, "rationale": "Aligning with updated brand guidelines from Q2 2026" } }