Reference

Inbox Reads

Conversations, threads, search, media, collections and labels

Reads need MESSAGES_READ; internal notes need NOTES_WRITE; unmasked identity needs PII_READ. See Reading the inbox.

activeLabels

Query

ScopeMESSAGES_READ

Returns

_idString!
nameString!
organisationIdString!
colorString!
activeBoolean!
archivedBoolean!
isSystemBoolean!
descriptionString
createdAtDateTime!
updatedAtDateTime!
query {
  activeLabels { _id name organisationId color active }
}

allMedia

Query

ScopeMESSAGES_READ

Returns

_idString!
urlString!
filenameString
widthFloat
heightFloat
fileSizeFloat
durationFloat
supportsStreamingBoolean
disableContentTypeDetectionBoolean
performerString
titleString
mimeTypeString
thumbnailThumbnail
isAnimatedBoolean
isVideoBoolean
emojiString
setNameString
customEmojiIdString
stickerTypeString
needsRepaintingBoolean
processedContentString
Processed/extracted text content for knowledge base
isProcessedBoolean
Whether file processing is complete for knowledge base
query {
  allMedia { _id url type filename width }
}

apiSearchChatMessages

Queryexpensive

ScopeMESSAGES_READ

Search messages inside one chat of your organisation (API key, messages:read).

Arguments

chatIdString!Required

SearchMessagesInput

chatIdString
Filter by specific chat ID
collectionIdOrSlugString
Filter by collection ID or slug to search within matching chats
Filter by rules (for preview before saving a collection). Takes precedence over collectionIdOrSlug.
conversationIdString
Filter to all threads of this conversation

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  apiSearchChatMessages(chatId: "…", input: { … }, pagination: { … }) { data nextCursor previousCursor hasNext hasPrevious }
}

apiSearchMessages

Queryexpensive

ScopeMESSAGES_READ

Search messages across your organisation (API key, messages:read).

Arguments

SearchMessagesInput

chatIdString
Filter by specific chat ID
collectionIdOrSlugString
Filter by collection ID or slug to search within matching chats
Filter by rules (for preview before saving a collection). Takes precedence over collectionIdOrSlug.
conversationIdString
Filter to all threads of this conversation

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  apiSearchMessages(input: { … }, pagination: { … }) { data nextCursor previousCursor hasNext hasPrevious }
}

chat

Query

ScopeMESSAGES_READ

Arguments

chatIdString!Required
collectionIdOrSlugString

Returns

_idString!
chatIdFloat
externalChatIdString
businessConnectionIdString
externalUserIdString
titleString
usernameString
firstNameString
lastNameString
isForumBoolean
lastMessageMessage
lastMessageAtDateTime
profilePeople
channelIdentityChannelIdentity
integrationIdString
Integration ID (use integration field for full details)
createdAtDateTime
updatedAtDateTime
unReadCountFloat
engagedBoolean
True once the conversation has real engagement (a visitor inbound message OR a human-operator message). false = captured/hidden from the operator inbox; absent/unset = visible (legacy rows + all non-web channels). Set explicitly, never defaulted.
isBlockedBoolean
verified[String!]
isAIActiveBoolean
query {
  chat(chatId: "…", collectionIdOrSlug: "…") { _id chatId externalChatId businessConnectionId externalUserId }
}

chatCollection

Query

ScopeMESSAGES_READ

Arguments

idOrSlugString!Required

Returns

_idString!
nameString!
slugString!
descriptionString
iconString
colorString
positionFloat!
isSystemBoolean!
systemKeyString
isVisibleBoolean!
isLockedBoolean!
planLockedBoolean!
createdByString
chatCountFloat
createdAtDateTime!
updatedAtDateTime!
query {
  chatCollection(idOrSlug: "…") { _id name slug description icon }
}

chatCollectionCounts

Queryexpensive

ScopeMESSAGES_READ

Arguments

collectionIds[String!]!Required

Returns

collectionIdString!
countFloat!
query {
  chatCollectionCounts(collectionIds: "…") { collectionId count }
}

chatCollections

Query

ScopeMESSAGES_READ

Arguments

includeSystemBoolean!
Defaults to true.
includeHiddenBoolean!
Defaults to false.

Returns

_idString!
nameString!
slugString!
descriptionString
iconString
colorString
positionFloat!
isSystemBoolean!
systemKeyString
isVisibleBoolean!
isLockedBoolean!
planLockedBoolean!
createdByString
chatCountFloat
createdAtDateTime!
updatedAtDateTime!
query {
  chatCollections(includeSystem: false, includeHidden: false) { _id name slug description icon }
}

