How overrides work
An override changes part of a message at send time, without editing the template. Courier applies it just before handing the message to the provider, so it works with template-based sends and with any content the template renders. There are two levels:
Use both on the same send if you need to. When the two set the same field, the provider override wins.
Courier applies overrides after the render step. The Rendered tab in the logs will not show them, only the pre-override output. To see the final payload, look at the provider request in the Raw tab.
Prerequisites
- A template with more than one channel
- A connected provider for each of those channels
Configure channels
1
Choose Always or Best-Of per channel
In a template’s channel settings, Always Send To decides how a channel relates to the others:
- Best Of: the channel sends only if a higher-priority channel fails. This is the fallback pattern (SMS backs up email).
- Always: the channel sends to every recipient regardless of the others. Use it for guaranteed multi-channel delivery (email and push for a critical alert).
2
Set email address fields
Email channels carry sender and recipient fields you set in the channel settings, with variables allowed for dynamic values:
- From:
"Sarah Bennett <notify@acme-corp.com>". TheName <email>form carries the display name, and it is the only way to set one when a provider’s integration has no From Name field. - Reply-To: where replies go.
- CC / BCC: additional recipients, often driven by a variable.
message.channels.email.override.fromon the send, for one message.- The From field here, for every send of this template.
- From Address on the provider integration, for every email through that provider.
Gmail is the exception. It always sends as the authorized inbox, so a From value here has no effect on it. Set the display name with the integration’s From Name instead.
3
Add per-channel conditions
A channel condition skips only that channel, while the rest of the notification still delivers (a template condition, by contrast, stops the whole send). Set them in the channel’s Conditions tab, or over the API with User preferences take precedence: if a user has custom channel routing, only their selected channels are considered, and channel conditions run within that selection but cannot override it.
message.channels.<channel>.if, where each value is an expression evaluated against data and profile:4
Override a provider at send time
Adjust how a specific provider sends this one message with See for the push override fields, and each for its override options.
providers.<provider>.override, without changing the template. For example, filter push tokens or set a provider-specific field:5
Check the logs
Send with your settings and open the message in . Confirm the channels that sent, and that a Best-Of fallback or a channel condition behaved as expected.