Overview
Channel priority controls the order in which Courier attempts to deliver notifications across different channels and provider integrations. This configurable routing system handles message delivery to users through their most accessible channel while providing fallback options for reliable delivery.Key Concepts
Priority Hierarchy
Channels and integrations are arranged in a top-to-bottom hierarchy. Courier attempts delivery starting from the highest priority option and moves down the list until successful delivery or all options are exhausted. However, user preferences will supersede these configurations, resulting in the following rule order:- User Preferences: Individual recipient settings override all other routing rules
- Channel Priority: Order of channels (email, SMS, push, etc.)
- Integration Priority: Order of providers within each channel (e.g., SendGrid vs Mailgun for email)
Routing Methods
- “Best Of”: Try channels in priority order until one succeeds
- “Always Send”: Send through specific channels regardless of priority hierarchy
Configuring Priority
Setting Channel and Integration Priority
Priority is managed through a simple drag-and-drop interface. Channels and integrations are arranged in a top-to-bottom hierarchy:
Priority Settings
How Priority Works
Priority Logic Flow
Courier follows this decision process for each recipient:- Check highest priority channel - Does the user have the required contact info (email address, phone number, device token, etc.)?
- Attempt delivery - Try the preferred integration for that channel
- Handle failures - If delivery fails, try the next integration if available or move on to next channel
- Continue until success - Stop when message is successfully delivered
Integration Priority Within Channels
Within each channel, you can configure multiple provider integrations with their own priority order:
Integration Priority
- Primary: SendGrid attempts delivery first
- Fallback: If SendGrid fails, Mailgun attempts delivery
Cost Optimization Tip: You can combine multiple providers with condition rules around location to help control costs for a channel by using the best provider for that location.
Always Send Rule
The “Always Send” option overrides priority hierarchy to guarantee delivery through specific channels. This is useful for critical notifications that must reach users through multiple channels.How Always Send Works
Example: Notification configured for SMS → Slack → Email with Email set to “Always Send” Result for each user:- User with phone + Slack + email → Gets Email + SMS ✅
- User with Slack + email only → Gets Email + Slack ✅
- User with email only → Gets Email ✅
- User with no email → No delivery ❌
Configuring Always Send
Set the “Always Send” option in the Channel Settings for any channel:
Channel Settings

Always Send Routing
User Preferences Override
You can let your users override all priority and always send rules through preference centers. Users can set their preferred notification channels using either Courier’s hosted preference center or a custom preference center you build using the Preferences API. When users have specific channel preferences configured, Courier respects these choices above all other routing rules.Priority Override Hierarchy
- User Preferences (highest priority)
- Always Send rules
- Channel Priority hierarchy (lowest priority)
User Control: User preferences take precedence over all other routing configurations. This gives recipients final control over their notification delivery experience.
Putting It All Together
Example: Multi-Channel Fallback
Consider a notification configured to send via SMS → Slack → Email in priority order:
Priority Routing Overview
- User has phone number → Sends via SMS (Twilio) ✅ Done
- User has no phone, but has Slack → Sends via Slack ✅ Done
- User has no phone or Slack, but has email → Sends via Email ✅ Done
- User has none of the above → Delivery fails ❌
- User has phone and Slack, but turned off phone notifications in their preferences → Sends via Slack, logs reflect unsubscribed from text notifications ✅ Done
Use Cases
When to Use Each Approach
- Channel Priority: Standard fallback logic for reliable delivery
- Always Send: Critical notifications that must reach users through multiple channels
- User Preferences: Let users customize their notification experience
Best Practices
- Start with priority hierarchy for most notifications
- Use always send sparingly for truly critical messages only
- Respect user preferences to maintain good user experience
- Test with multiple provider integrations to improve delivery rates