Skip to main content

MCP tools

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

MCP tool: check whether a number is on iMessage​

POST /v1/mcp/tools/check_imessage

Check whether a number can receive iMessage (cached for 30 days) Called by the bubbl3 MCP server with the client’s API key or service identity token; runs POST /v1/lookup with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
phonestringYesPhone number in E.164 format.

Response 200

FieldTypeDescription
cachedboolean
checked_atstring (date-time)ISO 8601 timestamp.
imessageboolean
phonestringPhone number in E.164 format.

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

MCP tool: get a contact by id or phone​

POST /v1/mcp/tools/get_contact

Get one contact by id or phone Called by the bubbl3 MCP server with the client’s API key or service identity token; runs GET /v1/contacts/:id with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
contact_idstringNoContact id (ctc_...).
phonestringNoPhone number in E.164 format.

Response 200

FieldTypeDescription
assigned_line_idstring or nullLine id (ln_...).
capability_checked_atstring (date-time) or nullISO 8601 timestamp.
companystring or null
consent_atstring (date-time) or nullISO 8601 timestamp.
consent_sourcestring or null
consent_statusenumOne of: unknown, opted_in, opted_out.
created_atstring (date-time)ISO 8601 timestamp.
emailstring or null
fieldsobject
first_namestring or null
first_reply_atstring (date-time) or nullISO 8601 timestamp.
idstringContact id (ctc_...).
imessage_capableboolean or null
labelsstring[]
last_inbound_atstring (date-time) or nullISO 8601 timestamp.
last_namestring or null
last_outbound_atstring (date-time) or nullISO 8601 timestamp.
owner_user_idstring (uuid) or null
phonestringPhone 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.

MCP tool: get a conversation and its messages​

POST /v1/mcp/tools/get_conversation

Get the messages in a conversation Called by the bubbl3 MCP server with the client’s API key or service identity token; runs GET /v1/conversations/:id with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
conversation_idstringYesConversation id (cnv_...).
limitintegerNoMost recent messages to return. From 1 to 200. Default 50.

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.

MCP tool: get a message’s status and timeline​

POST /v1/mcp/tools/get_message_status

Get a message’s status and delivery timeline Called by the bubbl3 MCP server with the client’s API key or service identity token; runs GET /v1/messages/:id/events with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
message_idstringYesMessage id (msg_...).

Response 200

FieldTypeDescription
eventsobject[]
events[].detailobjectEvent-specific detail, e.g. the deferral reason.
events[].idstring (uuid)
events[].occurred_atstring (date-time)ISO 8601 timestamp.
events[].typeenumOne of: accepted, routed, capability_checked, deferred, rejected, sending, sent, delivered, read, failed, retried, fallback_sms, received, receipt_missing.
messageobject
message.bodystring
message.channelenumOne of: imessage, sms.
message.contact_idstringContact id (ctc_...).
message.conversation_idstringConversation id (cnv_...).
message.created_atstring (date-time)ISO 8601 timestamp.
message.delivered_atstring (date-time) or nullISO 8601 timestamp.
message.directionenumOne of: outbound, inbound.
message.error_codestring or null
message.error_detailsobject or null
message.external_idstring or null
message.fromstring or nullPhone number in E.164 format.
message.idstringMessage id (msg_...).
message.is_testboolean
message.line_idstring or nullLine id (ln_...).
message.mediaobject[]
message.media[].filenamestring or null
message.media[].mimestring or null
message.media[].sizeinteger or nullFrom 0 to 9007199254740991.
message.media[].urlstring
message.metadataobject
message.read_atstring (date-time) or nullISO 8601 timestamp.
message.scheduled_forstring (date-time) or nullISO 8601 timestamp.
message.sent_atstring (date-time) or nullISO 8601 timestamp.
message.sent_by_staffboolean
message.sourceenum or nullOne of: api, dashboard, workflow, agent, outreach, mcp.
message.statusenumOne of: queued, scheduled, sending, sent, delivered, read, failed, received.
message.tostring or nullPhone number in E.164 format.
message.updated_atstring (date-time)ISO 8601 timestamp.

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

MCP tool: hand a conversation to a person​

