{{variable_name}}).

Inbox fields
Header — heading shown in bold at the top of the card. Use it for the summary:New comment received, Your story has got 30 views.
Text — body of the message. Supports Markdown syntax — headings, bold, italic, blockquotes, links, and code.
Avatar — public image URL (.jpeg, .png). Use it to show the actor’s profile picture or a static icon based on notification type.
Subtext — clickable footer line. Use for secondary info like comment count, task ID, or timestamps.
Action URL — URL the user is redirected to on card click. Toggle Open in new tab if needed.
Action Buttons — up to 2 buttons with text + URL. Use for CTAs like “View”, “Approve”, or inline actions. See custom click handlers for advanced button behaviour.
Adding dynamic content in the template
There will always be the case where you need to add dynamic content to personalise notifications for your users. You can add variables in the template, which are replaced with actual data at the time of sending. Pass these values while triggering the communication from one of the frontend or backend SDKs. We use Handlebars as the templating language. You can add variables as{{variable_name}}. We also support Handlebars helpers for complex use cases like if-else conditions, default values, and array iteration.
Add variables in the Variables panel
Add sample data in the Variables panel (Input Payload section) on the left side of the editor. This defines the structure of your variables, enables auto-suggestions while designing, and powers the live preview. For the full guide on setting up variables, see Adding dynamic content.
Use variables in the template fields
Type
{{ in any text field — auto-suggestions appear based on the data in the Variables panel. You can also manually type variable names following Handlebars syntax.Examples using this sample data:- Nested variable:
{{event.location.city}}→ renders asBangalore - Array element:
{{array.[0].product_name}}→ renders asAldo Sling Bag - Variable with space in name:
{{event.[first name]}}
- The variable is defined in the Variables panel.
- The variable name matches the Handlebars syntax exactly.
Advanced configurations

unread notifications with the mentions tag in a “Mentions” tab. Use them to separate updates from mentions, product releases from events.
Tags in Inbox template vs Tags in Workflow: Template tags filter notifications in inbox tabs. Workflow tags only group workflows on the listing page and do not affect inbox filtering. To filter inbox tabs, add tags in the template and reference them in your inbox tab configuration.

pinned badge and stay at the top of the notification list until the user reads or archives them. Reserve for notifications requiring immediate action — compliance tasks, plan renewals, or limited-time offers. Always combine with an expiry so stale pins don’t persist indefinitely.

2 days 6 hours.


{{expiry_time}}. The value can be:
- An ISO-8601 timestamp (e.g.,
2024-03-02T20:34:07Z) — must be in the future. - A relative duration: an integer (seconds) or an interval string like
2d 6h 30m 0s.

Preview and test
The right panel shows a live preview of the inbox notification card, updated in real time as you edit. Variables render using data from the Variables panel — select a recipient or tenant to preview with real data. Click Test in the top-right corner to send a real notification to a real user’s inbox. This uses the live version — commit your changes before testing. See Testing a Template for the full guide.Commit
Click Commit in the top bar to publish the current draft as a new live version. Add an optional description for versioning. Once committed, all notifications triggered after this point use the new content. Committing snapshots everything: field content, advanced configurations (tags, pinning, expiry), and variable references.Frequently asked questions
How do I design a social activity notification (comment, like, mention)?
How do I design a social activity notification (comment, like, mention)?
How do I design a transactional notification (order, payment, delivery)?
How do I design a transactional notification (order, payment, delivery)?
Use bold markdown in the text to highlight key details. Set a 7-day expiry so delivered-order notifications don’t clutter the inbox. Add a tracking button via Action Buttons.
| Field | Value |
|---|---|
| Header | Order #{{order_id}} shipped |
| Text | Your package is on the way! Expected delivery: **{{delivery_date}}** |
| Action URL | https://yourapp.com/orders/{{order_id}} |
| Button 1 | Track Order → https://yourapp.com/track/{{order_id}} |
| Expiry | Relative: 7 days |
How do I design an approval / action-required notification?
How do I design an approval / action-required notification?
Use Pin so the notification stays at the top. Set a short expiry (e.g., 3 days) so stale approvals auto-archive. Use custom click handlers for in-line Approve/Reject without leaving the page.
| Field | Value |
|---|---|
| Header | Expense report needs approval |
| Text | {{requester_name}} submitted a {{amount}} expense report for {{category}}. |
| Button 1 | Approve → https://yourapp.com/expenses/{{expense_id}}/approve |
| Button 2 | Reject → https://yourapp.com/expenses/{{expense_id}}/reject |
| Pin | Enabled |
| Pin | Enabled |
| Expiry | Relative: 3 days |
How do I design a product announcement notification?
How do I design a product announcement notification?
Use a static product logo as the Avatar and a
product-updates tag to route into a dedicated tab. Avoid setting expiry — users may want to reference announcements later.| Field | Value |
|---|---|
| Header | New feature: {{feature_name}} |
| Text | {{feature_description}} |
| Avatar | (static product logo URL) |
| Action URL | https://yourapp.com/changelog/{{release_id}} |
| Tags | product-updates |
When should I use Pin vs Expiry?
When should I use Pin vs Expiry?
- Pin — for notifications that must stay at the top until the user acts (compliance, critical alerts). Always combine with an expiry so they don’t stay pinned forever.
- Expiry — for time-sensitive content (flash sales, event reminders). Use relative expiry for consistent durations, absolute for fixed deadlines, and dynamic for computed values from your payload.
How do Tags work for Inbox tabs?
How do Tags work for Inbox tabs?
How do I add dynamic expiry from my payload?
How do I add dynamic expiry from my payload?
Use a Handlebars variable like
{{expiry_time}} in the Dynamic Expiry field. The value can be an ISO-8601 timestamp (e.g., 2024-03-02T20:34:07Z) or a relative duration (integer for seconds, or 2d 6h 30m 0s format).