Lists the CRM inbox conversations (channel whatsapp; instagram, facebook —Messenger— or tiktok direct messages; or email, the AI Setter's email bridge), most recent activity first, paginated by cursor (limit up to 200). Filter by status (open by default; closed, archived or all), channel (one of those five), WhatsApp line (phone_number_id) or the person, deal, company or prospect they are linked to. phone (with its country code) returns the WhatsApp conversations with that number on every line (one per line), matched the way the CRM matches an incoming message (the Argentine 9 and the Mexican 1 are folded), so it is the way to find the right thread before writing; an invalid number is 400 invalid_phone. last_inbound_after (epoch ms) keeps only the conversations where the contact wrote after that time (last_inbound_at), for example the replies since the last check. Conversations on a line that belongs to another part of the product are not included, and a seller with restricted scope only gets the conversations they own or those on lines they work; those filters apply to the page read, so a page can bring fewer than limit while has_more is true (follow next_cursor). Each conversation brings its contact (with contact_match_key, the key two threads of the same number share), line, linked records, the assignee and the owner with their names (assignee_name, human_owner_name), the last message and the unread count. Use crm.messages.list for the messages of one conversation. With TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted, and their fields are left out of the response (the permissions guide lists what each platform allows).
Escopo
crm:read
Permissão
Ver o módulo · Ação do CRM: view_inbox
Tool do MCP
crm_conversations_listNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.list".
Custo declarado: até 205 leituras e 0 escritas por chamada (contam na cota diária).
Parâmetros
limitintegerqueryopcional
How many items this page brings at most (see the maximum and the default in the schema).
Padrão: 25
cursorstringqueryopcional
The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.
statusenumqueryopcional
open (the default), closed, archived or all.
Valores: open, closed, archived, all · Padrão: "open"
channelenumqueryopcional
whatsapp, instagram, facebook (Messenger), tiktok or email (the email bridge of the AI Setter).
Only the conversations of this WhatsApp line: a phone_number_id from crm.lines.list.
person_idstringqueryopcional
Only the conversations linked to this person (crm.persons.list). At most one of person_id, deal_id, company_id and prospect_id.
deal_idstringqueryopcional
Only the conversations linked to this deal (crm.deals.list).
company_idstringqueryopcional
Only the conversations linked to this company (crm.companies.list).
prospect_idstringqueryopcional
Only the conversations linked to this prospect (crm.prospects.list).
phonestringqueryopcional
A phone number with its country code (E.164, for example +5491155550000): only the WhatsApp conversations with that number, on any line (or on phone_number_id).
last_inbound_afterintegerqueryopcional
Only conversations whose last INBOUND message (lastInboundAt) is later than this time, epoch ms.
Returns one inbox conversation (channel, contact, WhatsApp line, linked persons, deals, companies and prospects, owner, status, unread count, last message) plus reply_window: open (free text can be sent now), human_agent (Meta direct messages between 24 hours and 7 days: only a person replying from the screen), closed (WhatsApp more than 24 hours after the contact's last message: only an approved template) or no_window. Not found if the id does not exist, belongs to another module's line or is outside the seller's scope. With TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted, and their fields are left out of the response (the permissions guide lists what each platform allows).
Escopo
crm:read
Permissão
Ver o módulo · Ação do CRM: view_inbox
Tool do MCP
crm_conversations_getNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.get".
Custo declarado: até 3 leituras e 0 escritas por chamada (contam na cota diária).
Parâmetros
conversation_idstringrotaobrigatório
The conversation: an id from crm.conversations.list.
Resposta
idstring
channelstring
whatsapp, instagram, facebook (Messenger), tiktok or email (the email bridge of the AI Setter).
statusstring
open, closed or archived.
reply_windowobject
external_contact_idstring
The contact on the platform: their WhatsApp number without + or the social account's id.
external_contact_namestring | null
external_contact_phonestring | null
WhatsApp: the contact's number.
contact_match_keystring | null
WhatsApp: the key the CRM matches the contact's number by (the Argentine 9 and the Mexican 1 folded). Two conversations with the same key are the same number.
inbound_phone_number_idstring | null
WhatsApp: the conversation's line (an id of crm.lines.list); absent in a conversation imported from another system.
socialobject
Direct messages: the page or account they came to and the author's handle and photo.
person_idsarray<string>
The persons (crm.persons.get), the CRM records it is linked to.
deal_idsarray<string>
The deals (crm.deals.get), the CRM records it is linked to.
company_idsarray<string>
The companies (crm.companies.get), the CRM records it is linked to.
prospect_idsarray<string>
The prospects (crm.prospects.get), the CRM records it is linked to.
assignee_idstring | null
The member the conversation is assigned to.
assignee_namestring | null
That member's name (null if no longer a member).
human_owner_user_idstring | null
The person responsible for the lead behind the conversation (the owner of its open deal, prospect or person).
human_owner_namestring | null
That owner's name, as a member (null if no longer a member).
ai_owner_user_idstring | null
When an AI Team position owns the lead instead: its user (ai-<position id>, crm.ai_team.positions.list).
source_idstring | null
The lead source that was active on the line when the conversation was created (crm.lead_sources.get).
last_message_atnumber
last_message_previewstring
last_message_directionstring
inbound (the contact wrote) or outbound.
last_message_statusstring
The delivery status of the last message: sent, delivered, read or failed.
last_inbound_atnumber
When the contact last wrote (epoch ms): WhatsApp free text is allowed for 24 hours after it.
unread_countnumber
pinnedboolean
mutedboolean
label_idsarray<string>
The conversation's own labels (crm.labels.list with entity conversation).
archived_atnumber
merged_into_idstring | null
When this conversation was merged into another one: that one's id.
Closes a conversation: it leaves the open inbox until the contact writes again, a message is sent in it or it is reopened. Its messages are kept. Idempotent. A seller with restricted scope only closes conversations they own or on lines they work.
Escopo
crm:write
Permissão
Editar no módulo
Tool do MCP
crm_conversations_closeNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.close".
Custo declarado: até 2 leituras e 1 escritas por chamada (contam na cota diária).
Parâmetros
conversation_idstringrotaobrigatório
The conversation: an id from crm.conversations.list.
Archives a conversation, or brings it back to the open inbox with unarchive: true. An archived conversation keeps its messages and returns to the inbox by itself when the contact writes again. Idempotent. Same scope rules as crm.conversations.close.
Escopo
crm:write
Permissão
Editar no módulo
Tool do MCP
crm_conversations_archiveNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.archive".
Custo declarado: até 2 leituras e 1 escritas por chamada (contam na cota diária).
Parâmetros
conversation_idstringrotaobrigatório
The conversation: an id from crm.conversations.list.
unarchivebooleancorpoopcional
true takes it out of the archive (it goes back to open).
Sets the inbox assignee (assignee_id, a member of the organization) of a conversation. This is not the responsible seller shown in the inbox, which follows the owner of the linked deal, prospect or person (change that owner instead). Idempotent. A seller with restricted scope only assigns conversations they own or on lines they work.
Escopo
crm:write
Permissão
Editar no módulo
Tool do MCP
crm_conversations_assignNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.assign".
Custo declarado: até 2 leituras e 1 escritas por chamada (contam na cota diária).
Parâmetros
conversation_idstringrotaobrigatório
The conversation: an id from crm.conversations.list.
assignee_idstringcorpoobrigatório
The member who takes the conversation: a user_id from crm.team.list.
Find and link the CRM person of a conversation by phone
crm.conversations.resolve_person
EscritaIdempotenteDesde 2026-11-01
Finds the CRM person whose phones include the given number (it also tries the Argentina 9 and Mexico 1 mobile variants, like the inbound webhook) and links them to the conversation if they were not linked yet. Returns person_id, or null when no person has that phone. Idempotent; it never creates persons (use crm.persons.create).
Escopo
crm:write
Permissão
Editar no módulo
Tool do MCP
crm_conversations_resolve_personNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.resolve_person".
Custo declarado: até 8 leituras e 1 escritas por chamada (contam na cota diária).
Parâmetros
conversation_idstringrotaobrigatório
The conversation: an id from crm.conversations.list.
phonestringcorpoobrigatório
The number to look the person up by, with its country code.
Start a WhatsApp conversation with a first text message
crm.conversations.start
EscritaDesde 2026-11-01
Starts a WhatsApp conversation with a phone number (E.164, with country code) by sending a first free-text message from a line (from_phone_number_id, default: the organization's first active WhatsApp line), optionally linked to a person (person_id) and a deal (deal_id). Both are checked before anything is sent: they must exist in this organization and be visible to the caller (deal_not_found or person_not_found, also for what a seller with restricted scope cannot see), a seller with restricted scope only links a deal they work (crm_action_denied with edit_deal for one they can only see), with both the person must be the deal's primary person or one of its persons (person_not_in_deal), a merged deal is deal_merged, and a merged person is replaced by the person they were merged into. If that number already has a conversation on that line it is reused and reopened (the links only go to a new conversation). Meta only delivers free text within 24 hours of the contact's last message: for a cold contact use crm.whatsapp.send_template instead. To a person marked «Do not contact» or unsubscribed it still goes out (free text only reaches a contact who wrote in the last 24 hours, so it is a reply), and the response carries do_not_contact. Requires send_whatsapp; a seller with restricted scope only starts from lines they work. From a line that belongs to another part of the product (not the CRM) it needs that part's edit permission and its write scope instead of the CRM's, and the conversation it opens or reuses belongs to that part. From such a line nothing of the CRM is linked: deal_id and person_id are refused (400 invalid_input) and the deals and persons of the CRM are not touched. With an API key marked as an AI agent's (an owner or admin sets it on the key; it is never chosen per call), the message is recorded as sent by AI, like the AI Setter's (crm.messages.list marks it as sent by AI, with the key's user as its AI agent), the AI badge in the inbox, and it counts as AI, not as a person, in reports and in caps (crm.messages.count with ai_agent_user_id). Its dry run checks the line, the recipient and the links without calling Meta, and warns when the 24-hour window of that number's conversation on that line is closed.
Pede confirmação: primeiro dry_run: true (prévia e confirm_token, válido por 10 minutos e por uma única execução), depois o mesmo corpo com confirm_token. Em algumas poucas, só com certos dados: a descrição diz quando. Por que e como: Prévia e confirmação.
Escopo
crm:write
Permissão
Editar no módulo
Tool do MCP
crm_conversations_startNa superfície completa; na compacta, mb_execute_operation com id: "crm.conversations.start".
Custo declarado: até 47 leituras e 8 escritas por chamada (contam na cota diária). Usa uma plataforma externa (whatsapp): conta na cota de operações externas.
Parâmetros
phonestringcorpoobrigatório
The contact's number with its country code (E.164, for example +5491155550000).
textstringcorpoobrigatório
The first message, as the contact will read it.
from_phone_number_idstringcorpoopcional
The WhatsApp line it goes out from: a phone_number_id from crm.lines.list. Default: the organization's first active WhatsApp line.
person_idstringcorpoopcional
The person the conversation is linked to (crm.persons.list).
deal_idstringcorpoopcional
The deal the conversation is linked to (crm.deals.list), with its person.
contact_namestringcorpoopcional
The contact's name the inbox shows until a person is linked.
Resposta
conversation_idstring
message_idstring
do_not_contactobject
Only when it went out to a person marked «Do not contact» or unsubscribed: who, why, and whether it answered what they wrote after being marked or a person of the team confirmed it.
Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.Na prática esta operação não é simulada (usa outra plataforma): responde 409 sandbox_external_unavailable.