Template states
| State | Meaning |
|---|---|
| DRAFT | Work in progress — not usable in campaigns or API sends |
| PUBLISHED | Live and usable — campaign send nodes and API sends can reference this version |
| REJECTED | Blocked by platform moderation — the rejection reason is shown in the template detail view. Edit and re-publish to request review. |
If a published template is later rejected (e.g., for spam or policy violation), in-flight campaigns that already queued sends for that template complete normally. New sends using the template are blocked until the rejection is resolved.
Template versions
Every publish creates a new version — an immutable snapshot. Campaign executions reference the version that was active when the campaign launched, so editing and re-publishing a template never changes an in-flight campaign. Typical workflow:- Edit content in DRAFT
- Publish to make it live — creates version
v2,v3, etc. - Campaigns always reference a specific version (or “latest published” at trigger time)
Brand kit
Brand kits attach logo, colors, footer, and legal copy defaults to a workspace. Email and RCS previews inherit these tokens automatically — teams stay on-brand without copying assets into every template. Brand kit values can be overridden per template, but the kit provides sensible defaults that apply unless you explicitly change them.Channel fit
The builder only shows templates that match the selected channel and message type. At send time the system validates the published state before allowing launch — if a template is DRAFT or REJECTED, the campaign flow builder blocks launch with a clear error.| Channel | Message types | Notes |
|---|---|---|
MESSAGE, NEWSLETTER | TipTap block editor; rendered via React.Email to inline CSS HTML | |
| RCS | MESSAGE, CONVERSATION, NEWSLETTER | Rich card, carousel, or plain text. Newsletter requires newsletter-enabled agent. |
| SMS (coming soon) | MESSAGE | Plain text with character counter (160 / 306 / 459 chars), GSM-7 vs. UCS-2 detection |
Email editor specifics
Email templates use a TipTap block editor with drag-and-drop sections:- Blocks: Header, text, image, button (CTA), spacer, divider, social links, footer
- Personalization: Merge tags (
{{first_name}},{{last_order}}) — selectable from a dropdown, validated against contact fields - Preview: Desktop and mobile preview in the editor
- Test send: Send a draft to your own email address with sample contact data
- Rendering: TipTap JSON → React.Email → inline-CSS HTML. The rendered HTML is pre-computed and stored in the template version. Workers do only merge-tag string replacement at send time — no cross-service rendering call in the send path.
Campaigns vs API sends
| Path | How templates are used |
|---|---|
| Flow builder | SEND nodes select a template and channel. Only PUBLISHED templates matching the node’s channel + message type are shown. |
| Developer API | POST /v1/messages accepts inline content or a template_id + template_version. See the relevant message type page for exact field names. |
Related
Introduction to templates
Concepts: versions, approval state, and API usage.
Campaigns
How SEND nodes reference templates.
Email capabilities
Email channel setup and deliverability.
RCS agents
Agent approval — the only external review in the template workflow.