Skip to main content

Conversations

Every call needs Authorization: Bearer <key>. 8 calls:

List conversations​

GET /v1/conversations

Most recent activity first. Agents see conversations assigned to them or unassigned.

Query parameters

NameTypeRequiredDescription
limitintegerNoFrom 1 to 100. Default 50.
cursorstringNoOpaque cursor from next_cursor. Up to 512 characters.
statusenumNoOne of: open, snoozed, closed.
assigneestring (uuid) or enumNoA user id, me or unassigned. One of: me, unassigned.
team_idstring (uuid)No
labelstringNoUp to 64 characters.
line_idstringNoLine id (ln_...).
contact_idstringNoContact id (ctc_...).
qstringNoUp to 100 characters.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].assignee_user_idstring (uuid) or null
data[].contactobject
data[].contact.companystring or null
data[].contact.first_namestring or null
data[].contact.idstringContact id (ctc_...).
data[].contact.last_namestring or null
data[].contact.phonestringPhone number in E.164 format.
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].handled_bystring
data[].idstringConversation id (cnv_...).
data[].labelsstring[]
data[].last_messageobject or null
data[].last_message.directionenumOne of: outbound, inbound.
data[].last_message.idstringMessage id (msg_...).
data[].last_message.previewstringUp to 200 characters.
data[].last_message_atstring (date-time) or nullISO 8601 timestamp.
data[].line_idstring or nullLine id (ln_...).
data[].snoozed_untilstring (date-time) or nullISO 8601 timestamp.
data[].statusenumOne of: open, snoozed, closed.
data[].team_idstring (uuid) or null
data[].unread_countintegerFrom 0 to 9007199254740991.
data[].updated_atstring (date-time)ISO 8601 timestamp.
next_cursorstring or nullPass as cursor to get the next page; null at the end.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Get a conversation with its recent messages and notes​

GET /v1/conversations/:id

Path parameters

NameTypeRequiredDescription
idstringYesConversation id (cnv_...).

Query parameters

NameTypeRequiredDescription
messages_limitintegerNoFrom 1 to 100. Default 50.
messages_cursorstringNoOpaque cursor from messages_next_cursor, for older messages. Up to 512 characters.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
assignee_user_idstring (uuid) or null
contactobject
contact.companystring or null
contact.first_namestring or null
contact.idstringContact id (ctc_...).
contact.last_namestring or null
contact.phonestringPhone number in E.164 format.
created_atstring (date-time)ISO 8601 timestamp.
handled_bystring
idstringConversation id (cnv_...).
labelsstring[]
last_messageobject or null
last_message.directionenumOne of: outbound, inbound.
last_message.idstringMessage id (msg_...).
last_message.previewstringUp to 200 characters.
last_message_atstring (date-time) or nullISO 8601 timestamp.
line_idstring or nullLine id (ln_...).
messagesobject[]
messages[].bodystring
messages[].channelenumOne of: imessage, sms.
messages[].contact_idstringContact id (ctc_...).
messages[].conversation_idstringConversation id (cnv_...).
messages[].created_atstring (date-time)ISO 8601 timestamp.
messages[].delivered_atstring (date-time) or nullISO 8601 timestamp.
messages[].directionenumOne of: outbound, inbound.
messages[].error_codestring or null
messages[].error_detailsobject or null
messages[].external_idstring or null
messages[].fromstring or nullPhone number in E.164 format.
messages[].idstringMessage id (msg_...).
messages[].is_testboolean
messages[].line_idstring or nullLine id (ln_...).
messages[].mediaobject[]
messages[].media[].filenamestring or null
messages[].media[].mimestring or null
messages[].media[].sizeinteger or nullFrom 0 to 9007199254740991.
messages[].media[].urlstring
messages[].metadataobject
messages[].read_atstring (date-time) or nullISO 8601 timestamp.
messages[].scheduled_forstring (date-time) or nullISO 8601 timestamp.
messages[].sent_atstring (date-time) or nullISO 8601 timestamp.
messages[].sent_by_staffboolean
messages[].sourceenum or nullOne of: api, dashboard, workflow, agent, outreach, mcp.
messages[].statusenumOne of: queued, scheduled, sending, sent, delivered, read, failed, received.
messages[].tostring or nullPhone number in E.164 format.
messages[].updated_atstring (date-time)ISO 8601 timestamp.
messages_next_cursorstring or nullPass as messages_cursor for older messages; null when there are none.
notesobject[]The most recent internal notes, newest first.
notes[].author_user_idstring (uuid) or null
notes[].bodystring
notes[].conversation_idstringConversation id (cnv_...).
notes[].created_atstring (date-time)ISO 8601 timestamp.
notes[].idstring (uuid)
snoozed_untilstring (date-time) or nullISO 8601 timestamp.
statusenumOne of: open, snoozed, closed.
team_idstring (uuid) or null
unread_countintegerFrom 0 to 9007199254740991.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Assign, snooze, close, reopen or label a conversation​

