Menú

Referencia de la API · Email Marketing

Flows

email_marketing · flows · 19 operaciones

GET/v1/email-marketing/flows

List email flows

email_marketing.flows.list

LecturaIdempotenteDesde 2026-11-01

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.

Valores: manual, audience_sync, event

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/email-marketing/flows" \
  -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/email-marketing/flows" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/email-marketing/flows/{flow_id}

Get one email flow with its steps

email_marketing.flows.get

LecturaIdempotenteDesde 2026-11-01

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).

created_bystring | null
created_atnumber | null
updated_atnumber | null

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/email-marketing/flows/{flow_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/email-marketing/flows/{flow_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/flows

Create an email flow

email_marketing.flows.create

EscrituraDesde 2026-11-01

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.

Respuesta

flow_idstring

Errores

Ejemplo

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

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" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME",
  "trigger": "manual"
}'
PATCH/v1/email-marketing/flows/{flow_id}

Update an email flow's settings

email_marketing.flows.update

EscrituraIdempotenteDesde 2026-11-01

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).

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

updatesobjectcuerporequerido

The fields to change.

Respuesta

flowobject

Errores

Ejemplo

curl -X PATCH "https://api.mb-suite.com/v1/email-marketing/flows/{flow_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/email-marketing/flows/{flow_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
POST/v1/email-marketing/flows/{flow_id}/duplicate

Duplicate an email flow

email_marketing.flows.duplicate

EscrituraDesde 2026-11-01

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).

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

Respuesta

flow_idstring

Errores

Ejemplo

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).

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

Respuesta

statusstring
changedboolean

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_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/email-marketing/flows/{flow_id}/activate" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'
POST/v1/email-marketing/flows/{flow_id}/pause

Pause an email flow

email_marketing.flows.pause

EscrituraIdempotenteDesde 2026-11-01

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).

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

Respuesta

statusstring
changedboolean

Errores

Ejemplo

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).

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

Respuesta

statusstring
changedboolean

Errores

Ejemplo

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:write y «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.

Errores

Ejemplo

curl -X DELETE "https://api.mb-suite.com/v1/email-marketing/flows/{flow_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/email-marketing/flows/{flow_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/flows/{flow_id}/steps

Add a step to an email flow

email_marketing.flows.steps.add

EscrituraDesde 2026-11-01

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.

Valores: email, delay, condition, label_action, notification

template_idstringcuerpoopcional

A template of email_marketing.templates.list (its id).

template_namestringcuerpoopcional

The template's name as shown (resolved from template_id when missing).

subjectstringcuerpoopcional

The email's subject (default: the template's).

delay_minutesnumbercuerpoopcional

How long to wait, in minutes (up to a year: 525600).

condition_configobjectcuerpoopcional

With type condition: what it checks.

label_action_configobjectcuerpoopcional

With type label_action: which label to add or remove.

notification_configobjectcuerpoopcional

With type notification: who gets the in-app notice and what it says.

branch_idstringcuerpoopcional

main (default) or a branch of a condition: cond_<step_id>_yes or cond_<step_id>_no (its yes_branch_id / no_branch_id).

insert_after_step_idstringcuerpoopcional

Insert after this step of the same branch (steps[].id); without it, at the end.

Respuesta

step_idstring

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/steps" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "type": "email"
}'

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}/steps" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "type": "email"
}'
PATCH/v1/email-marketing/flows/{flow_id}/steps/{step_id}

Update a step of an email flow

email_marketing.flows.steps.update

EscrituraIdempotenteDesde 2026-11-01

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).

Respuesta

stepobject

Errores

Ejemplo

curl -X PATCH "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/steps/{step_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/email-marketing/flows/{flow_id}/steps/{step_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
DELETE/v1/email-marketing/flows/{flow_id}/steps/{step_id}

Delete a step of an email flow

email_marketing.flows.steps.delete

IrreversibleDesde 2026-11-01

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:write y «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).

Respuesta

deletednumber

Errores

Ejemplo

curl -X DELETE "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/steps/{step_id}" \
  -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 DELETE "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/steps/{step_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'
POST/v1/email-marketing/flows/{flow_id}/steps/reorder

Reorder the steps of an email flow

email_marketing.flows.steps.reorder

EscrituraIdempotenteDesde 2026-11-01

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.

Respuesta

oktrue

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/steps/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/email-marketing/flows/{flow_id}/steps/reorder" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'
GET/v1/email-marketing/flows/{flow_id}/enrollments

List the enrollments of an email flow

email_marketing.flows.enrollments.list

LecturaIdempotenteDesde 2026-11-01

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.

Valores: active, completed, paused, cancelled, failed, exited

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/enrollments" \
  -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/email-marketing/flows/{flow_id}/enrollments" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/email-marketing/flows/{flow_id}/enrollments

Enroll one contact in an email flow

email_marketing.flows.enrollments.enroll

EscrituraDesde 2026-11-01

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".
Eventos que puede emitir
email_marketing.flow.enrolled

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

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

emailstringcuerporequerido

The contact's email.

namestringcuerpoopcional

The contact's name (for {{first_name}} and the like).

contact_idstringcuerpoopcional

The contact of Contacts, if there is one (contacts.contacts.list).

enrollment_sourceobjectcuerpoopcional

Where the enrollment comes from (default manual).

Respuesta

enrollment_idstring

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/enrollments" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "ana@example.com",
  "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/email-marketing/flows/{flow_id}/enrollments" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "ana@example.com",
  "dry_run": true
}'
POST/v1/email-marketing/flows/{flow_id}/enrollments/from-audience

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:write y «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".
Eventos que puede emitir
email_marketing.flow.enrolled

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

Parámetros

flow_idstringrutarequerido

The flow's id (from email_marketing.flows.list).

audience_idstringcuerporequerido

The audience's id (from email_marketing.audiences.list).

Respuesta

enrollednumber
skippednumber

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/email-marketing/flows/{flow_id}/enrollments/from-audience" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "audience_id": "AUDIENCE_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/email-marketing/flows/{flow_id}/enrollments/from-audience" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "audience_id": "AUDIENCE_ID",
  "dry_run": true
}'
POST/v1/email-marketing/flow-enrollments/{enrollment_id}/exit

Take a contact out of an email flow

email_marketing.flows.enrollments.exit

EscrituraIdempotenteDesde 2026-11-01

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".
Eventos que puede emitir
email_marketing.flow.exited

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

Parámetros

enrollment_idstringrutarequerido

The enrollment's id (from email_marketing.flows.enrollments.list).

Respuesta

changedboolean
statusstring

Errores

Ejemplo

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"