Lists the organization's email flows (automated sequences of emails, delays, conditions, label actions and internal notifications), most recently updated first, paginated by cursor. Filter by status (draft, active, paused, archived) or trigger (manual, audience_sync, event). Filters apply to the page read, so a page can bring fewer than limit while has_more is true: follow next_cursor until has_more is false. Steps are not included: use email_marketing.flows.get. Requires view access to Email Marketing.
Alcance
email_marketing:read
Permiso
Ver el módulo
Tool del MCP
email_marketing_flows_listEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.list".
Costo declarado: hasta 202 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.
statusenumqueryopcional
Only flows in this status: draft, active, paused or archived.
Valores: draft, active, paused, archived
triggerenumqueryopcional
Only flows with this trigger: manual, audience_sync or event.
Returns a flow (trigger, status, re-entry policy, send window, exit conditions, linked audiences, step and enrollment counters) with all its steps in reading order, as the canvas shows them: the main branch by order and, right after each condition step, its yes branch and then its no branch (each by order, nested). Condition steps branch into cond_<stepId>_yes / cond_<stepId>_no (their yes_branch_id and no_branch_id; each step says its branch_id). Use it before editing steps or enrolling contacts. Not found (email_flow_not_found) if the id is not a flow of this organization. Requires view access to Email Marketing.
Alcance
email_marketing:read
Permiso
Ver el módulo
Tool del MCP
email_marketing_flows_getEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.get".
Costo declarado: hasta 201 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
Respuesta
idstring
namestring
triggerstring
statusstring
stepsarray<object>
descriptionstring | null
trigger_event_namestring | null
trigger_configobject | null
steps_countnumber | null
enrollment_countnumber | null
reentry_policystring | null
cooldown_daysnumber | null
send_window_startnumber | null
send_window_endnumber | null
send_timezonestring | null
exit_conditionsarray<object> | null
linked_audiencesarray<object> | null
The audiences whose new members enter the flow (audience_sync).
Creates a flow in draft with a name and a trigger: manual (contacts are enrolled by hand or by API), audience_sync (members of linked audiences are enrolled automatically) or event (contact_added or contact_labeled; trigger_event_name is required). Optionally seeds email and delay steps in order: an email step can name its template by template_id or by template_name (matched case-insensitively against the organization's templates, like the screen's flow templates). Nothing is sent: activate it later with email_marketing.flows.activate. Returns flow_id. Errors: trigger_event_required, email_template_not_found. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_createEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.create".
Costo declarado: hasta 1051 lecturas y 51 escrituras por llamada (cuentan en el cupo diario).
Parámetros
namestringcuerporequerido
The flow's name.
triggerenumcuerporequerido
manual (contacts are enrolled by hand or by API), audience_sync (the members of linked audiences) or event (trigger_event_name).
Valores: manual, audience_sync, event
descriptionstringcuerpoopcional
Internal description.
trigger_configobjectcuerpoopcional
Extra settings of the trigger (small map; the app writes it).
trigger_event_nameenumcuerpoopcional
With trigger event: contact_added or contact_labeled.
Valores: contact_added, contact_labeled
reentry_policyenumcuerpoopcional
once (default), multiple or cooldown (again after cooldown_days).
Valores: once, multiple, cooldown
cooldown_daysintegercuerpoopcional
With reentry_policy cooldown: days before the same contact can enter again.
send_window_startintegercuerpoopcional
Emails go out only from this hour (0 to 24, in send_timezone).
send_window_endintegercuerpoopcional
…and until this hour (0 to 24, in send_timezone).
send_timezonestringcuerpoopcional
IANA time zone of the send window, e.g. America/Argentina/Buenos_Aires.
stepsarray<object>cuerpoopcional
The first steps (email and delay, up to 50), in order.
Updates one or more settings of a flow: name, description, trigger, trigger_config (for contact_labeled: { label_id, label_name }), trigger_event_name, send window (send_window_start/sendWindowEnd hours 0-24 and send_timezone), re-entry policy (once, multiple, cooldown with cooldown_days) and exit conditions (label_added with a contact label, or max_days). null clears a nullable field. Steps are edited with the email_marketing.flows.steps operations and the status with activate/pause/archive. Returns the updated flow. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.update".
Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).
Copies a flow's settings and all its steps into a new draft flow named '<name> (copia)', without enrollments or linked audiences. The copy works like the original: the steps of each condition branch hang from the copied condition, and an 'opened the previous email' condition points to the copied email step. Returns the new flow_id. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_duplicateEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.duplicate".
Costo declarado: hasta 201 lecturas y 201 escrituras por llamada (cuentan en el cupo diario).
curl-X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_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/email-marketing/flows/{flow_id}/duplicate" \
-H"Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/flows/{flow_id}/activate
Activate an email flow
email_marketing.flows.activate
EscrituraIdempotenteDesde 2026-11-01
Turns a flow on: from then on its enrolled contacts receive its emails (the flow cron sends within minutes, inside the send window). Checks first that the organization has a verified sending domain and a mailing address (CAN-SPAM), that the flow has at least one email step and that every email step has a template, condition, label and notification steps are configured; «opened the previous email» conditions are pointed to the closest prior email of their branch. Idempotent: an active flow stays as is (changed false). Outside the app it always runs in two steps, because from then on it sends real emails: dry_run=true runs the same checks and says how many enrollments in progress start receiving, how people enter from then on (its trigger and linked audiences) and what is left of the monthly plan, with a confirm_token (10 minutes); then call it again with the confirm_token. Errors: email_domain_not_verified, email_footer_address_missing, email_sending_paused (MB Suite paused the account's email sending, details.kind bounce_rate or manual: while paused no flow sends and none can be activated), flow_without_email_step, flow_step_without_template, flow_steps_invalid (details.problems). Requires full access to Email Marketing.
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
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_activateEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.activate".
Costo declarado: hasta 202 lecturas y 201 escrituras por llamada (cuentan en el cupo diario).
Pauses an active flow: nothing is sent while it is paused and its enrollments wait where they are (they resume when the flow is activated again). Pausing an archived flow brings it back paused, without sending. Idempotent: a paused flow stays as is, and a draft (never active) stays a draft (changed false, status draft). Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_pauseEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.pause".
Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).
curl-X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_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/email-marketing/flows/{flow_id}/pause" \
-H"Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/flows/{flow_id}/archive
Archive an email flow
email_marketing.flows.archive
EscrituraIdempotenteDesde 2026-11-01
Archives a flow: it stops sending, it drops its linked audiences (no more automatic enrollment) and it no longer accepts enrollments; it keeps its steps and history. Activate it again to bring it back (audiences must be linked again). Idempotent. Use email_marketing.flows.delete to remove it. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_archiveEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.archive".
Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).
curl-X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/archive" \
-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/email-marketing/flows/{flow_id}/archive" \
-H"Authorization: Bearer $MB_TEST_KEY"
DELETE/v1/email-marketing/flows/{flow_id}
Delete an email flow
email_marketing.flows.delete
IrreversibleDesde 2026-11-01
Deletes a flow and all its enrollments (contacts in the middle of it stop receiving emails). The flow goes to the 30-day trash with its steps: restoring it brings it back paused if it was active, without its enrollments. Owners and admins only. Outside the screen it requires a dry run (which counts the enrollments) and a confirm_token, or a REST DELETE.
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
email_marketing:writey «Permitir eliminar» (email_marketing:delete en OAuth)
Permiso
Editar en el módulo · Solo owner, admin
Tool del MCP
email_marketing_flows_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.delete".
Costo declarado: hasta 5002 lecturas y 5001 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
Respuesta
oktrue
enrollments_deletednumber
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.
Adds a step to a flow: email (template_id of an organization template, optional subject), delay (delay_minutes), condition (condition_config: has_label with label_id, in_audience with audience_id, or opened_previous; it creates two branches, cond_<step_id>_yes and cond_<step_id>_no, where later steps go with branch_id), label_action (add or remove a contact label) or notification (an internal email to a member: recipient_user_id must be a member of this account, otherwise it is skipped). Appended at the end of its branch (default main) or right after insert_after_step_id. A flow holds up to 200 steps. Returns step_id. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_steps_addEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.steps.add".
Costo declarado: hasta 203 lecturas y 202 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
typeenumcuerporequerido
email, delay, condition (splits into a yes and a no branch), label_action or notification.
Updates a step's template, subject, delay, condition, label action or notification (the fields of its type). It does not change the step type or its place: delete and add it again, or use email_marketing.flows.steps.reorder. Returns the updated step. Not found (email_flow_step_not_found) if the step is not in that flow. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_steps_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.steps.update".
Costo declarado: hasta 3 lecturas y 2 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
step_idstringrutarequerido
The step's id (from email_marketing.flows.get, steps[].id).
updatesobjectcuerporequerido
The fields to change (only the ones of the step's type).
Deletes a step and renumbers its branch; deleting a condition also deletes every step of its two branches (and of the branches of a condition nested inside them). Enrollments sitting on a deleted step continue from the next one. Steps are not kept in the trash: add the step again if it was a mistake. Outside the screen it requires a dry run (it names the step and counts the branch steps that go with it) and a confirm_token. Returns deleted (the steps removed). Requires full access to Email Marketing.
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
email_marketing:writey «Permitir eliminar» (email_marketing:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_steps_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.steps.delete".
Costo declarado: hasta 202 lecturas y 202 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
step_idstringrutarequerido
The step's id (from email_marketing.flows.get, steps[].id).
Sets the order of a branch's steps: ordered_ids lists them in the new order (order 0, 1, 2…). Every id must be a step of the flow; steps not listed keep their order. Idempotent. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_steps_reorderEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.steps.reorder".
Costo declarado: hasta 201 lecturas y 201 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
ordered_idsarray<string>cuerporequerido
The step ids of one branch (steps[].id), in their new order.
Lists the contacts enrolled in a flow, newest first, paginated by cursor: email, name, status (active, paused, completed, cancelled, failed, exited), current step, next send time, how they entered (enrollment_source) and why they left (exit_reason, cancel_reason). Filter by status; the filter applies to the page read, so follow next_cursor until has_more is false. Requires view access to Email Marketing.
Alcance
email_marketing:read
Permiso
Ver el módulo
Tool del MCP
email_marketing_flows_enrollments_listEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.enrollments.list".
Costo declarado: hasta 203 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
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.
statusenumqueryopcional
Only enrollments in this status: active, completed, paused, cancelled, failed or exited.
Enrolls one email address (optionally with name and the contact_id of Contacts) in a flow: it starts at the first step of the main branch and, if the flow is active, its first email goes out within minutes (inside the send window) — unless MB Suite paused the account's email sending: then it waits until sending is resumed (the dry run says so). To enroll many, use email_marketing.flows.enrollments.enroll_audience. Outside the app it always runs in two steps, because in an active flow it starts real emails: dry_run=true runs the same checks (same errors) and says whether the flow is active (emails start within minutes) or the enrollment waits until it is activated, with a confirm_token (10 minutes); then call it again with the confirm_token. Errors: email_invalid, email_flow_archived, email_suppressed (unsubscribed, bounced or complained), already_enrolled (an active enrollment in this flow). Returns enrollment_id. Requires full access to Email Marketing.
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
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_enrollments_enrollEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.enrollments.enroll".
Enroll an audience's current members in an email flow
email_marketing.flows.enrollments.enroll_audience
IrreversibleDesde 2026-11-01
Enrolls once every current member of an audience (a snapshot: people who join the audience later are not enrolled; for that, link it with email_marketing.flows.audiences.link). Skips invalid and repeated addresses, people already active in the flow and the suppression list. If the flow is active they start receiving its emails within minutes, counting against the email plan, and a sent email cannot be recalled; while MB Suite has the account's email sending paused they wait instead (the dry run says so). Irreversible: outside the app it always runs in two steps — dry_run=true returns the preview (how many enter, how many are left out and why, what is left of the monthly plan, the first recipients) and a confirm_token (10 minutes), then call it again with the same input and the confirm_token; the credential must allow irreversible operations (403 delete_not_allowed otherwise). Not idempotent: running it again enrolls those whose previous enrollment already ended. Returns enrolled and skipped. Errors: email_audience_not_found, email_flow_archived, audience_empty. Requires full access to Email Marketing.
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
email_marketing:writey «Permitir eliminar» (email_marketing:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_enrollments_enroll_audienceEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.enrollments.enroll_audience".
Stops an active or paused enrollment: the contact receives nothing else from that flow (status cancelled, reason manual). Idempotent: an enrollment that already ended stays as is (changed false). It does not unsubscribe the address from other flows or campaigns: for that add it with email_marketing.suppressions.add. Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_enrollments_exitEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.enrollments.exit".
curl-X POST "https://api.mb-suite.com/v1/email-marketing/flow-enrollments/{enrollment_id}/exit" \
-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/email-marketing/flow-enrollments/{enrollment_id}/exit" \
-H"Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/flows/{flow_id}/audiences
Link an audience to an email flow
email_marketing.flows.audiences.link
IrreversibleDesde 2026-11-01
Links an audience to a flow (meant for the audience_sync trigger): its current members are enrolled now and, while the flow is active, people who join the audience later are enrolled automatically about every 15 minutes (each address once per flow). Skips invalid, repeated and suppressed addresses and people already active. If the flow is active the emails start within minutes and a sent email cannot be recalled; while MB Suite has the account's email sending paused nobody is enrolled automatically and the enrolled wait (the dry run says so). Irreversible: outside the app it always runs in two steps — dry_run=true returns the preview (how many enter now, how many are left out and why, what is left of the monthly plan) and a confirm_token (10 minutes), then call it again with the same input and the confirm_token; the credential must allow irreversible operations (403 delete_not_allowed otherwise). Returns enrolled and skipped. Errors: email_audience_not_found, email_flow_archived, audience_already_linked. Requires full access to Email Marketing.
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
email_marketing:writey «Permitir eliminar» (email_marketing:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_audiences_linkEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.audiences.link".
Stops enrolling an audience's new members in a flow. Contacts already enrolled stay in the flow (take them out one by one with email_marketing.flows.enrollments.exit). Idempotent (changed false if it was not linked). Requires full access to Email Marketing.
Alcance
email_marketing:write
Permiso
Editar en el módulo
Tool del MCP
email_marketing_flows_audiences_unlinkEn la superficie completa; en la compacta, mb_execute_operation con id: "email_marketing.flows.audiences.unlink".
Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).
Parámetros
flow_idstringrutarequerido
The flow's id (from email_marketing.flows.list).
audience_idstringrutarequerido
The audience's id (from email_marketing.audiences.list).