POST /v1/mcp/tools/handoff_to_human

Hand the conversation to a person and notify the assigned team Called by the bubbl3 MCP server with the client’s API key or service identity token; runs PATCH /v1/conversations/:id with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
conversation_idstringYesConversation id (cnv_...).
reasonstringYesUp to 500 characters.
team_idstring (uuid)No

Response 200

FieldTypeDescription
conversationobject
conversation.assignee_user_idstring (uuid) or null
conversation.contactobject
conversation.contact.companystring or null
conversation.contact.first_namestring or null
conversation.contact.idstringContact id (ctc_...).
conversation.contact.last_namestring or null
conversation.contact.phonestringPhone number in E.164 format.
conversation.created_atstring (date-time)ISO 8601 timestamp.
conversation.handled_bystring
conversation.idstringConversation id (cnv_...).
conversation.labelsstring[]
conversation.last_messageobject or null
conversation.last_message.directionenumOne of: outbound, inbound.
conversation.last_message.idstringMessage id (msg_...).
conversation.last_message.previewstringUp to 200 characters.
conversation.last_message_atstring (date-time) or nullISO 8601 timestamp.
conversation.line_idstring or nullLine id (ln_...).
conversation.snoozed_untilstring (date-time) or nullISO 8601 timestamp.
conversation.statusenumOne of: open, snoozed, closed.
conversation.team_idstring (uuid) or null
conversation.unread_countintegerFrom 0 to 9007199254740991.
conversation.updated_atstring (date-time)ISO 8601 timestamp.
handed_offbooleanFalse when a person already handled it; the team and note were still applied.

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

MCP tool: list recent conversations​

POST /v1/mcp/tools/list_conversations

List recent conversations Called by the bubbl3 MCP server with the client’s API key or service identity token; runs GET /v1/conversations with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
assigneeenumNoOne of: me, unassigned, any. Default "any".
limitintegerNoFrom 1 to 100. Default 20.
statusenumNoOne of: open, snoozed, closed.

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.

MCP tool: list lines with health and capacity​

POST /v1/mcp/tools/list_lines

List lines with health and the new-contact capacity left today Called by the bubbl3 MCP server with the client’s API key or service identity token; runs GET /v1/lines with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
pool_idstringNoPool id (pool_...).

Response 200

FieldTypeDescription
dataobject[]
data[].contact_cardobject
data[].contact_card.image_urlstringUp to 2048 characters.
data[].contact_card.namestringUp to 100 characters.
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].daily_new_capintegerFrom 0 to 9007199254740991.
data[].display_namestring or null
data[].health_scoreintegerFrom 0 to 100.
data[].idstringLine id (ln_...).
data[].is_sandboxboolean
data[].phonestringPhone number in E.164 format.
data[].pool_idstring or nullPool id (pool_...).
data[].stateenumOne of: provisioning, ready, warming, active, throttled, paused, quarantined, retired.
data[].state_changed_atstring (date-time) or nullISO 8601 timestamp.
data[].state_reasonstring or null
data[].usage_todayobject
data[].usage_today.daystring (date)Usage day in America/New_York, rolling over at 3 AM.
data[].usage_today.new_contactsintegerFrom 0 to 9007199254740991.
data[].usage_today.new_contacts_capintegerFrom 0 to 9007199254740991.
data[].usage_today.sendsintegerFrom 0 to 9007199254740991.
data[].usage_today.sends_capintegerFrom 0 to 9007199254740991.
data[].warmup_dayintegerFrom 0 to 9007199254740991.

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

MCP tool: reply in a conversation​

POST /v1/mcp/tools/reply_to_conversation

Reply in an existing conversation. Never message contacts who opted out. When the workspace requires consent, only contacts who opted in can be messaged. Sends outside 9 AM–8 PM in the contact’s local time are deferred. Until a contact replies, messages must be under 300 characters, contain no links, media, phone numbers or emails, and at most 3 can be sent. Called by the bubbl3 MCP server with the client’s API key or service identity token; runs POST /v1/conversations/:id/messages with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
bodystringYesUp to 2000 characters.
conversation_idstringYesConversation id (cnv_...).
idempotency_keystringNoOptional. Sent as the Idempotency-Key header: retrying with the same key returns the first message instead of sending again. Keys starting with outreach:, workflow: or agent: are refused. Up to 255 characters.

