Courier Inbox supports tabbed views that let users filter notifications by type. You tag messages when you send them, then configure the Inbox SDK to display tabs that filter on those tags. This tutorial walks through the full flow: tagging messages at send time, configuring tabs in React (both theDocumentation Index
Fetch the complete documentation index at: https://www.courier.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
<CourierInbox> component and the useCourier hook for custom UIs), and verifying messages route to the right tab.

Prerequisites
Before starting, you need:- A Courier account with the Inbox provider enabled
- A working Inbox implementation with JWT authentication (see How to Implement Inbox)
@trycourier/courier-reactinstalled in your project
How Tags and Tabs Work
Tags are string labels you attach to messages at send time viametadata.tags. The Inbox SDK uses these tags to filter messages into tabs.
When you define a tab with filter: { tags: ["order"] }, the SDK queries Courier for messages that have any of the specified tags. Filter fields are combined with AND logic; for example, { tags: ["order"], status: "unread" } shows only unread messages tagged “order”.
Tags are limited to 9 per message, with each tag up to 30 characters. Only
string values are accepted.Step 1: Send Tagged Messages
Addmetadata.tags to your send requests. Each message can have one or more tags that describe its category.
["order"], one with ["alert"], and one with no tags.
Step 2: Configure Tabs with the CourierInbox Component
Pass afeeds array to <CourierInbox> to define your tab structure. Each feed contains tabs, and each tab has a datasetId, title, and filter.
feedIdidentifies the feed. If you only have one feed, the feed selector dropdown is hidden automatically.datasetIdmust be unique across all tabs in all feeds. The SDK uses it as a key to store and retrieve messages for that tab.filter: {}with no properties shows all non-archived messages (archived messages are excluded by default).- Tags filter with OR logic:
{ tags: ["order", "shipment"] }shows messages that have either tag. Combine with other filter fields for AND:{ tags: ["order"], status: "unread" }.
Step 3: Build a Custom Inbox with useCourier
If you need full control over the UI, use theuseCourier hook to access inbox data directly and render your own components.
The hook exposes inbox.feeds, a record keyed by datasetId. Each entry contains the messages, unread count, and pagination state for that tab.
useCourier inbox API used here:
| Method / Property | Description |
|---|---|
inbox.registerFeeds(feeds) | Registers your feed and tab configuration with the datastore |
inbox.load() | Fetches messages for all registered datasets |
inbox.feeds[datasetId] | Returns { messages, unreadCount, canPaginate, paginationCursor } for a tab |
inbox.fetchNextPageOfMessages({ datasetId }) | Loads the next page of messages for a specific tab |
inbox.readMessage(messageId) | Marks a message as read |
inbox.archiveMessage(messageId) | Archives a message |
Step 4: Test Your Setup
- Send messages with different tags using the Send API or the Courier dashboard.
-
Open your app and verify messages appear under the correct tabs. A message tagged
["order"]should appear in both the “All” tab and the “Orders” tab. -
Test edge cases:
- A message with no tags should only appear in the “All” tab and any status-filtered tabs (like “Unread”).
- A message with multiple tags (e.g.,
["order", "alert"]) appears in every tab whose filter matches at least one of those tags. - Switching tabs should load the correct subset of messages without a full page reload.
Multiple Feeds
For apps with distinct notification categories, you can define multiple feeds. Each feed appears as a selectable option in the inbox header dropdown.What’s Next
Organize with Tabs
Tabs and feeds concept reference
React SDK Reference
Full tabs, feeds, and theming API for React
Send a Message to Inbox
Send API examples for Inbox messages
Implement Courier Inbox
Set up Inbox from scratch with JWT auth