Conversations and messages

Conversation status, assignment and lifecycle; message channels, direction and threading; notes and drafts.

A conversation is a thread of communication with one customer. It holds the workflow state agents care about: status, priority, assignment, queue, tags and SLA. A message is one communication inside it: an email, a chat line, an SMS, a call, or a message from your own system.

Customer

Conversation
status: open

Conversation
status: done

Message
in · email

Message
out · email

Note
internal

Draft
unsent

Message
in · chat

Diagram source
flowchart LR
  C[Customer] --> CV1[Conversation<br/>status: open]
  C --> CV2[Conversation<br/>status: done]
  CV1 --> M1[Message<br/>in · email]
  CV1 --> M2[Message<br/>out · email]
  CV1 --> N1[Note<br/>internal]
  CV1 --> D1[Draft<br/>unsent]
  CV2 --> M3[Message<br/>in · chat]

Conversation lifecycle

StatusMeaning
openNeeds attention. Counts toward queues and SLAs.
snoozedParked until a time or event. Set with status: "snoozed" and a snooze object, using an option from your org's snooze settings.
doneResolved. A new inbound message usually reopens it.

New conversations can be created as open or done. Orgs can also define sub-statuses (subStatus) to add detail inside a status, such as "Waiting on warehouse".

Key conversation attributes

Conversation
customerstringrequired
namestring
statusstring
priorityinteger
directionstring
assignedUsersstring[]
assignedTeamsstring[]
queueobject
tagsstring[]
customobject
externalIdstring

Read-only counters and timestamps come back in responses: messageCount, noteCount, outboundMessageCount, firstResponse, lastMessageIn, sla, satisfaction and channels (every channel used in the thread).

post/v1/customers/{id}/conversations put/v1/conversations/{id} post/v1/conversations/{id}/tags

Messages

Message
channelstringrequired
appstringrequired
directionstring
previewstring
subjectstring
conversationstring
metaobject
sentAtdate-time
externalIdstring
attachmentsobject[]
importedAtdate-time

Two ways to create a message

post/v1/conversations/{id}/messages

Use this when you already track the conversation, for example because you stored its ID or externalId.

Request body
{
  "channel": "chat",
  "app": "acme-messenger",
  "direction": "in",
  "preview": "Can I change the delivery address on order #4417?",
  "externalId": "msg_01HF3Q8Y2V",
  "sentAt": "2026-10-21T14:02:11Z"
}

Notes

Notes are internal comments on a conversation. Customers never see them. They support @mentions of users or teams through userMentions (up to 20), and attachments.

post/v1/conversations/{id}/notes
Request body
{
  "body": "Warehouse confirmed the replacement shipped today.",
  "userMentions": [{ "user": "58190b991f2932100010d683" }]
}

Drafts

Drafts are outbound messages that haven't been sent. Integrations use them to prepare replies, such as an AI-suggested answer, for an agent to review and send.

post/v1/customers/{id}/drafts

Rate limits that apply

  • A single client can create up to 120 messages, conversations, notes, drafts or custom objects per customer per minute. Records with importedAt are exempt.
  • A conversation or message can be updated 100 times in 10 minutes.

See Rate limits for the full picture.