Menú

Referencia de la API · CRM

Secuencias

crm · sequences · 15 operaciones

POST/v1/crm/sequences/{sequence_id}/linked-lists

Link a dynamic list to a sequence

crm.sequences.linked_lists.add

EscrituraIdempotenteDesde 2026-11-01

Links a dynamic list to a sequence as an auto-enrollment source: while the sequence is active, within 15 minutes the engine enrolls every member of the list that is not in the sequence yet, and from then on, every 15 minutes, whoever newly matches it. Nobody is enrolled in this call itself. Since it leaves the sequence enrolling (and writing to) those persons, outside the app it needs a dry run and its confirm_token. Only dynamic lists can be linked; linking one that is already linked changes nothing. Requires manage_sequences on the sequence (a seller only on their own) and edit_list on the list.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_linked_lists_addEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.linked_lists.add".

Costo declarado: hasta 2 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence (crm.sequences.list).

list_idstringcuerporequerido

The dynamic list (crm.lists.list).

Respuesta

changedboolean

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/linked-lists" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "list_id": "LIST_ID",
  "dry_run": true
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/linked-lists" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "list_id": "LIST_ID",
  "dry_run": true
}'
POST/v1/crm/sequences/{sequence_id}/linked-lists/remove

Unlink a list from a sequence

crm.sequences.linked_lists.remove

EscrituraIdempotenteDesde 2026-11-01

Removes a list from a sequence's auto-enrollment sources; the persons already enrolled stay enrolled. Unlinking a list that is not linked changes nothing. Requires manage_sequences on the sequence (a seller only on their own).

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_linked_lists_removeEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.linked_lists.remove".

Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence (crm.sequences.list).

list_idstringcuerporequerido

The dynamic list (crm.lists.list).

Respuesta

changedboolean

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/linked-lists/remove" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "list_id": "LIST_ID"
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/linked-lists/remove" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "list_id": "LIST_ID"
}'
GET/v1/crm/sequences

List sequences

crm.sequences.list

LecturaIdempotenteDesde 2026-11-01

Lists the organization's sequences (automated outreach cadences of emails, WhatsApp messages, calls, tasks and CRM actions), most recently edited first, paginated by cursor (limit up to 200). Each item is a summary: name, state (live = active; paused = inactive with contacts already enrolled; draft = inactive and never used), mode (simple or advanced), how many steps, triggers and linked lists it has, open health issues, the schedule and sending rules ids, label ids, stats and its author (created_by_id and created_by_name). stats are the enrollment counters the engine keeps (total_enrolled, active_enrollments, completed, exited_early, ends_by_reason, last_activity_at); email results per recipient (opened, clicked, replied, bounced) come from crm.sequences.metrics.get, one sequence at a time. Steps are not included: use crm.sequences.get. With state, the page is filled reading on (up to 1,000 sequences per call; past that, a shorter page with has_more and next_cursor). Every CRM member sees every sequence (a seller edits only their own). Requires view access to the CRM.

Alcance
crm:read
Permiso
Ver el módulo
Tool del MCP
crm_sequences_listEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.list".

Costo declarado: hasta 1002 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

limitintegerqueryopcional

How many items this page brings at most (see the maximum and the default in the schema).

Por defecto: 50

cursorstringqueryopcional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

stateenumqueryopcional

Only the sequences in this state: live (active), paused (inactive with contacts already enrolled) or draft (inactive, never used). Applied to the page read.

Valores: live, paused, draft

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/crm/sequences" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/crm/sequences" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/crm/sequences/{sequence_id}

Get one sequence with its steps

crm.sequences.get

LecturaIdempotenteDesde 2026-11-01

Returns one sequence with everything that defines it: steps (id, type, order, is_active, timing, branch_id inside condition branches, and the fields of each type: email variants, WhatsApp line and template, task, action params, condition filter…), triggers (automatic start), entry filter, re-entry policy, exits (on_whatsapp_reply, on_deal_won, on_deal_lost, on_deal_archived; a missing key uses its default; the three deal exits only take out contacts who were already in the sequence when the deal was won, lost or archived), the exit_when rule, schedule and sending rules ids, sender, deal linking, linked lists, health issues (health.issues keyed by step and cause), stats (the enrollment counters; email results come from crm.sequences.metrics.get), state (live, paused or draft) and its author (created_by_id, created_by_name). The HTML body of each automatic email variant (variants[].content, with the signature: often several thousand characters each) comes only with include_content=true; without it each variant brings its subject and its plain-text body. Read it with include_content=true before crm.sequences.update: the steps array is replaced as a whole and each automatic email variant needs its content (a step sent back without it is refused, nothing is lost). Not found (sequence_not_found) if the id is not a sequence of this organization. Requires view access to the CRM.