PATCH /v1/conversations/:id

Agents can update conversations they can see and assign them only to themselves or nobody. Team, labels and handled_by need full inbox access; labels also need contacts access and change the contact's labels. handled_by: agent:&lt;id&gt; needs a live agent, and is refused for test-mode API keys, because the agent then sends live messages.

Path parameters

NameTypeRequiredDescription
idstringYesConversation id (cnv_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
assignee_user_idstring (uuid) or nullNo
handled_bystringNo
labelsstring[]NoUp to 50 items.
mark_readbooleanNo
snoozed_untilstring (date-time) or nullNoISO 8601 timestamp.
statusenumNoOne of: open, snoozed, closed.
team_idstring (uuid) or nullNo

Response 200

FieldTypeDescription
assignee_user_idstring (uuid) or null
contactobject
contact.companystring or null
contact.first_namestring or null
contact.idstringContact id (ctc_...).
contact.last_namestring or null
contact.phonestringPhone number in E.164 format.
created_atstring (date-time)ISO 8601 timestamp.
handled_bystring
idstringConversation id (cnv_...).
labelsstring[]
last_messageobject or null
last_message.directionenumOne of: outbound, inbound.
last_message.idstringMessage id (msg_...).
last_message.previewstringUp to 200 characters.
last_message_atstring (date-time) or nullISO 8601 timestamp.
line_idstring or nullLine id (ln_...).
snoozed_untilstring (date-time) or nullISO 8601 timestamp.
statusenumOne of: open, snoozed, closed.
team_idstring (uuid) or null
unread_countintegerFrom 0 to 9007199254740991.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Reply in a conversation​

POST /v1/conversations/:id/messages

Queues a reply to the conversation’s contact, through the same send pipeline as POST /v1/messages. Agents can reply in conversations assigned to them or unassigned.

Path parameters

NameTypeRequiredDescription
idstringYesConversation id (cnv_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
bodystringNoUp to 2000 characters.
mediaobject[]NoUp to 10 items.
media[].filenamestringNoUp to 255 characters.
media[].mimestringNoUp to 100 characters.
media[].urlstring (uri)YesPublicly fetchable URL of the file. Up to 2048 characters.

Response 201

FieldTypeDescription
bodystring
channelenumOne of: imessage, sms.
contact_idstringContact id (ctc_...).
conversation_idstringConversation id (cnv_...).
created_atstring (date-time)ISO 8601 timestamp.
delivered_atstring (date-time) or nullISO 8601 timestamp.
directionenumOne of: outbound, inbound.
error_codestring or null
error_detailsobject or null
external_idstring or null
fromstring or nullPhone number in E.164 format.
idstringMessage id (msg_...).
is_testboolean
line_idstring or nullLine id (ln_...).
mediaobject[]
media[].filenamestring or null
media[].mimestring or null
media[].sizeinteger or nullFrom 0 to 9007199254740991.
media[].urlstring
metadataobject
read_atstring (date-time) or nullISO 8601 timestamp.
scheduled_forstring (date-time) or nullISO 8601 timestamp.
sent_atstring (date-time) or nullISO 8601 timestamp.
sent_by_staffboolean
sourceenum or nullOne of: api, dashboard, workflow, agent, outreach, mcp.
statusenumOne of: queued, scheduled, sending, sent, delivered, read, failed, received.
tostring or nullPhone number in E.164 format.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Add an internal note​

POST /v1/conversations/:id/notes

Notes are visible to the team only and are never sent to the contact.

Path parameters

NameTypeRequiredDescription
idstringYesConversation id (cnv_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
bodystringYesUp to 5000 characters.

Response 201

FieldTypeDescription
author_user_idstring (uuid) or null
bodystring
conversation_idstringConversation id (cnv_...).
created_atstring (date-time)ISO 8601 timestamp.
idstring (uuid)

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

List saved replies​

GET /v1/saved-replies

Agents see replies for everyone and for their own team.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].bodystring
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].idstring (uuid)
data[].team_idstring (uuid) or null
data[].titlestring
data[].updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Create a saved reply​

POST /v1/saved-replies

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
bodystringYesUp to 2000 characters.
team_idstring (uuid) or nullNo
titlestringYesUp to 120 characters.

Response 201

FieldTypeDescription
bodystring
created_atstring (date-time)ISO 8601 timestamp.
idstring (uuid)
team_idstring (uuid) or null
titlestring
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Update a saved reply​

PATCH /v1/saved-replies/:id

Path parameters

NameTypeRequiredDescription
idstring (uuid)Yes

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
bodystringNoUp to 2000 characters.
team_idstring (uuid) or nullNo
titlestringNoUp to 120 characters.

Response 200

FieldTypeDescription
bodystring
created_atstring (date-time)ISO 8601 timestamp.
idstring (uuid)
team_idstring (uuid) or null
titlestring
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.