collectionChatCount

Query

ScopeMESSAGES_READ

Arguments

collectionIdOrSlugString!Required

Returns

Float!
query {
  collectionChatCount(collectionIdOrSlug: "…")
}

collectionChats

Query

ScopeMESSAGES_READ

Arguments

collectionIdOrSlugString

GetCursorPaginatedInput

cursorString
limitInt
beforeBoolean

GetSortedInput

sortByString!Required
sortOrderString!Required

Returns

previousCursorString
nextCursorString
hasPreviousBoolean!
hasNextBoolean!
query {
  collectionChats(collectionIdOrSlug: "…", pagination: { … }, sort: { … }) { previousCursor nextCursor hasPrevious hasNext data }
}

collectionConversations

Query

ScopeMESSAGES_READ

Arguments

collectionIdOrSlugString

GetCursorPaginatedInput

cursorString
limitInt
beforeBoolean

GetSortedInput

sortByString!Required
sortOrderString!Required

Returns

previousCursorString
nextCursorString
hasPreviousBoolean!
hasNextBoolean!
query {
  collectionConversations(collectionIdOrSlug: "…", pagination: { … }, sort: { … }) { previousCursor nextCursor hasPrevious hasNext data }
}

conversation

Query

ScopeMESSAGES_READ

Arguments

idID!Required

Returns

_idString!
createdAtDateTime!
updatedAtDateTime!
unReadCountInt
engagedBoolean
True once the conversation has real engagement (a visitor inbound message OR a human-operator message). false = captured/hidden from the operator inbox; absent/unset = visible (legacy rows + all non-web channels). Set explicitly, never defaulted.
lastMessageMessage
lastMessageAtDateTime
lastActivityAtDateTime
threads[Chat!]!
primaryThreadChat!
threadStatusConversationStatus
isBlockedBoolean!
The contact PERSON-level block flag (People IS_BLOCKED), not a single thread chat-level override. Drives the conversation-level block toggle label.
hasBlockedThreadBoolean!
True when ANY thread of the conversation is blocked (the thread UNION) - i.e. the conversation is a member of its org blocked collection. Drives the inbox row / conversation header block mark. Distinct from isBlocked (the person-level flag driving the block toggle, read from one representative thread).
assignedToUser
Rollup: the common operator across open threads, else null (see assignees).
assignees[User!]!
Distinct operators across the open threads (empty=none, 1=agree, several=diverge).
assignedStatusChatAssignmentStatus
Conversation-level connection state - PENDING when assignedTo set, else null; CONNECTED is per-thread-only.
query {
  conversation(id: "…") { _id createdAt updatedAt unReadCount engaged }
}

conversationMedia

Query

ScopeMESSAGES_READ

Arguments

conversationIdString!Required
mediaTypes[MediaType!]

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  conversationMedia(conversationId: "…", pagination: { … }, mediaTypes: […]) { data nextCursor previousCursor hasNext hasPrevious }
}

conversationMediaCounts

Query

ScopeMESSAGES_READ

Arguments

conversationIdString!Required

Returns

query {
  conversationMediaCounts(conversationId: "…") { type count }
}

conversationMessages

Query

ScopeMESSAGES_READ

Arguments

conversationIdString!Required
messageIdString

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  conversationMessages(conversationId: "…", pagination: { … }, messageId: "…") { data nextCursor previousCursor hasNext hasPrevious }
}

conversationNotes

Query

ScopeNOTES_WRITE

Arguments

conversationIdString!Required

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  conversationNotes(conversationId: "…", pagination: { … }) { data nextCursor previousCursor hasNext hasPrevious }
}

getChatMedia

Query

ScopeMESSAGES_READ

Arguments

chatIdString!Required
mediaTypes[MediaType!]

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  getChatMedia(chatId: "…", pagination: { … }, mediaTypes: […]) { data nextCursor previousCursor hasNext hasPrevious }
}

getChatMediaCounts

Query

ScopeMESSAGES_READ

Arguments

chatIdString!Required

Returns

query {
  getChatMediaCounts(chatId: "…") { type count }
}

getChatNotes

Query

ScopeNOTES_WRITE

Arguments

chatIdString!Required

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  getChatNotes(chatId: "…", pagination: { … }) { data nextCursor previousCursor hasNext hasPrevious }
}

getMessages

Query

ScopeMESSAGES_READ

Arguments