Alcance
crm:read
Permiso
Ver el módulo
Tool del MCP
crm_sequences_getEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.get".

Costo declarado: hasta 1 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

include_contentbooleanqueryopcional

Also return the HTML body of each automatic email variant (steps[].variants[].content), which carries the signature and often weighs several thousand characters. Default false: each variant brings its subject and its plain-text body (content_plain_text). Read with true before changing steps with crm.sequences.update: it replaces the steps array and each variant needs its content.

Respuesta

idstring
namestring
is_activeboolean
stateenum

Valores: live, paused, draft

stepsarray<object>
descriptionstring | null
modeenum

Valores: simple, advanced

schedule_idstring | null

Its schedule (crm.sequences.schedules.list).

ruleset_idstring | null

Its sending rules (crm.sequences.rulesets.list).

sender_configobject

The sequence's sender; absent = the first verified SES sender of the organization's domain.

deal_linkingobject

auto_open links each enrollment to the person's most recent open deal (optionally of one pipeline); none, or absent, links none.

exitsobject

The exits switched on or off; a missing key uses its default.

exit_whenobject | null

The exit rule: a contact who matches it leaves (exit_rule).

triggersobject

Automatic start: any one of the rules enrolls the contact.

entry_filterobject
reentryobject

Automatic re-entry: once (the default), always or after_days.

linked_listsarray<object>

CRM lists that enroll their new members on their own.

healthobject

Open health warnings, keyed by <step id>__<cause>; who is affected, in crm.sequences.health.list.

enrollment_rulesarray<object>
folder_idstring | null
label_idsarray<string>
statsobject

Enrollment counters kept by the engine. Email results per recipient (opened, clicked, replied, bounced) come from crm.sequences.metrics.get.

ordernumber
created_by_idstring | null

The author: a seller can edit, activate and delete only their own sequences.

created_by_namestring | null

The author's name (null if no longer a member).

created_atnumber
updated_atnumber

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/crm/sequences/{sequence_id}/metrics

Count a sequence's enrollments by status and its email results

crm.sequences.metrics.get

LecturaIdempotenteDesde 2026-11-01

Counts the enrollments of a sequence by status (pending = waiting for the sequence to be activated, active, paused, waiting_task = waiting for a CRM task to be completed, completed, exited, failed) and returns its email report per recipient: how many recipients got at least one automatic email and how many of them opened, clicked, replied or bounced (Gmail does not report clicks or bounces, so those stay at zero when every email goes out through Gmail). Counts only: page through the contacts with crm.sequences.enrollments.list. Not found (sequence_not_found) if the id is not a sequence of this organization. Requires view access to the CRM.

Alcance
crm:read
Permiso
Ver el módulo
Tool del MCP
crm_sequences_metrics_getEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.metrics.get".

Costo declarado: hasta 13 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

Respuesta

sequence_idstring
enrollmentsobject
emailobject

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/metrics" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/metrics" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/sequences

Create a sequence (always inactive)

crm.sequences.create

EscrituraDesde 2026-11-01

Creates a sequence, always inactive: nothing is sent until crm.sequences.activate. Send a name and optionally a description, steps (the structure crm.sequences.get returns, up to 50; a condition step needs yes_branch_id cond_<id>_yes and no_branch_id cond_<id>_no, and branches nest at most 2 levels), mode (simple or advanced; absent = advanced), triggers, sender_config (an SES address verified for the organization's domain, or a seller's Gmail with their user_id), schedule_id and ruleset_id (without them it takes the organization's default schedule and sending rules, if any). New sequences link each enrolled person to their most recent open deal. The author is the caller: a seller can later edit, activate and delete only their own sequences. Optional dry run: with dry_run=true nothing is written; it runs the same checks as the creation (same errors) and its preview says what would be born: turned off, how many steps and triggers (counts sequences, steps, triggers), and the schedule and sending rules it takes (the ones sent, or the organization's defaults), with a warning when a schedule_id or ruleset_id sent does not exist. Running the creation needs no confirm_token. Errors: invalid_input (with the first validation message), sequence_sender_not_verified, sequence_sender_not_allowed (sending from another seller's Gmail needs a CRM admin), sequence_notify_recipient_invalid, sequence_remove_target_not_allowed, sequence_cycle (409: a trigger or step would make contacts loop between sequences; details.sequence_ids names the loop, with the new sequence as __new__), sequence_whatsapp_template_unsupported (an automatic WhatsApp step uses a template MB Suite cannot send yet, with an image, video or document in its header or variables in its header, per the synced copy of that line's templates; on update only new or changed steps are checked). Returns sequence_id. Requires manage_sequences (every member except viewers).

