List Conversations
Beta/v1/messaging/conversationsThis endpoint is idempotent. Learn more
Returns the caller's conversations, most recently active first.
A customer portal user sees only their own support case with the vendor, and an empty list until they have contacted support.
cursoroptional stringOpaque cursor token identifying where the page of results starts.
Use the cursor value embedded in a previous response's next_page_url or previous_page_url to fetch the adjacent page. Omit to start from the first page.
limitoptional integerMaximum number of results to return in a single page.
qoptional stringFree-text search term used to filter results.
Which fields are matched against the term varies by endpoint.
typeoptional stringenumValues:direct_messagegroupsystemFilter by conversation type.
audienceoptional stringenumValues:internalcustomerFilter by whether the conversation is team-only or customer-facing.
internal: threads the customer never sees — direct messages, group threads, and record discussions.customer: external customer-service cases the customer takes part in, from the portal or a bridged email thread.
statusoptional stringenumValues:activehiddenFilter by whether the caller has hidden the conversation from their own list.
topic_resource_typeoptional stringenumValues:accountactorentityRestrict to conversations attached to a business record of this type, together with topic_resource_id.
Matches both conversations anchored to the record and conversations that merely link it, which is what powers the "discussions on this record" view.
topic_resource_idoptional stringThe id of the business record, together with topic_resource_type.
workflow_statusoptional stringenumValues:newopenwaiting_internalFilter the support inbox to a single triage lane.
new: opened but nobody has triaged it yet.open: actively being worked.waiting_internal: blocked on the internal team.waiting_external: blocked on a reply from the customer.needs_approval: a drafted reply is waiting for a human to approve it.resolved: closed out.
The working inbox hides resolved cases unless you ask for this lane explicitly.
assignee_resource_idoptional stringFilter the support inbox to cases owned by this assignee, an account user or an account group.
unassignedoptional booleanRestrict the support inbox to cases nobody has been assigned yet.
include_archivedoptional booleanReturn the archived support inbox instead of the working one.
This swaps the view rather than widening it: archived cases are returned and unarchived ones are left out.
include[]optional arrayenumValues:assigneegroupparticipantsSub-objects to expand in the response. When omitted, sub-objects are returned as null.
objectstringenumValues:listResource type identifier.
page_infoobjectPagination metadata.
next_page_urlstringnullableRelative URL that fetches the next page of results.
previous_page_urlstringnullableRelative URL that fetches the previous page of results.
has_next_pagebooleanWhether more results exist after this page.
has_prev_pagebooleanWhether results exist before this page.
dataarray of conversationResources in this page.
idstringConversation ID.
objectstringenumValues:conversationResource type identifier.
typestringenumValues:direct_messagegroupsystemWhat kind of conversation this is.
direct_message: a 1:1 thread between two users.group: a named thread with multiple user or agent members (including customer-facing support cases).system: a system channel that delivers automated account alerts.
audiencestringenumValues:internalcustomerWhether this is a team-only conversation (internal) or a customer-facing case (customer).
A customer never sees an internal conversation, even one that is about them; within a customer case they see only the messages that were sent to them, not the team's internal notes on the case.
titlestringnullableThe display title of a group conversation.
Direct messages carry no stored title; clients derive one from the participants.
workflow_statusstringnullableenumValues:newopenwaiting_internalThe triage lane of a customer-facing case.
Only conversations with a customer audience have a triage lane. It drives the support inbox and is independent of status, which is about visibility rather than progress.
new: opened but not yet triaged.open: actively being worked.waiting_internal: blocked on the internal team.waiting_external: blocked on an external reply.needs_approval: a drafted reply is awaiting human approval.resolved: closed out.
The reusable roster this conversation was started from.
This is provenance only: the roster's members were copied into the conversation when it was created, so later edits to the roster never add or remove participants here, and deleting the roster only clears this reference.
idstringMessaging group ID.
objectstringenumValues:messaging_groupResource type identifier.
namestringThe roster's display name.
The roster's members (users and agents).
null in this endpoint.created_atstring (date-time)Creation timestamp.
updated_atstring (date-time)Last updated timestamp.
statusstringenumValues:activearchivedhiddenThe conversation's state from the caller's point of view.
active: a normal, visible conversation.archived: archived for the whole account.hidden: the caller dismissed the conversation from their own list while everyone else still sees it, which takes precedence over an account-level archive.
legal_holdstringenumValues:releasedheldWhether the conversation is under legal hold.
While held, the conversation is exempt from automatic retention purging and from redaction until the hold is released.
assigneeactorExpandablenullableThe owner of the case: either a user actor (an individual team member) or a group actor (a team).
idstringUnique identifier of the actor.
objectstringenumValues:actorResource type identifier.
typestringenumValues:userapi_keyagentActor type.
user: a human user account.api_key: a programmatic caller authenticating with an API key.agent: an automated agent acting on the account's behalf.group: a shared group identity, such as a "Customer Service" persona, rather than a single individual.
namestringnullableThe actor's display name.
handlestringnullableHuman-readable handle identifying the actor.
- For
useractors: the user's email address. - For
api_keyactors: the redacted key value.
Other actor types carry no handle.
avatar_urlstringnullableURL of the actor's profile photo, if one is set.
Only populated for user actors.
The role the actor holds in the account, which determines what it is permitted to do.
null in this endpoint.The participants of the conversation.
Only current members are listed; anyone who left or was removed is omitted, even though their past messages remain in the thread.
objectstringenumValues:listResource type identifier.
page_infoobjectPagination metadata.
next_page_urlstringnullableRelative URL that fetches the next page of results.
previous_page_urlstringnullableRelative URL that fetches the previous page of results.
has_next_pagebooleanWhether more results exist after this page.
has_prev_pagebooleanWhether results exist before this page.
dataarray of conversation_participantResources in this page.
idstringParticipant ID.
objectstringenumValues:conversation_participantResource type identifier.
typestringenumValues:useragentsystemThe kind of participant.
user: an account user (a teammate).agent: an AI agent.system: the system itself, which posts automated messages.customer: an external customer in a support case.
rolestringenumValues:owneradminmemberThe participant's permission level in the conversation.
owner: can rename or delete the conversation and manage its members and their roles.admin: can add or remove members and rename the conversation.member: can post, react, mute, and leave.viewer: read-only access.
membershipstringenumValues:activeleftremovedThe participant's membership in the conversation.
active: currently a member.left: voluntarily left the conversation.removed: removed by an admin.hidden: still a member but has hidden the conversation from their own list.
Membership records are kept rather than deleted, so re-adding someone who left or was removed reactivates their original record and their earlier messages stay attributed to them.
notificationsstringenumValues:unmutedmutedThe participant's notification preference for the conversation.
unmuted: receives notifications for new messages.muted: new-message notifications are suppressed, though a direct @mention still raises an in-app alert (never an email), and the conversation still counts toward the unread total.
actoractornullableThe user or agent behind this participant.
A customer participant resolves to the user actor of the person who opened the case; the system participant that posts automated messages has no actor.
null in this endpoint.agent_trigger_policystringnullableenumValues:mentionkeywordalwaysFor agent participants, when the agent is invoked in response to messages.
mention: only when the agent is @mentioned.keyword: when a message contains one of the agent's trigger keywords.always: on every human message in the conversation.
agent_trigger_keywordsarray of stringFor agent participants with a keyword or mention policy, the keywords that trigger it.
Matching is case-insensitive and looks anywhere in the message body: under keyword the bare word is matched, under mention it must appear as @keyword. Replying directly to one of the agent's own messages always reaches it, so an agent with no keywords still answers replies but nothing else.
read_cursorread_cursorThe participant's read position in the conversation (read receipts): how far they have read.
null in this endpoint.topicentityExpandablenullableThe app record this conversation is anchored to, such as a sales order.
Anchored conversations surface as the discussion thread on that record.
idstringUnique identifier for the entity.
objectstringenumValues:entityResource type identifier.
typestringenumValues:accountactorentityThe resource kind that this entity references, as an object-type value (e.g. user, account).
Unlike object — which is always entity — this names the underlying resource the id points to.
namestringnullableHuman-readable display name for the entity (e.g. a user's full name, a sales order number).
handlestringnullableSecondary human-readable identifier (e.g. email address, username, redacted API key value).
unreadintegerNumber of messages the caller has not yet read.
last_message_atstring (date-time)nullableWhen the most recent message was sent.
last_messagechat_messageExpandablenullableThe most recent message in the conversation.
idstringMessage ID.
objectstringenumValues:chat_messageResource type identifier.
kindstringenumValues:chatsystem_eventagentWhat this message represents.
chat: written by a person.system_event: a record of something that happened in the conversation, such as someone joining or a record being linked.agent: written by an AI agent taking part in the conversation.scheduled: came from a send queued ahead of time.alert: an automated alert surfaced in the conversation.email: a message carried over the case's bridged email thread, either one that arrived from the customer or a reply sent back out to them.
statusstringenumValues:draftscheduledsentWhere the message stands in its life.
draft: a proposed reply to the customer, still editable and waiting for approval before anyone outside sees it.scheduled: queued to go out at a future time.sent: delivered, and part of the conversation everyone reads.canceled: a scheduled message stopped before it went out.rejected: a draft discarded instead of being sent.failed: a scheduled message that could not be delivered.superseded: a draft replaced by a newer one for the same thread.
Only a sent message occupies a place in the conversation; the others are records of messages that never reached it.
visibilitystringenumValues:internalexternalsystemWho can see this message.
internal: a note only your team can see.external: sent to or received from an outside party, such as the customer on a support case, and part of the official record of that exchange.system: an event both your team and the customer see.
A customer reading their own case is never served internal messages.
The conversation this message belongs to.
null in this endpoint.sequenceintegerThe message's position in the conversation timeline, counting up from the first message.
A sequence is assigned only when a message is delivered, so a draft or a not-yet-sent scheduled message reports 0. Listing a conversation's messages pages backwards through this ordering.
bodystringnullableMessage body.
A message made up of nothing but attachments or a linked record carries no body, and a deleted message has its body cleared.
subjectstringnullableThe email subject line.
On an email-bridged case, this is the subject of the inbound email, or the subject a customer reply is sent out with.
senderactorExpandablenullableThe party the message is displayed as coming from.
On a customer-facing case the customer sees every reply from your side as a single branded "Customer Service" party rather than the individual person or agent behind it, and an inbound email is shown as the outside address it arrived from. Everywhere else this is the user or agent that wrote the message. Pure system messages have no sender.
idstringUnique identifier of the actor.
objectstringenumValues:actorResource type identifier.
typestringenumValues:userapi_keyagentActor type.
user: a human user account.api_key: a programmatic caller authenticating with an API key.agent: an automated agent acting on the account's behalf.group: a shared group identity, such as a "Customer Service" persona, rather than a single individual.
namestringnullableThe actor's display name.
handlestringnullableHuman-readable handle identifying the actor.
- For
useractors: the user's email address. - For
api_keyactors: the redacted key value.
Other actor types carry no handle.
avatar_urlstringnullableURL of the actor's profile photo, if one is set.
Only populated for user actors.
The role the actor holds in the account, which determines what it is permitted to do.
null in this endpoint.authoractorExpandablenullableThe user or agent that actually wrote the message.
Absent on system messages, and on a vendor-side reply read by a customer — the real author behind the branded "Customer Service" party is never revealed to them.
idstringUnique identifier of the actor.
objectstringenumValues:actorResource type identifier.
typestringenumValues:userapi_keyagentActor type.
user: a human user account.api_key: a programmatic caller authenticating with an API key.agent: an automated agent acting on the account's behalf.group: a shared group identity, such as a "Customer Service" persona, rather than a single individual.
namestringnullableThe actor's display name.
handlestringnullableHuman-readable handle identifying the actor.
- For
useractors: the user's email address. - For
api_keyactors: the redacted key value.
Other actor types carry no handle.
avatar_urlstringnullableURL of the actor's profile photo, if one is set.
Only populated for user actors.
The role the actor holds in the account, which determines what it is permitted to do.
null in this endpoint.Files, images, links, or resources attached to the message.
objectstringenumValues:listResource type identifier.
page_infoobjectPagination metadata.
next_page_urlstringnullableRelative URL that fetches the next page of results.
previous_page_urlstringnullableRelative URL that fetches the previous page of results.
has_next_pagebooleanWhether more results exist after this page.
has_prev_pagebooleanWhether results exist before this page.
dataarray of message_attachmentResources in this page.
idstringAttachment ID.
objectstringenumValues:message_attachmentResource type identifier.
kindstringenumValues:fileimagelinkThe kind of attachment, which determines how it is stored and which of the fields below are populated.
file: an uploaded non-image file.image: an uploaded image.link: an external URL reference, with no stored file.resource: a reference to an in-app resource, such as an order.
filenamestringnullableThe filename the attachment was uploaded under.
Carried only by file and image attachments.
content_typestringnullableThe MIME type of the uploaded content.
Carried only by file and image attachments.
size_bytesintegernullableThe size of the uploaded content in bytes.
Carried only by file and image attachments, and only when the sender supplied it with the message.
urlstringnullableWhere to fetch the attachment: a signed download URL for file and image attachments, or the target address for link attachments.
Download URLs are signed for one hour and regenerated each time the message is read, so follow the URL promptly instead of persisting it. resource attachments have no URL — use resource to resolve them.
resourceentitynullableThe in-app record a resource attachment points to, such as a sales order.
null in this endpoint.created_atstring (date-time)Creation timestamp.
reply_tochat_messagenullableThe message this one replies to.
null in this endpoint.resourceentityExpandablenullableThe record this message links to, such as the order it is about.
idstringUnique identifier for the entity.
objectstringenumValues:entityResource type identifier.
typestringenumValues:accountactorentityThe resource kind that this entity references, as an object-type value (e.g. user, account).
Unlike object — which is always entity — this names the underlying resource the id points to.
namestringnullableHuman-readable display name for the entity (e.g. a user's full name, a sales order number).
handlestringnullableSecondary human-readable identifier (e.g. email address, username, redacted API key value).
channelstringenumValues:messageemailHow the message reached its audience, or how a draft will be sent once it is approved.
message: appears in the conversation itself.email: goes out as email on the thread of the inbox the case is bridged to.
scheduled_atstring (date-time)nullableWhen a message queued for a future send is due to go out.
The agent run that produced this message, for deep-linking from an agent reply to its run.
null in this endpoint.streaming_statestringnullableenumValues:streamingcompleteThe streaming state of an agent reply.
streaming means the body is still being generated and keeps growing as realtime updates arrive; complete means it is final.
client_message_idstringnullableThe dedupe key the client supplied when sending, echoed back so an optimistic local copy can be matched to the stored message.
edited_atstring (date-time)nullableWhen the message was last edited.
deleted_atstring (date-time)nullableWhen the message was deleted.
A deleted message keeps its place in the timeline with its body cleared, so surrounding ordering and replies stay intact.
created_atstring (date-time)Creation timestamp.
updated_atstring (date-time)Last update timestamp.
agent_run_failedbooleanWhether this message is an agent reply reporting that the agent's run failed.
The body explains the failure to the reader rather than answering the request.
agent_error_codestringnullableenumValues:expired_tokenapi_key_expiredapi_key_revokedMachine-readable reason an agent reply failed.
A client can react to the specific code rather than just showing the body — agent_spending_cap_reached, for example, is a cue to offer raising the agent spending limit.
created_atstring (date-time)Creation timestamp.
updated_atstring (date-time)Last update timestamp.
Responses
Successful response for List Conversations