Content Blocks
Content Blocks are reusable snippets - a legal footer, a promo banner, an unsubscribe
line, a localized greeting - that you write once and drop into any message, on any
channel, with a single Liquid token: {{ blocks.your_slug }}.
Edit the block in one place and every message that references it updates. No more copy-pasting the same footer into every email, SMS, push, and WhatsApp template.
Creating a block
Open Brand Studio → Content Blocks and select New block:
| Field | What it's for |
|---|---|
| Name | A human label (e.g. "Legal footer"). |
| Slug | The token key. Lowercase letters, digits, and underscores only - this is what you reference as {{ blocks.slug }}. Auto-filled from the name; can't be changed after creation. |
| Type | Plain text (sms / push / whatsapp) or HTML (email). See Block types. |
| Content | The snippet itself. Can contain Liquid. |
| Description | Optional note on where it's used. |
| Tags | Optional. Tag the block from the editor using the shared tag picker - pick an existing tag or create a new one, so blocks join the same workspace-wide tag pool and filter alongside campaigns and templates. |
Using a block
Reference it anywhere you can write a message - campaign composer, journey message nodes, email/SMS/push/WhatsApp/in-app - with:
{{ blocks.legal_footer }}
At send time the token is replaced with the block's rendered content. On the Content Blocks
page, the Token column copies the exact {{ blocks.slug }} to your clipboard, and in
the journey personalization picker, Content blocks lets you select a block and insert
its token for you.
Blocks resolve everywhere the rest of your personalization does - every channel, in
both campaigns and journeys - because they go through the same shared render context as
{{ user.* }}, filters, and entity feeds.
Liquid inside a block
A block's content is itself Liquid, so it can use everything a normal message can:
Thanks for shopping with us, {{ user.firstName | default: "there" }}!
© {{ "now" | date: "%Y" }} Acme Inc. - {{ user.custom.city }}
That includes filters, entity feeds, and even other
blocks - a block can reference {{ blocks.another_block }}. (Self-referential loops are
detected and stopped, so a block can't recurse into itself.)
Block types
- Plain text - for SMS, push, and WhatsApp. Rendered as-is.
- HTML - for email. Use this for anything with markup (a styled footer, a banner).
Pick the type that matches where you'll use the block. Dropping an HTML block into an SMS will send the raw markup, so keep a text variant for text channels.
Example: a shared legal footer
- Create a block - Name "Legal footer", slug
legal_footer, type HTML:<p style="font-size:12px;color:#888">
© {{ "now" | date: "%Y" }} Acme Inc. All rights reserved.
<a href="{{ unsubscribe_url }}">Unsubscribe</a>
</p> - In every email, drop it at the bottom:
{{ blocks.legal_footer }} - When the copyright year or address changes, edit the block once - every email updates.
Notes
- Deleting a block that messages still reference renders it as empty in those messages (it won't error). Search for the token before deleting.
- Blocks are workspace-scoped - they're available to every campaign and journey in the workspace.
- A block's slug is immutable after creation (so existing references never break); create a new block if you need a different key.
Related
- Liquid Templates - the personalization syntax blocks are built on
- Message Variables - the journey personalization picker