Alcance
crm:write
Permiso
Editar en el módulo · Acción del CRM: manage_sequences
Tool del MCP
crm_sequences_createEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.create".

Costo declarado: hasta 360 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

namestringcuerporequerido

The sequence's name, as the app lists it.

descriptionstringcuerpoopcional

A short internal description.

stepsarray<object>cuerpoopcional

The steps, in the structure crm.sequences.get returns (id, type, order, is_active, timing and the fields of each type), up to 50. A condition step needs yes_branch_id cond_<id>_yes and no_branch_id cond_<id>_no; branches nest at most 2 levels.

enrollment_rulesarray<object>cuerpoopcional

Legacy enrollment rules kept for older sequences; new ones use triggers.

schedule_idstring | ""cuerpoopcional

The sending schedule: an id from crm.sequences.schedules.list. Without it, the organization's default schedule.

ruleset_idstring | ""cuerpoopcional

The sending rules: an id from crm.sequences.rulesets.list. Without it, the organization's default sending rules.

sender_configobjectcuerpoopcional

Who the emails go out as: an SES address verified for the organization's domain (ses_direct), or a seller's Gmail (gmail, with their user_id from crm.email.senders.list).

modeenumcuerpoopcional

simple (one path: no conditions, branches, chaining or A/B tests) or advanced (the default). Going from simple to advanced is one-way.

Valores: simple, advanced

triggersobjectcuerpoopcional

Automatic start: up to 5 rules (person_created, added_to_list, label_added, deal_created, deal_stage_changed; any one is enough) and an optional start_delay.

Respuesta

sequence_idstring

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME"
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME"
}'
PATCH/v1/crm/sequences/{sequence_id}

Update a sequence

crm.sequences.update

EscrituraIdempotenteDesde 2026-11-01