Response 200

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.

MCP tool: search contacts​

POST /v1/mcp/tools/search_contacts

Search contacts Called by the bubbl3 MCP server with the client’s API key or service identity token; runs GET /v1/contacts with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
limitintegerNoFrom 1 to 100. Default 20.
querystringYesName, phone, email or company. Up to 100 characters.

Response 200

FieldTypeDescription
dataobject[]
data[].assigned_line_idstring or nullLine id (ln_...).
data[].capability_checked_atstring (date-time) or nullISO 8601 timestamp.
data[].companystring or null
data[].consent_atstring (date-time) or nullISO 8601 timestamp.
data[].consent_sourcestring or null
data[].consent_statusenumOne of: unknown, opted_in, opted_out.
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].emailstring or null
data[].fieldsobject
data[].first_namestring or null
data[].first_reply_atstring (date-time) or nullISO 8601 timestamp.
data[].idstringContact id (ctc_...).
data[].imessage_capableboolean or null
data[].labelsstring[]
data[].last_inbound_atstring (date-time) or nullISO 8601 timestamp.
data[].last_namestring or null
data[].last_outbound_atstring (date-time) or nullISO 8601 timestamp.
data[].owner_user_idstring (uuid) or null
data[].phonestringPhone number in E.164 format.
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.

MCP tool: send a message​

POST /v1/mcp/tools/send_message

Send a message. Never message contacts who opted out. When the workspace requires consent, only contacts who opted in can be messaged. Sends outside 9 AM–8 PM in the contact’s local time are deferred. Until a contact replies, messages must be under 300 characters, contain no links, media, phone numbers or emails, and at most 3 can be sent. Called by the bubbl3 MCP server with the client’s API key or service identity token; runs POST /v1/messages with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
bodystringYesUp to 2000 characters.
contact_idstringNoContact id (ctc_...).
fallbackbooleanNoAllow SMS if the contact is not on iMessage.
idempotency_keystringNoOptional. Sent as the Idempotency-Key header: retrying with the same key returns the first message instead of sending again. Keys starting with outreach:, workflow: or agent: are refused. Up to 255 characters.
pool_idstringNoPool id (pool_...).
tostringNoRecipient phone number in E.164. Provide to or contact_id.

Response 200

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.

MCP tool: create or update a contact by phone​

POST /v1/mcp/tools/upsert_contact

Create a contact or update the one with this phone number. Does not change consent Called by the bubbl3 MCP server with the client’s API key or service identity token; runs PATCH /v1/contacts/:id with the same permissions and limits. Pass idempotency_key in the input, not the header.

Headers

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

Request body

FieldTypeRequiredDescription
companystringNoUp to 200 characters.
emailstring (email)NoUp to 254 characters.
fieldsobjectNo
first_namestringNoUp to 100 characters.
last_namestringNoUp to 100 characters.
phonestringYesPhone number in E.164 format.

Response 200

FieldTypeDescription
contactobject
contact.assigned_line_idstring or nullLine id (ln_...).
contact.capability_checked_atstring (date-time) or nullISO 8601 timestamp.
contact.companystring or null
contact.consent_atstring (date-time) or nullISO 8601 timestamp.
contact.consent_sourcestring or null
contact.consent_statusenumOne of: unknown, opted_in, opted_out.
contact.created_atstring (date-time)ISO 8601 timestamp.
contact.emailstring or null
contact.fieldsobject
contact.first_namestring or null
contact.first_reply_atstring (date-time) or nullISO 8601 timestamp.
contact.idstringContact id (ctc_...).
contact.imessage_capableboolean or null
contact.labelsstring[]
contact.last_inbound_atstring (date-time) or nullISO 8601 timestamp.
contact.last_namestring or null
contact.last_outbound_atstring (date-time) or nullISO 8601 timestamp.
contact.owner_user_idstring (uuid) or null
contact.phonestringPhone number in E.164 format.
contact.updated_atstring (date-time)ISO 8601 timestamp.
createdboolean

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