Skip to main content
A brand is the visual appearance Courier applies to your notifications: logo, colors, header, footer, and custom styling. Attach a brand to a template and every send inherits it, so styling stays consistent. Brands cover white-labeling, multiple product identities, and per-tenant styling.

How it works

The brand object

A brand’s settings hold the stored configuration: A brand ID is prefixed bnd_. Legacy brands may use a slug like default. Every workspace has a default brand that cannot be deleted. Every email uses it unless you disable brands in template settings. It is also the fallback when a send enables brands without naming one. Manage brands through the or the .

Brand variables in a template

At render time Courier flattens the brand into the brand namespace, without the settings level: Write it double-braced, so {{brand.colors.primary}} in template content, or {{var "brand.colors.primary"}} inside a brand’s own MJML/Handlebars template. See .

Brand designer

The brand designer is the visual editor for a brand’s logo, colors, header, and footer. It also takes a custom MJML/Handlebars template, so you can define the exact header and footer markup.
The brand designer: brand logo and primary, secondary, and tertiary colors on the left, the head, header, and footer editors in the middle, and social URLs on the right

Brand snippets

Brand snippets are legacy and not recommended for new work. They are a Snippets tab on the older brand designer that stores reusable Handlebars fragments on a brand. The new brand designer does not carry them forward, and they are not being developed further. Existing snippets keep rendering. For shared content in new templates, use the brand’s header, footer, and Head editors, or a template override.

CSS class names

Courier puts a class on every part of a rendered email. Restyle any of them from the brand’s Head editor. Every rule takes the same shape: a c-- class, a *, and !important.
Both are load-bearing. The class sits on a wrapper, so * reaches the text inside it, and MJML’s inline styles beat a plain stylesheet.

Email domain white-labeling

Sending from your own domain is configured on the email provider integration, not on the brand. Set your verified sending domain and From address on the provider (SendGrid, SES, and so on). Courier enforces the allowed domain at send time. A branded link and open tracking domain is a separate setup, a CNAME to Courier’s tracking infrastructure. See .

Applying a brand to a send

Courier picks the brand in this order:
  1. The brand_id on the send message.
  2. The template’s configured default brand, if brands are enabled on it.
  3. The workspace default brand.
Override the brand per channel with channels.<channel>.brand_id. In multi-tenant apps, a can carry a default brand, so sends in that tenant’s context pick it up automatically.

Limits & behavior

  • The default brand is the fallback. A brand-enabled send with no brand_id uses the workspace default. It cannot be deleted.
  • Custom CSS needs * and !important. The class is on the wrapper, and the compiler’s inline styles win otherwise.
  • Domain white-labeling is provider config, not a brand setting. Configure the sending domain on the email integration.

FAQ

Set a verified sending domain and From address on your email provider integration. The brand controls visual styling only. A branded tracking domain is a separate CNAME setup.
Layout classes like c--email-body and c--email-footer, c--block with a per-type variant such as c--block-text, and text classes from c--text-text to c--text-h3. Write .c--block-text * { ... !important }. The * reaches the text inside the wrapper, and !important beats the compiler’s inline styles.
Give each tenant a brand and set it as the tenant’s default, or pass brand_id on the send. Sends in a tenant’s context pick up its brand automatically.