Updates one or more parts of a sequence; send at least one key in updates. name, description, steps (replaces the whole array: read the sequence with crm.sequences.get with include_content true first, keep the ids of the steps that stay and send each automatic email variant with its content), schedule_id and ruleset_id (an empty string clears them), sender_config (null clears it), exits (only the keys sent change; on_deal_won, on_deal_lost and on_deal_archived only take out contacts who were already in the sequence when the deal changed, so the change that enrolls a contact, like the win that starts a welcome sequence, never takes them out: they don't need to be turned off for that), exit_when, triggers, entry_filter and reentry (null clears each one), mode (simple to advanced only: going back is sequence_mode_downgrade), deal_linking and folder_id. On an active sequence the change applies from the engine's next run, and saving the step that has an open health warning (or changing the sender, schedule or sending rules) resumes the contacts paused for a configuration problem there (all of them for a sequence-wide change): they get their pending step within minutes, and if the configuration is still broken they pause again; the audit entry of the save records how many and which steps. It does not activate, pause or enroll anyone. Optional dry run: with dry_run=true nothing is written, the same checks as the save run (same errors), and the preview says what the save does. When the change touches the exits (exits, exit_when, or steps that change the default of the WhatsApp-reply exit), it evaluates the contacts in progress (pending, active, paused or waiting for a task; the newest 500, and when cut evaluated is lower than in_progress and a warning says so: crm.sequences.exits.preview evaluates them all, page by page) the way the engine does, and its counts say newly_exiting (they leave because of this change; also split by reason: newly_exiting_exit_rule, newly_exiting_deal_won, newly_exiting_deal_lost, newly_exiting_deal_archived, newly_exiting_whatsapp_reply), would_exit (with the new exits), would_exit_now (with today's), no_longer_exiting, in_progress and evaluated, with the first 50 newly exiting as items (named only when you can see the person); the sending rules' own exits (link click, unresponsive) are not counted. Use it to refuse a rule that would take out too many (e.g. more than half of in_progress). When the save resumes contacts paused for a configuration problem, counts.resumed says how many and the text names the steps (the items are those steps when the exits do not change). A change that does neither gets the generic preview. Running the update needs no confirm_token. Errors: the ones of crm.sequences.create plus sequence_mode_downgrade and sequence_not_found. A seller edits only their own sequences (crm_action_denied manage_sequences). Requires full access to the CRM.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.update".

Costo declarado: hasta 2600 lecturas y 403 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

updatesobjectcuerporequerido

What changes: only the keys sent (at least one). steps replaces the whole array; null clears sender_config, exit_when, triggers, entry_filter and reentry; an empty string clears schedule_id and ruleset_id.

Respuesta

oktrue

Errores

Ejemplo

curl -X PATCH "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X PATCH "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
POST/v1/crm/sequences/{sequence_id}/activate

Activate a sequence (starts sending to real people)

crm.sequences.activate

EscrituraMasiva · hasta 1IdempotenteDesde 2026-11-01

Turns a sequence on, which starts sending to real people: the contacts waiting in it (pending: enrolled while it was inactive) start, the ones the engine paused because the sequence was off resume where they stopped, and from then on its triggers and linked lists enroll contacts on their own. The engine runs every 5 minutes and honors each step's wait, the schedule and the sending rules; emails and WhatsApp messages that go out cannot be recalled. Outside the app it always runs in two steps, like a bulk operation: call it with dry_run=true to get the preview (how many contacts start, whether the first step sends right away, triggers and linked lists) and a confirm_token (10 minutes), then call again with the same input and that confirm_token. Refused with sequence_steps_incomplete when a 'move deal stage' step lacks its pipeline or stage. Activating an active sequence changes nothing (it writes nothing and returns zeros). With an API key or a connected app, a sequence with more than 5000 waiting or paused enrollments is activated from the app (409 limit_reached, details.resource sequence_enrollments, already in the dry run). Returns activated_pending and resumed_off. A seller activates only their own sequences. Requires full access to the CRM.

Instrucciones para agentes

Run the dry run first and tell the person the sequence name and how many contacts start receiving messages; activate it only after they confirm.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_activateEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.activate".

Costo declarado: hasta 5060 lecturas y 5002 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

Respuesta

activated_pendingnumber
resumed_offnumber

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/activate" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/activate" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'
POST/v1/crm/sequences/{sequence_id}/pause

Pause a sequence

crm.sequences.pause

EscrituraIdempotenteDesde 2026-11-01

Pauses a sequence: no more steps are sent and its triggers and linked lists stop enrolling. Contacts in progress are not taken out: on its next run the engine pauses each one whose step is due (pause_reason sequence_off) and they resume where they stopped when the sequence is activated again (contacts paused by hand stay paused). To take someone out use crm.sequences.enrollments.exit. Pausing a paused (or never activated) sequence changes nothing: it writes nothing. A seller pauses only their own sequences. Requires full access to the CRM.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_pauseEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.pause".

Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

Respuesta

oktrue

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/pause" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/pause" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/sequences/{sequence_id}/duplicate

Duplicate a sequence

crm.sequences.duplicate

EscrituraDesde 2026-11-01

Copies a sequence into a new inactive one named '<name> (copia)' owned by the caller: new step ids (condition branches remapped), the same schedule, sending rules, sender, deal linking, mode, triggers, entry filter, re-entry, exit rule and exits, and empty stats. Contacts are not copied. A 'remove from sequence' step that pointed to the original points to the copy itself. Errors: sequence_remove_target_not_allowed, sequence_cycle. Returns the new sequence_id. A seller duplicates only their own sequences. Requires full access to the CRM.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_duplicateEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.duplicate".

Costo declarado: hasta 252 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

Respuesta

sequence_idstring

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/duplicate" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/duplicate" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/sequences/reorder

Set the display order of the sequences

crm.sequences.reorder

EscrituraIdempotenteDesde 2026-11-01

Sets the display order of the sequences: each id in ordered_ids (up to 500) gets its position as order. Every id must be a sequence of this organization (sequence_not_found otherwise, and nothing is reordered); a seller can only reorder when every sequence in the list is theirs. It changes nothing else and leaves no audit entry. Requires full access to the CRM.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_reorderEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.reorder".

Costo declarado: hasta 500 lecturas y 500 escrituras por llamada (cuentan en el cupo diario).

Parámetros

ordered_idsarray<string>cuerporequerido

Sequence ids from crm.sequences.list in the order they should be shown (each gets its position).

Respuesta

oktrue

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/reorder" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/reorder" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'
POST/v1/crm/sequences/bulk/labels

Add or remove labels on sequences

crm.sequences.bulk.update_labels

EscrituraMasiva · hasta 500IdempotenteDesde 2026-11-01

Adds and/or removes labels (ids from crm.labels.list with entity sequence) on up to 500 sequences at once; each sequence keeps its other labels. Every id must be a sequence of this organization (sequence_not_found, nothing changes), and a seller can only label their own sequences. Sending neither add_label_ids nor remove_label_ids changes nothing. A label to add that is not one of the organization's sequence labels is label_not_found (404, details.label_ids), also in the dry run, and nothing changes; removing an id that is no longer a label is allowed (it cleans it up). The labels themselves are created, renamed and deleted with crm.labels.* and entity sequence. Bulk: outside the screen it requires a dry run and a confirm_token. Returns count. Requires full access to the CRM.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
crm:write
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_bulk_update_labelsEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.bulk.update_labels".

Costo declarado: hasta 500 lecturas y 1000 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idsarray<string>cuerporequerido

The sequences to label: ids from crm.sequences.list.

add_label_idsarray<string>cuerpoopcional

Labels to add: ids from crm.labels.list with entity sequence.

remove_label_idsarray<string>cuerpoopcional

Labels to remove: ids from crm.labels.list with entity sequence.

Respuesta

countnumber

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/bulk/labels" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "sequence_ids": [
    "SEQUENCE_ID"
  ],
  "dry_run": true
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/bulk/labels" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "sequence_ids": [
    "SEQUENCE_ID"
  ],
  "dry_run": true
}'
DELETE/v1/crm/sequences/{sequence_id}

