
- The Status of each message send request
- The Notification and Recipient associated with each send
- The Provider channels for the notification
Message Statuses
Every message in Courier progresses through a series of statuses. The following statuses are tracked:Delivery Statuses
| Status | Description |
|---|---|
| Queued | Courier has received a valid Send API request and is processing the notification. |
| Routed | Channel routing is complete; the message is ready for delivery. |
| Sent | Courier sent the request to the downstream provider. A 200 response from Courier does not guarantee delivery; the provider may still reject the message. |
| Delivered | The provider confirmed the message was accepted. For email, this means it reached the inbox. For SMS, not all providers return delivery confirmation. |
| Opened | The recipient opened the notification (email with open tracking enabled, or inbox/push via SDK events). |
| Clicked | The recipient clicked a link in the notification (requires link tracking enabled). |
Processing Statuses
| Status | Description |
|---|---|
| Delayed | The message is scheduled for future delivery. |
| Digested | The message was added to a digest queue and will be sent as part of a batched notification. |
| Filtered | The message was filtered out by routing rules, preferences, or send conditions. |
| Throttled | The message is being rate-limited due to send limits or workspace quota. |
| Simulated | The message was sent with a mock key, simulating the lifecycle without delivery to the provider. |
Error Statuses
| Status | Description |
|---|---|
| Undeliverable | The provider rejected the message or delivery failed. |
| Unmapped | The Notification ID does not exist or the Event ID is not mapped to a notification. |
| Unroutable | No valid delivery route was found (e.g., missing recipient address or no configured channels). |
| Canceled | The message delivery was canceled before being sent. |
Has Errors is not a status but a filter indicator showing that the message timeline includes an error response.
Channel-Specific Behavior
| Event | Push (APNS/FCM) | Inbox | SMS | Chat | |
|---|---|---|---|---|---|
| Delivered | Provider confirms inbox delivery | Delivery Rate = 100% - Error Rate | Delivery Rate = 100% - Error Rate | Not all providers return delivery status | Provider confirms delivery |
| Opened | Requires open tracking | Not supported | SDK push events | n/a | n/a |
| Clicked | Requires link tracking | SDK click events | SDK click events | n/a | Requires link tracking |
Inbox and Channel Sync
Notification event states are synchronized between the inbox and other channels within a notification template. For example, if a notification was sent with bothinbox and email channels, opening the email will mark the inbox notification as read.
This sync only works one way. Reading an inbox message will not mark an email as
opened.Viewing Logs
Histogram
The logs histogram breaks down delivery metrics for specific days, grouping events in color-coordinated graphs.

Log Detail View
Click any notification in the list view to open the log details, which includes:- Summary - Message and Recipient IDs, timestamps for each stage (Enqueued, Sent, First Delivery, etc.)
- Timeline - Detailed timeline of every step; click any event to view additional details

Error Encountered event in the timeline to review the error message.

Filtering Logs
Filter your message logs to find specific notifications:- Date - Filter by date range (limited by your account’s log retention period)
- Recipient - Filter by email address or Recipient ID
- Notification - Filter by specific notification template
- Status - Filter by one or more statuses: Queued, Sent, Delivered, Opened, Clicked, Undeliverable, Unmapped
- Errors - Show only notifications with errors in their timeline
- Provider - Filter by one or more integrated providers
Unmapped means the Event ID does not map to a notification or the Notification ID is invalid.
Rendered Content
The Courier Messages API lets you retrieve the rendered output of any notification in your send history. This is useful for debugging and verifying what was actually sent to providers. To fetch the rendered content for a message:-
Fetch message history - Use GET
/messages/:message_id/historywith the message ID from your send response. You can use the history endpoint or thegetMessageHistorySDK function. -
Fetch message content - Use the root-relative URL from the
RENDEREDevent in the history response, appended to the Courier API host:https://api.courier.com


Rendered Content for Emails
HTML content is returned withcontent-type: text/html as raw HTML:

Log Retention
Courier retains message logs for different periods depending on your account type:- Free and Pro accounts: Logs are retained for 30 days
- Contracted accounts: Logs are retained for 1 year
Enterprise Customers: If you need longer log retention periods, contact Courier Support to discuss extended retention options.
Troubleshooting Delivery Issues
If a message shows Sent but the recipient hasn’t received it, use the timeline in the log detail view to identify where the problem is:- Check the provider response. Click the Sent event to see the raw response. If the provider returned an error, the details will be here.
- Check your provider’s dashboard. Cross-reference the message ID with your provider’s activity feed (SendGrid Activity, Postmark Activity, SES console, etc.) for bounce, block, or deferral events.
- Verify sender authentication. Confirm that SPF, DKIM, and DMARC records are correctly configured for your sending domain.
Automation Logs
The Automation logs provide detailed insights into the status of an automation run as well as step details.Automation Run List

