Create a template
There are two ways to create a template:- From the Templates page — go to Templates in the sidebar and click + New Template. You’ll link it to a workflow later.
- From a workflow — click Create Template inside a delivery node in the workflow builder. The template is automatically linked to that workflow and its name and slug are pre-filled from the workflow and node names. This is the fastest path when building a new notification from scratch.
Click + New Template
From the Templates page or a workflow node, open the creation modal.
Enter a Name (display label, changeable later) and a Slug (the identifier your workflow uses to reference this template — auto-derived from the name, cannot be changed after creation). Renaming the template later doesn’t affect the slug, so existing workflows keep working.

Write your content
The editor opens for your first channel. Each channel has its own editor with a live device preview on the right. Click the channel tabs at the top to switch between them.- View mode (default) — shows the published version, read-only.
- Edit mode — click Edit to open the draft. Content auto-saves as you type. Live traffic is never affected until you commit. If you exit without committing, your draft is saved — you can come back and pick up where you left off.
Designer, HTML, or plain text.
SMS
Single text field. DLT for India.
Header, body, footer, buttons.
Android Push
Title, body, image, buttons.
iOS Push
Title, body, image, action URL.
Web Push
Title, body, image, buttons.
In-App Inbox
Cards with avatar, buttons, expiry.
Slack
Text or Block Kit (JSONNET).
MS Teams
Markdown or Adaptive Card (JSONNET).
The Variables panel
The left panel has a{} tab — the Variables panel. This is where you set up all the data your template uses. It powers auto-suggestions, the live preview, and the test flow. Set this up before writing variables in your content.

{{order_id}}, {{order.address.city}}, {{{tracking_url}}} (triple braces for URLs to avoid escaping &, ?, =).
Toggle Enable batching to preview batched/digest content — this adds $batched_events and $batched_events_count to your data context.
You can also click Pre-fill from last workflow run (if the template is linked to a workflow) to auto-populate with real data from the most recent trigger.
Recipient
Search for a user by name, email, or distinct ID. Their profile properties load into $recipient — accessible in your template as:
{{$recipient.name}}— user’s name{{$recipient.email}}— user’s email{{$recipient.phone}}— user’s phone number{{$recipient.distinct_id}}— user’s unique ID- Any custom property you’ve set on the user profile
Use
$recipient in templates, not $user. Both refer to the same data, but $recipient is the standard.$brand — accessible as:
{{$brand.brand_name}}— tenant’s display name{{$brand.logo}}— tenant’s logo URL{{$brand.primary_color}}— brand colour (used in email Tenant blocks){{$brand.properties.address}}— custom tenant properties (address, support email, etc.){{$brand.$hosted_preference_url}}— hosted unsubscribe/preference page link{{$brand.$embedded_preference_url}}— embedded preference widget link
$actor, Bob is the $recipient.
{{$actor.name}}— actor’s name{{$actor.email}}— actor’s email
actor. If no actor is passed, $actor variables render as empty.
Using variables in content
Once your data is set up, type{{ in any text field — a dropdown shows all available variables grouped by source (Input Payload, Recipient, Actor, Tenant). Pick one, and it renders instantly in the preview. Variables with missing values are highlighted in red.
In the Email Design Editor, use the Merge Tags button in the toolbar instead.
For advanced logic (conditionals, loops, date formatting), see Handlebars Helpers. For Slack and MS Teams (JSONNET syntax), see JSONNET Templates.
The live preview on the right updates as you type. Select different Recipients and Tenants in the Variables panel to see how the template renders for different users and brands.
Commit
Click Commit in the top bar to publish your draft. Add an optional description. All future workflow triggers immediately use the new content. For WhatsApp and SMS (DLT), committing puts the version into Approval Pending — it goes live only after vendor approval.Using the template in a workflow
Once committed, the template is ready to be used. Add it to a workflow delivery node by referencing its slug. Every time the workflow triggers, SuprSend renders the template with the trigger payload and sends it to the recipient. You can copy the slug from the clipboard icon next to the template name.Test
After committing, send a real notification to a real device to verify everything looks right end-to-end. Click the Test button in the top-right corner.Need a test user? You need a user with at least one channel identity (email, phone number, device token). Create one from the Users page, via API, or ask the AI copilot in the dashboard to create one.
- Test one channel
- Test all channels
- Pick the Channel (e.g., Email, SMS).
- Enter a Recipient (email or distinct ID).
- Optionally pick a Notification Category — determines which vendor config is used (e.g., transactional vs promotional SMS vendor).
- Optionally pick a Tenant — loads that tenant’s branding into
$brandand selects the matching tenant variant. Leave blank to use defaults. - Click Send Test.

Version history
Click the History tab (clock icon) in the left panel to see all published versions — who committed, when, and what changed per channel.
Variants
Every template starts with a default variant. That’s enough for most use cases. Add more variants only when you need different content for different audiences:- Languages — a Spanish variant for Spanish-speaking users, Hindi for Hindi. SuprSend auto-selects based on the recipient’s preferred language. See Multi-lingual Templates.
- Tenants — Uber’s users see Uber branding, Acme’s users see Acme’s. One template serves all tenants.
- Payload conditions — show different content based on trigger data (e.g.,
plan == "pro"gets a premium message).
uber-en, acme-es, default-hi.
Full guide: Template Variants.
Import content
Click the Import button (arrow icon) in the editor toolbar to copy content from:- This template — another variant (e.g., copy default English into a new Spanish variant, then translate).
- Other templates — any template in your workspace. Pick a variant and preview before importing.

Clone and promote
Click Clone Template to copy the entire template (all channels, variants, content) to the same or a different workspace — e.g., from Staging to Production.