Delete a sequence

crm.sequences.delete

IrreversibleDesde 2026-11-01

Deletes a sequence: every contact in progress in it (pending, active, paused or waiting for a task) exits and gets no more steps, and its triggers and linked lists stop. The sequence goes to the 30-day trash; restoring it brings it back paused and without those contacts (their enrollments stay exited, with their history). A seller deletes only their own sequences. Outside the screen it requires a dry run (which says how many contacts exit) and a confirm_token, or a REST DELETE. With an API key or a connected app, a sequence with more than 5000 contacts in progress is deleted from the app (409 limit_reached, details.resource sequence_enrollments, already in the dry run). Requires full access to the CRM.

Con una API key, este DELETE se ejecuta directo: el registro queda 30 días en la papelera y la respuesta trae su trash_item_id. Con un token OAuth, y por el MCP, pide dry_run → confirm_token.

Alcance
crm:write y «Permitir eliminar» (crm:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.delete".

Costo declarado: hasta 5010 lecturas y 5002 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

Respuesta

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errores

Ejemplo

curl -X DELETE "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X DELETE "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/sequences/{sequence_id}/exits/preview

Preview who leaves a sequence by its exits, page by page

crm.sequences.exits.preview

LecturaIdempotenteDesde 2026-11-01

Evaluates the exits of a sequence over its contacts in progress (pending, active, paused or waiting for a task) the way the engine does on its next run, page by page, and writes nothing: with today's exits, or with a change you are about to make (exits, exit_when, steps: the same fields and rules as crm.sequences.update; steps only matter for the default of the WhatsApp-reply exit). Each page evaluates up to limit enrollments (1 to 500, default 500), newest first, and returns in data the ones only asks for: would_exit (default: they leave with the evaluated exits), newly_exiting (they leave only because of the change) or all. Each row has enrollment_id, person_id, name (null when the person no longer exists), status, enrolled_at, reason (with the evaluated exits: email_replied, whatsapp_replied, bounced, unsubscribed, deal_won, deal_lost, deal_archived or exit_rule; null = they stay), reason_now (with today's exits), exit_rule_matches and exit_rule_matches_now (the exit_when rule alone) and out_of_author_scope (the engine pauses that contact without evaluating the rule). For a seller with restricted scope, a contact they cannot see is left out of data and of every count but evaluated. counts are of the page (evaluated, would_exit, would_exit_now, newly_exiting, no_longer_exiting, out_of_author_scope and newly_exiting by reason); in_progress is the exact number of contacts in progress at each call; changed says whether the change moves the effective exits (false: today's exits were evaluated). Follow next_cursor while has_more and add up the counts to evaluate them all (e.g. to refuse a rule that takes out more than half). The sending rules' own exits (link click, unresponsive) are not evaluated. The dry run of crm.sequences.update evaluates only the first 500. Not found (sequence_not_found) if the sequence does not exist. Allowed to the sequence's author, Managers and admins (crm_action_denied manage_sequences otherwise). Requires full access to the CRM.

Alcance
crm:read
Permiso
Editar en el módulo
Tool del MCP
crm_sequences_exits_previewEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.exits.preview".

Costo declarado: hasta 2015 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

sequence_idstringrutarequerido

The sequence: an id from crm.sequences.list.

exitsobjectcuerpoopcional

The exits you are about to change, as in crm.sequences.update (only the keys sent change): on_whatsapp_reply, on_deal_won, on_deal_lost, on_deal_archived.

exit_whenobject | nullcuerpoopcional

The exit rule you are about to set, as in crm.sequences.update (all_of and any_of rules over the contact; null removes it).

stepsarray<object>cuerpoopcional

The steps you are about to save, as you would send them to crm.sequences.update. Of the steps only a condition that asks whether the contact replied matters here (it turns off the default of the WhatsApp-reply exit); they are not validated, nothing is saved.

limitintegercuerpoopcional

How many enrollments in progress this page evaluates (at most 500).

Por defecto: 500

cursorstringcuerpoopcional

The next_cursor of the previous page, exactly as it came; without it, the newest enrollments first.

onlyenumcuerpoopcional

Which rows data brings: would_exit (they leave with the evaluated exits), newly_exiting (they leave only because of the change) or all (every evaluated enrollment).

Valores: would_exit, newly_exiting, all · Por defecto: "would_exit"

Respuesta

dataarray<object>
countsobject
in_progressnumber
changedboolean
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/exits/preview" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/sequences/{sequence_id}/exits/preview" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/crm/sequences/health

List the health of the sequences: warnings, paused contacts and what to do

crm.sequences.health.list

LecturaIdempotenteDesde 2026-11-01

Returns, in one call, the health of the organization's sequences (most recently edited first, paginated by cursor, limit up to 200; or only sequence_id): what the app marks as needing attention. For each sequence: issues (the visible health warnings the engine opened: cause —an engine code such as whatsapp_no_line, whatsapp_line_blocked, gmail_connection_lost, sender_not_verified, task_owner_missing, stage_not_in_pipeline, author_out_of_scope, ruleset_missing, schedule_missing, or whatsapp_<Meta error code> with meta_error_code—, kind, step_id and step as the editor names it: number inside its branch and the owning conditions, since, affected_count, alerted_at, sticky); paused (total, config_error —paused by a configuration problem, what 'Resume N paused' resumes—, sequence_off —stopped because the sequence was paused, activating it resumes them—, and by_cause grouped by reason, cause and step, largest first; complete is false when this call's read limit of 2000 paused enrollments cut the breakdown, the three totals are exact anyway); actions, what the app offers: resume_paused (crm.sequences.enrollments.resume_paused, only on an active sequence: otherwise available false and blocked_by sequence_inactive), fix_step (fix the step and save it with crm.sequences.update; on an active sequence that resumes the contacts paused at that step), fix_settings (choose another ruleset_id or schedule_id), activate (crm.sequences.activate, on a paused sequence with contacts it stopped) and reconnect_mailbox (operation null: the mailbox owner reconnects it in Integrations; see crm.email.senders.list for each mailbox's state); needs_attention, and the sequence's own sender. only_with_problems=true keeps only the ones that need attention (filtered on the page read: a page can bring fewer items than limit while has_more is true). Counts only: no contact names. Read only. Not found (sequence_not_found) for a sequence_id that is not a sequence of this organization. Requires view access to the CRM.

Alcance
crm:read
Permiso
Ver el módulo
Tool del MCP
crm_sequences_health_listEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.sequences.health.list".

Costo declarado: hasta 2810 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

limitintegerqueryopcional

How many items this page brings at most (see the maximum and the default in the schema).

Por defecto: 50

cursorstringqueryopcional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

sequence_idstringqueryopcional

Only this sequence. The sequence: an id from crm.sequences.list.

only_with_problemsbooleanqueryopcional

Only the sequences that need attention: an open health warning or contacts paused for a configuration problem.

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/crm/sequences/health" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/crm/sequences/health" \
  -H "Authorization: Bearer $MB_TEST_KEY"