chatIdString!Required
messageIdString

PaginateMessagesInput

cursorString
isBeforeBoolean
limitInt!Required

Returns

nextCursorString
previousCursorString
hasNextBoolean!
hasPreviousBoolean!
unreadCountFloat
totalMessagesFloat
Total count of messages matching the query (only for search)
totalChatsFloat
Total count of chats matching the filters (only for search)
query {
  getMessages(chatId: "…", pagination: { … }, messageId: "…") { data nextCursor previousCursor hasNext hasPrevious }
}

inboxCounts

Queryexpensive

ScopeMESSAGES_READ

Returns

allInt!
mineInt!
mentionsInt!
query {
  inboxCounts { all mine mentions perCollection }
}

label

Query

ScopeMESSAGES_READ

Arguments

idString!Required

Returns

_idString!
nameString!
organisationIdString!
colorString!
activeBoolean!
archivedBoolean!
isSystemBoolean!
descriptionString
createdAtDateTime!
updatedAtDateTime!
query {
  label(id: "…") { _id name organisationId color active }
}

labels

Query

ScopeMESSAGES_READ

Arguments

includeArchivedBoolean!
Defaults to false.

Returns

_idString!
nameString!
organisationIdString!
colorString!
activeBoolean!
archivedBoolean!
isSystemBoolean!
descriptionString
createdAtDateTime!
updatedAtDateTime!
query {
  labels(includeArchived: false) { _id name organisationId color active }
}

searchChats

Queryexpensive

ScopeMESSAGES_READ

Arguments

SearchChatsInput

collectionIdOrSlugString
Filter by collection ID or slug to search within matching chats
Filter by rules (for preview before saving a collection). Combined with collection rules if collectionIdOrSlug is also provided.

GetCursorPaginatedInput

cursorString
limitInt
beforeBoolean

GetSortedInput

sortByString!Required
sortOrderString!Required

Returns

previousCursorString
nextCursorString
hasPreviousBoolean!
hasNextBoolean!
totalCountInt
Total count of chats matching the filters (only on first page)
query {
  searchChats(input: { … }, pagination: { … }, sort: { … }) { data previousCursor nextCursor hasPrevious hasNext }
}

searchConversations

Queryexpensive

ScopeMESSAGES_READ

Arguments

SearchChatsInput

collectionIdOrSlugString
Filter by collection ID or slug to search within matching chats
Filter by rules (for preview before saving a collection). Combined with collection rules if collectionIdOrSlug is also provided.

GetCursorPaginatedInput

cursorString
limitInt
beforeBoolean

GetSortedInput

sortByString!Required
sortOrderString!Required

Returns

previousCursorString
nextCursorString
hasPreviousBoolean!
hasNextBoolean!
totalCountInt
Total count of conversations matching the filters (only on first page)
query {
  searchConversations(input: { … }, pagination: { … }, sort: { … }) { data previousCursor nextCursor hasPrevious hasNext }
}

sendConversationNote

Mutation

ScopeNOTES_WRITE

Arguments

conversationIdString!Required
chatIdString
actingUserIdString

CreateCombinedMessageInput

createdAtDateTime
deliveryStatusMessageDeliveryStatus
Delivery status - defaults based on message direction
replyToMessageString
mentions[ID!]
internalBoolean
Post as an internal note without a mention (team-only, never sent to the customer).
textString
replyToButtonIdString
keyboardTypeString
flowTitleString
media[String!]
captionString
showCaptionAboveMediaBoolean
hasMediaSpoilerBoolean
mediaGroupIdString
isMediaGroupBoolean
mediaGroup[String!]

Returns

_idString!
messageIdFloat
externalMessageIdString
fromMessageSenderUnion
chatChat!
sentFromChannelBoolean
textString
captionString
showCaptionAboveMediaBoolean
hasMediaSpoilerBoolean
contactContact
replyToMessageMessage
mutation {
  sendConversationNote(conversationId: "…", input: { … }, chatId: "…", actingUserId: "…") { _id messageId externalMessageId type from }
}

threadsPage

Query

ScopeMESSAGES_READ

Arguments

conversationIdString!Required
peopleIdString

SocialPaginationInput

cursorString
limitInt!Required

Returns

threads[Chat!]!
nextCursorString
Opaque cursor for the next page; absent when this is the last page.
hasNextBoolean!
query {
  threadsPage(conversationId: "…", pagination: { … }, filter: ALL, peopleId: "…") { threads nextCursor hasNext }
}

On this page