Inbox & Messaging overview

How Blue's unified Inbox works - one cross-workspace feed of record comment threads, workspace chats, AI conversations, and direct messages / group chats, backed by a real InboxThread table.


Blue’s Inbox is a single, cross-workspace feed of everything that needs your attention: comment threads on records, workspace chat threads, AI panel conversations, and direct messages / group chats. It is a materialized InboxThread table, not a live union of comments and chats computed per request — a thread row is created and kept up to date as activity happens, so paginating the feed is an ordinary indexed query rather than a fan-out across several entity types.

Direct messages and group chats are new conversation kinds layered onto the existing Discussion type (the same type that already backed workspace chat threads) — see Direct Messages & Group Chats for how kind tells them apart.

The InboxThread type

FieldTypeDescription
idID!Unique identifier for the thread.
typeInboxThreadType!Which surface this thread represents. See below.
workspaceProjectThe workspace the thread belongs to. null for direct messages and group chats.
titleString!The thread’s display title.
previewStringA short preview of the most recent activity, for list rendering.
lastActivityAtDateTime!When the thread last had activity. Threads are ordered by this field, most recent first.
lastActorUserWho generated the most recent activity.
isReadBoolean!Whether you have read this thread. Evaluated per caller — see Manage inbox threads.
isMutedBoolean!Your own notification mute state for this thread.
pinnedBoolean!Your own “pin to top” state for this thread.
todoIdStringSet only when type is RECORD_THREAD and the record is a Todo.
statusUpdateIdStringSet only when type is RECORD_THREAD and the record is a StatusUpdate.
discussionIdStringSet when type is CHAT_THREAD or DM_THREAD — both anchor on a Discussion.
aiThreadIdStringSet only when type is AI_PANEL_THREAD.

isRead, isMuted, and pinned are all evaluated against your own participation in the thread — the same thread can be read and pinned for one person and unread for another.

InboxThreadType

type tells you which underlying surface a thread represents, and which of todoId / statusUpdateId / discussionId / aiThreadId is set.

ValueThe thread is…Follow up with
RECORD_THREADComments on a record (a Todo or a StatusUpdate).commentList(category: TODO | STATUS_UPDATE, ...)
CHAT_THREADA workspace chat topic (Discussion with kind: CHANNEL).Query discussions
AI_PANEL_THREADA standalone AI panel conversation.
DM_THREADA direct message or group chat (Discussion with kind: DM/GROUP).Direct Messages & Group Chats

InboxFilter

Passed to inbox to narrow the feed to one slice, evaluated against your own participation in each thread.

ValueReturns threads where…
ALLNo filter — the default.
UNREADYou haven’t read the thread.
ASSIGNED_TO_MEYou’re the assignee.
COMMENTED_BY_MEYou’ve commented in the thread.
MENTIONEDYou were @-mentioned in it.

Pages in this section

PageWhat it covers
Query your InboxThe inbox feed query, hasUnreadInboxThreads, and pinnedInboxThreads.
Manage inbox threadsRead/unread state, mark-all-read, per-thread mute, and pin-to-top — markInboxThreadRead, setInboxThreadPinned, and related mutations.
Direct Messages & Group ChatsstartDirectMessage, createGroupChat, membership management, and messageableUsers.

Live updates for the Inbox — new activity and cross-tab “mark all read” sync — are documented with the rest of the real-time API in Inbox subscriptions.

Product nouns to schema types

UI / docs wordSchema type / field
Inbox threadInboxThread
Direct messageDiscussion with kind: DM
Group chatDiscussion with kind: GROUP
Workspace chatDiscussion with kind: CHANNEL
WorkspaceProject (InboxThread.workspace / Discussion.project)
Group chat membershipChatMember
RecordTodo or StatusUpdate