Skip to main content

Overview

Courier’s content management system handles the creation, storage, and delivery of notification templates. Understanding how content works helps you build effective notification strategies and manage templates efficiently.

Content Creation Methods

Template Designer

Template designer showing drag and drop interface

Template Designer - Drag and Drop Interface

The Template Designer provides a unified interface for managing notification content across all channels. You can create and compare email, SMS, push, and chat templates side-by-side, ensuring consistent messaging and branding across your entire notification strategy. The drag-and-drop interface uses content blocks for text, images, buttons, and other elements that automatically adapt to each channel’s requirements. The designer includes features for template creation, including real-time previews, version control, conditional logic, internationalization support, and brand management. Templates are stored as structured data that Courier renders appropriately for each channel, maintaining your design intent while optimizing for channel-specific best practices. For detailed information about all Template Designer capabilities, see the Template Designer Documentation.

Elemental JSON

Elemental is Courier’s JSON-based content system for defining a notification programmatically. Each Elemental template describes the content hierarchy using a standardized format that works across all channels. This approach provides precise control over content structure and enables conditional logic, dynamic content generation, and multi-language support. This method works well for transactional notifications, multi-language templates, and notifications that require business logic. Elemental templates can be version-controlled through your codebase and can be tested programmatically. Visually built templates go also be exported to Elemental to allow those templates to benefit from this approach. For Elemental documentation including syntax, elements, and advanced features, see the Elemental Documentation.

Handlebars Templating

Handlebars is a popular open-source templating language that Courier supports for advanced dynamic content capabilities in email notifications. It allows you to write custom HTML, CSS, and Handlebars code for highly customized email templates with conditional logic, loops, variable transformations, and complex business rules. Handlebars templates can be used in several contexts:
  • Email Template Overrides: Direct HTML/Handlebars editing for email notifications
  • Template Blocks: Reusable Handlebars components within the Template Designer
  • Brand Templates: Custom header/footer templates for brand consistency
  • Brand Snippets: Reusable Handlebars code snippets across templates
Courier extends Handlebars with custom helpers for logic operations, string formatting, math functions, date handling, and internationalization. This approach is ideal for developers who need precise control over email rendering, complex conditional content, or want to import existing HTML templates. For detailed Handlebars documentation including syntax, helpers, and use cases, see the Handlebars Documentation.

Template Management

Version Control

Courier maintains version history for all templates created in the Template Designer. Each time you save a template, Courier creates a new version that preserves the previous iteration. This allows you to track changes over time, compare different versions, and roll back to previous iterations if needed. The version control system includes change tracking, diff views, and collaborative editing features. For Elemental templates, version control is handled through your existing code management system. Templates stored as code benefit from your team’s established Git workflows, code review processes, and deployment pipelines. For more information about template creation and management, see the Template Designer Documentation.

Publishing Workflow

Templates follow a publishing workflow that controls when changes become active. In the Template Designer, you can save drafts for testing and iteration before publishing changes to production. The publishing system includes approval workflows, environment-specific deployments, and rollback capabilities to ensure safe template updates. For API-based templates, publishing is typically handled through your deployment process. New template versions become active when you deploy updated code or update template references in your application. For information about publishing workflows and approval processes, see the Template Settings Documentation.

Template Organization

Each template has a unique identifier that your application uses to reference it when sending notifications. Templates can be organized by function (user onboarding, transactional notifications, marketing campaigns), channel type, or custom categories that match your business needs. The organization system supports tagging, search functionality, and bulk operations to help you manage large template libraries efficiently. For information about template organization and management features, see the Asset Manager.

Content Features

Content Blocks

Content blocks are pre-built, responsive components that speed up template creation and ensure consistency across channels. Each block represents a specific content type like text, images, buttons, dividers, or custom components. Blocks automatically adapt to different channels and devices, ensuring consistent rendering across email clients, mobile apps, and web interfaces. The content block system includes features like conditional rendering, dynamic data binding, and custom block creation for specialized use cases. For information about all available content blocks and advanced features, see the Content Blocks Documentation.

Brand Management

Content Manager showing asset list

Brand Designer - Customization for Brands

Brand settings provide styling control across all your notifications. Configure logos, colors, fonts, layout options, and custom CSS that automatically apply to templates created in the Template Designer. Brand settings support white-labeling for multi-tenant applications where you send notifications on behalf of different organizations. The brand management system includes template inheritance, custom CSS classes, and domain-specific branding for multi-brand strategies. For information about brand configuration and white-labeling features, see the Brand Management Documentation.

Internationalization

Courier provides internationalization support for global notification strategies. Templates can include multiple language variants that automatically display based on user preferences. The system handles text translation, date formatting, currency formatting, and cultural adaptations for global audiences. The internationalization system supports locale-specific content, fallback languages, and dynamic language detection based on user profiles. For information about multi-language template creation and localization features, see the Internationalization Documentation.

Conditional Content

Templates can include conditional logic that shows or hides content based on user data, preferences, or other criteria. This allows you to create dynamic notifications that adapt to user preferences, account status, geographic location, or any custom business rules. Conditional content works in both the Template Designer and Elemental templates. The conditional system supports nested conditions, multiple criteria evaluation, and dynamic content selection based on real-time data. For information about conditional logic and dynamic content features, see the Channel Settings Documentation.

Variables and Dynamic Content

Courier supports dynamic content through variables that can be inserted into templates from multiple data sources including user profiles, event data, tenant information, and brand settings. Variables enable personalization and dynamic content generation across all content creation methods. Content Blocks: Insert variables using single curly brackets {variable_name} in text, markdown, and other content blocks. Variables are highlighted in green and automatically replaced with actual data when notifications are sent. Handlebars Templates: Use double curly brackets with Handlebars helpers for advanced variable handling: {{var "variable_name"}} for data objects or {{var "profile.variable_name"}} for profile data. Handlebars provides additional capabilities for conditional rendering, loops, and variable transformations. Email Fields: Variables can be used in email subject lines, from addresses, and other email-specific fields to create dynamic, personalized email headers. The variable system supports JSONPath expressions for accessing nested data structures and provides built-in variables for tracking, unsubscribe links, and system information. For comprehensive variable documentation and usage examples, see the Variables Documentation.

API Integration

Template References

When sending notifications through the API, you can reference templates by their unique identifier or an alias. The API accepts the template ID along with user data and recipient information. Alias let you change the underlying template without you having to change your code. Courier renders the template with the provided data and sends it through the configured channels using your established routing logic. The API supports both template-based sending and direct content injection, giving you flexibility to use stored templates or send custom content on-demand. For complete API documentation including authentication, request formats, and advanced features, see the Send API Reference.

Dynamic Content

The API also supports dynamic content injection that allows you to override template elements with real-time data. This is useful for notifications that include user-specific information, transaction details, or other dynamic content that changes with each notification. The dynamic content system supports variable substitution, conditional content injection, and real-time data binding from external systems. For information about dynamic content features and variable handling, see the Variables Documentation.

Content Validation

Courier provides content validation before sending to ensure proper rendering across all channels. The system checks for required variables, validates content structure, and provides feedback on potential rendering issues or missing data.

Next Steps