> ## Documentation Index
> Fetch the complete documentation index at: https://docs.salesfinity.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Sequencer Tools

> MCP tools for the Salesfinity Sequencer: cadences, steps, templates, enrollments, tasks, suppression and rules of engagement.

These tools run the [Salesfinity Sequencer](/sequencer/overview) from an AI assistant. They are grouped
the same way as the Sequencer operations in the [API reference](/api-reference/introduction), and each
tool calls the operation linked under its name, so that page is the full contract for responses and
errors.

* **Writes name who is acting.** An API key identifies a team, not a person, and the Sequencer
  records who did what, so writes take a `user_id` that must be an active team member. `get_team`
  lists them.
* **Some writes reach people.** Enabling a sequence with an email step lets it send, and completing
  a `manual_email` task sends that email. There is deliberately no bulk complete.
* **Preview before you enrol.** `preview_sequencer_enrolment` shows who would be added and who
  would be refused, and changes nothing.
* **Rate limits are handled for you.** When the team is over its
  [rate limit](/api-reference/introduction#rate-limits), the MCP server waits out a `Retry-After` of
  up to 30 seconds and sends the request once more. A longer wait comes back to the assistant as an
  error that says when to retry. `POST`s carry an `Idempotency-Key`, so a retried write never acts
  twice.
* **Not the CRM sequences tools.** `get_sequences` and `get_sequence_by_id` list sequence names
  seen on call logs from an external CRM. See [CRM Sequences](/mcp/tools#crm-sequences).

## Sequences

### list\_sequencer\_sequences

List Sequencer cadences for the team, with filters and pagination.

Calls [`GET /v2/sequencer/sequences`](/api-reference/endpoint/list-sequencer-sequences).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `enabled` | string | No | Only sequences that are on, or only those that are off. One of `true`, `false` |
| `sequence_type` | string | No | `interval` steps fire a delay after the previous one; `date` steps fire on a fixed date. |
| `tag` | string | No | Only sequences carrying this tag. |
| `owner` | string | No | Only sequences authored by this team member |
| `search` | string | No | Case-insensitive match on the name |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Max 100 |

***

### create\_sequencer\_sequence

Create a Sequencer cadence. It starts disabled and has no steps; add steps, then enable it.

Calls [`POST /v2/sequencer/sequences`](/api-reference/endpoint/create-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | Yes | Name for the copy. Defaults to the original with a suffix. |
| `description` | string | No | Description of the sequence |
| `tags` | string\[] | No | Tags for organizing and filtering sequences |
| `sequence_type` | string | No | `interval` steps fire a delay after the previous one; `date` steps fire on a fixed date. |

***

### get\_sequencer\_sequence

Get one Sequencer cadence with its counters.

Calls [`GET /v2/sequencer/sequences/{id}`](/api-reference/endpoint/get-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | Sequence id |

***

### update\_sequencer\_sequence

Change a cadence's settings. Structure lives on the steps, not here. Requires the author or a team admin.

Calls [`PATCH /v2/sequencer/sequences/{id}`](/api-reference/endpoint/update-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | No | Name for the copy. Defaults to the original with a suffix. |
| `description` | string | No | Description of the sequence |
| `tags` | string\[] | No | Tags for organizing and filtering sequences |
| `sequence_type` | string | No | `interval` steps fire a delay after the previous one; `date` steps fire on a fixed date. |
| `policy` | string,null | No | Rules-of-engagement policy id. null detaches and falls back to the team default |
| `throttle_max_adds_per_day` | number | No | Cap on new enrollments per owner per day |
| `throttle_capacity` | number | No | Cap on live enrollments per owner |
| `throttle_paused` | boolean | No | Refuse new enrollments without disabling the cadence |
| `transactional` | boolean | No | DANGEROUS: bypasses the suppression list at enrolment. Only for mail the recipient asked for |
| `track_opens` | boolean | No | Track email opens |
| `track_links` | boolean | No | Track link clicks |
| `primary_reply_action` | string | No | What happens to an enrollment when the prospect replies. One of `finish`, `continue`, `pause` |
| `primary_reply_pause_duration` | number | No | Pause length in days, when the reply action is pause |
| `schedule` | object | No | Sending window. Fields: `timezone_source` (one of `prospect`, `account`); `timezone` (string: IANA timezone, used when the prospect has none); `days_of_week` (number\[]: 0 is Sunday. Defaults to Monday-Friday); `start_hour` (number); `end_hour` (number) |
| `email_account_ids` | number\[] | No | Numeric mailbox ids to send from. Omit to use the team pool |

***

### delete\_sequencer\_sequence

Permanently delete a cadence. Refused while any enrollment is still live - disable it and finish the remaining enrollments first.

Calls [`DELETE /v2/sequencer/sequences/{id}`](/api-reference/endpoint/delete-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### add\_contacts\_to\_sequencer\_sequence

Add up to 500 contacts to a cadence. IMPORTANT: a success response does not mean everyone went in - always read the `skipped` array, which lists everyone refused and why.

Calls [`POST /v2/sequencer/sequences/{id}/contacts`](/api-reference/endpoint/add-contacts-to-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | Sequence id |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `owner_id` | string | No | Who owns the enrollments and gets the tasks. Defaults to user\_id |
| `prospects` | object\[] | Yes | Each needs contact, email or linkedin\_username |

***

### get\_sequencer\_sequence\_analytics

Enrollment counts by state plus engagement counters for one cadence.

Calls [`GET /v2/sequencer/sequences/{id}/analytics`](/api-reference/endpoint/get-sequencer-sequence-analytics).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character sequence id. |

***

### list\_sequencer\_engagement\_people

The people behind one analytics tile - who opened, who replied, who bounced.

Calls [`GET /v2/sequencer/sequences/{id}/analytics/people`](/api-reference/endpoint/list-sequencer-engagement-people).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | Sequence id |
| `metric` | string | Yes | Which tile to list the people behind. One of `delivered`, `opened`, `clicked`, `replied`, `bounced`, `opted_out`, `failed`, `scheduled`, `contacted` |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### list\_sequencer\_enrolment\_attempts

Who was NOT added to a cadence, and why. The first place to look when a batch added fewer people than expected.

Calls [`GET /v2/sequencer/sequences/{id}/enrollment-attempts`](/api-reference/endpoint/list-sequencer-enrollment-attempts).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | Sequence id |
| `reason` | string | No | `policy` is a rules-of-engagement refusal and `suppressed` an opt-out or bounce; those two are decisions about the person rather than facts about the batch. |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### enable\_sequencer\_sequence

Turn a cadence on. Refused if it has an email step and the team has no mailbox able to send.

Calls [`POST /v2/sequencer/sequences/{id}/enable`](/api-reference/endpoint/enable-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### disable\_sequencer\_sequence

Turn a cadence off. Pauses every live enrollment; enabling again picks them back up.

Calls [`POST /v2/sequencer/sequences/{id}/disable`](/api-reference/endpoint/disable-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### duplicate\_sequencer\_sequence

Copy a cadence and its steps. The copy starts disabled and carries no enrollments.

Calls [`POST /v2/sequencer/sequences/{id}/duplicate`](/api-reference/endpoint/duplicate-sequencer-sequence).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | No | Name for the copy. Defaults to the original with a suffix |

***

## Steps

### list\_sequencer\_steps

List the steps of a cadence, in order.

Calls [`GET /v2/sequencer/sequences/{sequence_id}/steps`](/api-reference/endpoint/list-sequencer-steps).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence_id` | string | Yes | 24-character sequence id. |

***

### create\_sequencer\_step

Append a step to a cadence. auto\_email sends itself; call/task/manual\_email create a task for the owning rep.

Calls [`POST /v2/sequencer/sequences/{sequence_id}/steps`](/api-reference/endpoint/create-sequencer-step).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence_id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `step_type` | string | Yes | `auto_email` sends itself; the other three create a task for the owning rep. One of `auto_email`, `manual_email`, `call`, `task` |
| `interval_seconds` | number | No | Delay from the previous step, or from enrolment for the first |
| `display_name` | string | No | Display name for the step |
| `task_note` | string | No | Shown to the rep on the resulting task. |
| `templates` | object\[] | No | Email steps only. Several templates are picked between by weight. Fields: `template` (string); `weight` (number) |

***

### reorder\_sequencer\_steps

Renumber a cadence. Send EVERY step id in the order you want. Refused with 409 while any enrollment is live - renumbering would desync the step each prospect sits on.

Calls [`PUT /v2/sequencer/sequences/{sequence_id}/steps/reorder`](/api-reference/endpoint/reorder-sequencer-steps).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence_id` | string | Yes | 24-character sequence id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `step_ids` | string\[] | Yes | Every step id, in the order you want them |

***

### get\_sequencer\_step

One step of a cadence, with its delay, type and templates.

Calls [`GET /v2/sequencer/sequences/{sequence_id}/steps/{step_id}`](/api-reference/endpoint/get-sequencer-step).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence_id` | string | Yes | 24-character sequence id. |
| `step_id` | string | Yes | 24-character step id. |

***

### update\_sequencer\_step

Change a step in place. Its position is not editable here - use reorder\_sequencer\_steps.

Calls [`PATCH /v2/sequencer/sequences/{sequence_id}/steps/{step_id}`](/api-reference/endpoint/update-sequencer-step).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence_id` | string | Yes | 24-character sequence id. |
| `step_id` | string | Yes | 24-character step id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `step_type` | string | No | `auto_email` sends itself; the other three create a task for the owning rep. One of `auto_email`, `manual_email`, `call`, `task` |
| `interval_seconds` | number | No | Delay from the previous step, in seconds |
| `display_name` | string | No | Display name for the step |
| `new_thread` | boolean | No | Email steps: start a new thread rather than replying on the existing one |
| `task_note` | string | No | Shown to the rep on the resulting task |
| `task_priority` | string | No | One of `high`, `medium`, `low` |
| `task_autoskip_delay` | number | No | Seconds after due at which an untouched task is auto-skipped |
| `templates` | object\[] | No | Email steps only. Several templates are picked between by weight. Fields: `template` (string); `weight` (number) |

***

### delete\_sequencer\_step

Remove a step from a cadence. Refused with 409 while any enrollment is live - disable the cadence first.

Calls [`DELETE /v2/sequencer/sequences/{sequence_id}/steps/{step_id}`](/api-reference/endpoint/delete-sequencer-step).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence_id` | string | Yes | 24-character sequence id. |
| `step_id` | string | Yes | 24-character step id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

## Templates

### list\_sequencer\_templates

List the team's reusable email templates.

Calls [`GET /v2/sequencer/templates`](/api-reference/endpoint/list-sequencer-templates).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `archived` | boolean | No | Only archived templates, or only live ones. |
| `tag` | string | No | Only templates carrying this tag. |
| `search` | string | No | Case-insensitive match on the template name. |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### create\_sequencer\_template

Create a reusable email template. Email steps reference templates by id and pick between them by weight.

Calls [`POST /v2/sequencer/templates`](/api-reference/endpoint/create-sequencer-template).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | Yes | Name of the template |
| `subject` | string | Yes | Supports merge fields, e.g. `{{first_name}}` |
| `body_html` | string | Yes | HTML body. `{{custom.<label>}}` resolves a custom field by its label, case-insensitively |
| `tags` | string\[] | No | Tags for organizing and filtering templates |

***

### get\_sequencer\_template

One template, with its body and engagement counters.

Calls [`GET /v2/sequencer/templates/{id}`](/api-reference/endpoint/get-sequencer-template).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character template id. |

***

### update\_sequencer\_template

Edit a template. Changes apply to every step already pointing at it, INCLUDING cadences that are currently running.

Calls [`PATCH /v2/sequencer/templates/{id}`](/api-reference/endpoint/update-sequencer-template).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character template id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | No | Name of the template |
| `subject` | string | No | Supports merge fields, e.g. `{{first_name}}`. |
| `body_html` | string | No | HTML body. Merge fields resolve against the contact; `{{custom.<label>}}` resolves a custom field by its label, case-insensitively. |
| `tags` | string\[] | No | Tags for organizing and filtering templates |
| `archived` | boolean | No | Archived templates stay usable by steps already pointing at them |

***

### delete\_sequencer\_template

Delete a template. Archive instead if any live step still references it - a step left without a usable template cannot send.

Calls [`DELETE /v2/sequencer/templates/{id}`](/api-reference/endpoint/delete-sequencer-template).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character template id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### preview\_sequencer\_template

Render a template's subject and body with merge fields resolved. Changes nothing.

Calls [`POST /v2/sequencer/templates/{id}/preview`](/api-reference/endpoint/preview-sequencer-template).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character template id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `contact` | string | No | Render against this contact. Without it, merge fields render as placeholders |

***

## Enrollments

### list\_sequencer\_enrollments

List contacts inside sequences: where each one is in the cadence and who owns them.

Calls [`GET /v2/sequencer/enrollments`](/api-reference/endpoint/list-sequencer-enrollments).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence` | string | No | Only enrollments in this sequence. |
| `contact` | string | No | Only enrollments for this contact. |
| `state` | string | No | `finished`, `bounced`, `opted_out` and `failed` are terminal; the rest still hold the contact’s one live slot in the sequence. One of `pending`, `active`, `paused`, `finished`, `bounced`, `opted_out`, `failed` |
| `pending_reason` | string | No | Only enrollments a rule is holding for approval |
| `user` | string | No | Only enrollments owned by this team member. |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### bulk\_finish\_sequencer\_enrollments

Un-enrol up to 500 contacts at once. Like finish, this is how you remove people - there is no delete.

Calls [`POST /v2/sequencer/enrollments/bulk/finish`](/api-reference/endpoint/bulk-finish-sequencer-enrollments).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `note` | string | No | Recorded against the approval decision. |

***

### bulk\_approve\_sequencer\_enrollments

Release up to 500 enrollments a rule held for approval.

Calls [`POST /v2/sequencer/enrollments/bulk/approve`](/api-reference/endpoint/bulk-approve-sequencer-enrollments).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `note` | string | No | Recorded against the approval decision. |

***

### bulk\_reject\_sequencer\_enrollments

Refuse up to 500 held enrollments. They are finished rather than started, and each decision is recorded.

Calls [`POST /v2/sequencer/enrollments/bulk/reject`](/api-reference/endpoint/bulk-reject-sequencer-enrollments).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `note` | string | No | Recorded against the approval decision. |

***

### bulk\_reassign\_sequencer\_enrollments

Hand up to 500 enrollments to another rep. The new owner must be an active team member.

Calls [`POST /v2/sequencer/enrollments/bulk/reassign`](/api-reference/endpoint/bulk-reassign-sequencer-enrollments).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `note` | string | No | Recorded against the approval decision. |
| `owner_id` | string | Yes | The team member to hand the enrollments to |

***

### move\_sequencer\_enrollments

Move up to 500 contacts into another cadence. Enrols in the target first and finishes the original only if that succeeded, so nobody is left out of both.

Calls [`POST /v2/sequencer/enrollments/bulk/move`](/api-reference/endpoint/move-sequencer-enrollments).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `note` | string | No | Recorded against the approval decision. |
| `sequence` | string | Yes | The cadence to move them into |

***

### sequencer\_account\_action

Finish or pause EVERY contact at one company - the 'we just booked a meeting there, stop emailing the rest' case. Send dry\_run: true first; this can touch a lot of people at once.

Calls [`POST /v2/sequencer/enrollments/bulk/account`](/api-reference/endpoint/sequencer-account-action).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `contact` | string | No | Identify the account by one of contact, domain or company\_name |
| `domain` | string | No | Company domain that identifies the account |
| `company_name` | string | No | Company name that identifies the account |
| `action` | string | Yes | One of `finish`, `pause` |
| `scope` | string | Yes | sequence limits it to one cadence; team covers every cadence the team runs |
| `sequence` | string | No | Required when scope is sequence |
| `days` | number | No | Pause length in days, when action is pause |
| `reason` | string | No | Optional reason |
| `dry_run` | boolean | No | Return how many would be affected, and change nothing |

***

### get\_sequencer\_enrollment

Get one enrollment: state, current step, when the next step is due, owner.

Calls [`GET /v2/sequencer/enrollments/{id}`](/api-reference/endpoint/get-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |

***

### list\_sequencer\_enrollment\_events

The timeline for one enrollment: sends, opens, replies, task activity, rule decisions.

Calls [`GET /v2/sequencer/enrollments/{id}/events`](/api-reference/endpoint/list-sequencer-enrollment-events).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `type` | string | No | Only events of this type. |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### pause\_sequencer\_enrollment

Pause one enrollment. Open tasks are hidden until it resumes.

Calls [`POST /v2/sequencer/enrollments/{id}/pause`](/api-reference/endpoint/pause-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `pause_reason` | string | No | Recorded on the enrollment and its timeline. |
| `resume_at` | string | No | ISO 8601; resumes itself then |

***

### resume\_sequencer\_enrollment

Lift a pause and pick the cadence back up.

Calls [`POST /v2/sequencer/enrollments/{id}/resume`](/api-reference/endpoint/resume-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### finish\_sequencer\_enrollment

Un-enrol a contact. This is how you remove someone from a sequence - there is no delete. The timeline survives and they can be enrolled again later.

Calls [`POST /v2/sequencer/enrollments/{id}/finish`](/api-reference/endpoint/finish-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### retry\_sequencer\_enrollment

The only way out of the `failed` state.

Calls [`POST /v2/sequencer/enrollments/{id}/retry`](/api-reference/endpoint/retry-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### reassign\_sequencer\_enrollment

Hand one contact, and optionally their open tasks, to another rep.

Calls [`POST /v2/sequencer/enrollments/{id}/reassign`](/api-reference/endpoint/reassign-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `owner_id` | string | Yes | The team member to hand the enrollment to |
| `include_open_tasks` | boolean | No | Also move any open tasks to the new owner |
| `note` | string | No | Recorded against the approval decision. |

***

### approve\_sequencer\_enrollment

Release an enrollment a rule held for approval, and the cadence starts. Find them with list\_sequencer\_enrollments pending\_reason=approval.

Calls [`POST /v2/sequencer/enrollments/{id}/approve`](/api-reference/endpoint/approve-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `note` | string | No | Recorded against the decision |

***

### reject\_sequencer\_enrollment

Refuse a held enrollment. The contact is finished without being contacted, and the decision is recorded on the timeline.

Calls [`POST /v2/sequencer/enrollments/{id}/reject`](/api-reference/endpoint/reject-sequencer-enrollment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character enrollment id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `note` | string | No | Recorded against the approval decision. |

***

## Enrolment Runs

### preview\_sequencer\_enrolment

Dry run: who would be added to a cadence and who would be excluded, and why. Costs nothing and changes nothing. Run this before adding contacts.

Calls [`POST /v2/sequencer/enrollment-runs/preview`](/api-reference/endpoint/preview-sequencer-enrolment).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `sequence` | string | Yes | The sequence to enrol into. |
| `source` | object | Yes | Who to enrol. Fields: `kind` (one of `contacts`, `contact_list`, `rows`, `preview`); `contacts` (string\[]); `contact_list` (string); `prospects` (object\[]); `preview_id` (string) |

***

### start\_sequencer\_enrolment\_run

Enrol more people than one request can hold open - up to 5000, asynchronously. Run preview\_sequencer\_enrolment first, then pass its preview\_id as source.kind=preview to confirm exactly that set. For 500 or fewer, add\_contacts\_to\_sequencer\_sequence is synchronous and simpler.

Calls [`POST /v2/sequencer/enrollment-runs`](/api-reference/endpoint/start-sequencer-enrolment-run).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `sequence` | string | Yes | The cadence to enrol into |
| `owner_id` | string | No | Who owns the resulting enrollments. Defaults to user\_id |
| `source` | object | Yes | Who to enrol. Fields: `kind` (one of `contacts`, `contact_list`, `rows`, `preview`: contacts = existing contact ids; contact\_list = a Salesfinity list; rows = inline prospects; preview = confirm exactly the set a preview returned); `contacts` (string\[]); `contact_list` (string); `prospects` (object\[]: No file upload - parse your CSV and send the rows); `preview_id` (string) |
| `force_include` | string\[] | No | Prospect keys from a preview to add despite a rule blocking them. They are held for approval, not waved through |

***

### list\_sequencer\_enrolment\_runs

Recent enrolment runs for one cadence, newest first. Returns a plain array, not a paginated envelope - runs older than `limit` are not reachable here.

Calls [`GET /v2/sequencer/enrollment-runs`](/api-reference/endpoint/list-sequencer-enrolment-runs).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `sequence` | string | Yes | Required. Runs are always scoped to one cadence |
| `limit` | number | No | How far back to look. Max 25, default 10 |

***

### get\_sequencer\_enrolment\_run

Progress and outcome of one run: considered, enrolled, skipped and held, with a sample of the skips and why.

Calls [`GET /v2/sequencer/enrollment-runs/{run_id}`](/api-reference/endpoint/get-sequencer-enrolment-run).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `run_id` | string | Yes | Run id, e.g. `enroll_1a2b3c4d`. |

***

### cancel\_sequencer\_enrolment\_run

Stop a run adding anyone else. NOT an undo - whoever is already enrolled stays enrolled. Finish them individually to reverse it.

Calls [`POST /v2/sequencer/enrollment-runs/{run_id}/cancel`](/api-reference/endpoint/cancel-sequencer-enrolment-run).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `run_id` | string | Yes | Run id, e.g. `enroll_1a2b3c4d`. |
| `user_id` | string | No | Optional here: cancelling is recorded against the team rather than a person |

***

## Tasks

### list\_sequencer\_tasks

The rep task queue a cadence produces, plus one-off tasks. Use action=call for the call queue.

Calls [`GET /v2/sequencer/tasks`](/api-reference/endpoint/list-sequencer-tasks).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | No | Assignee, or 'all' for the whole team. Defaults to all |
| `state` | string | No | `pending` is the working queue. `held` means the enrollment is paused. The rest are terminal. One of `pending`, `held`, `completed`, `skipped`, `expired`, `cancelled` |
| `action` | string | No | Use `call` to fetch the call queue. One of `call`, `manual_email`, `generic`, `linkedin_connect`, `linkedin_message`, `linkedin_view`, `linkedin_interact`, `meeting`, `sms` |
| `sequence` | string | No | Only tasks belonging to this sequence. |
| `origin` | string | No | Cadence tasks (`sequence`) or a rep’s own to-dos (`one_off`). |
| `contact` | string | No | Only tasks for this contact. |
| `priority` | string | No | Only tasks in this priority band. One of `high`, `medium`, `low` |
| `overdue` | boolean | No | Only tasks whose due date has passed. |
| `due_before` | string | No | ISO 8601 |
| `due_after` | string | No | ISO 8601 |
| `search` | string | No | Matches the contact behind the task. |
| `sort` | string | No | Applied server-side across the whole result set, not just the page you asked for. One of `due`, `priority`, `action`, `prospect`, `company`, `sequence`, `last_activity` |
| `direction` | string | No | Ignored by `due`, which is always oldest-first. One of `asc`, `desc` |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### create\_sequencer\_task

Create a one-off task for a contact, not tied to any cadence.

Calls [`POST /v2/sequencer/tasks`](/api-reference/endpoint/create-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `contact` | string | Yes | The contact the task is about. |
| `action` | string | Yes | Use `call` to fetch the call queue. One of `call`, `manual_email`, `generic`, `linkedin_connect`, `linkedin_message`, `linkedin_view`, `linkedin_interact`, `meeting`, `sms` |
| `due_at` | string | Yes | ISO 8601 |
| `assignee_id` | string | No | Defaults to user\_id |
| `priority` | string | No | Only tasks in this priority band. One of `high`, `medium`, `low` |
| `subject` | string | No | Subject line, for a `manual_email` task. |
| `note` | string | No | Optional free-text note |

***

### get\_sequencer\_task\_summary

Counts for the overdue / today / this week / later buckets.

Calls [`GET /v2/sequencer/tasks/summary`](/api-reference/endpoint/get-sequencer-task-summary).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | No | Assignee to summarise, or `all` for the whole team. Defaults to `all`. |
| `today_ends` | string | No | ISO 8601, end of the rep's local today |
| `week_ends` | string | No | ISO 8601. End of the caller’s local "this week". |

***

### get\_sequencer\_account\_coverage

For the accounts you name, which buying-committee seats are already covered by a contact in a cadence and which are not.

Calls [`GET /v2/sequencer/tasks/account-coverage`](/api-reference/endpoint/get-sequencer-account-coverage).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `account_keys` | string | No | Comma-separated account keys, e.g. acme.com,globex.com |

***

### materialize\_sequencer\_call\_list

Push a rep's due call tasks into their Salesfinity dial list so they can be dialled. This writes.

Calls [`POST /v2/sequencer/tasks/materialize-call-list`](/api-reference/endpoint/materialize-sequencer-call-list).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `assignee_id` | string | No | Whose dial list to fill. Defaults to user\_id |

***

### bulk\_create\_sequencer\_tasks

Create one standalone to-do per contact, at most 500.

Calls [`POST /v2/sequencer/tasks/bulk`](/api-reference/endpoint/bulk-create-sequencer-tasks).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `contacts` | string\[] | Yes | One task per contact. At most 500 |
| `action` | string | Yes | Use `call` to fetch the call queue. One of `call`, `manual_email`, `generic`, `linkedin_connect`, `linkedin_message`, `linkedin_view`, `linkedin_interact`, `meeting`, `sms` |
| `due_at` | string | Yes | ISO 8601, and must be in the future |
| `priority` | string | No | Only tasks in this priority band. One of `high`, `medium`, `low` |
| `assignee_id` | string | No | Defaults to user\_id |
| `subject` | string | No | Subject line, for a `manual_email` task. |
| `note` | string | No | Optional free-text note |

***

### bulk\_skip\_sequencer\_tasks

Skip up to 500 tasks. Skipping still advances the cadence. NOTE: there is deliberately no bulk complete - completing a manual\_email task queues a real send, so complete those one at a time.

Calls [`POST /v2/sequencer/tasks/bulk/skip`](/api-reference/endpoint/bulk-skip-sequencer-tasks).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `reason` | string | No | Optional reason |

***

### bulk\_snooze\_sequencer\_tasks

Move the due date on up to 500 tasks. Each auto-skip deadline moves by the same amount.

Calls [`POST /v2/sequencer/tasks/bulk/snooze`](/api-reference/endpoint/bulk-snooze-sequencer-tasks).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `due_at` | string | Yes | ISO 8601, and must be in the future. Applies to every task in ids |

***

### bulk\_reassign\_sequencer\_tasks

Hand up to 500 tasks to another rep. Call tasks also move between dial lists.

Calls [`POST /v2/sequencer/tasks/bulk/reassign`](/api-reference/endpoint/bulk-reassign-sequencer-tasks).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `ids` | string\[] | Yes | At most 500 ids |
| `assignee_id` | string | Yes | The team member to hand the tasks to |
| `note` | string | No | Optional free-text note |

***

### get\_sequencer\_task

One task with its contact, cadence and step.

Calls [`GET /v2/sequencer/tasks/{id}`](/api-reference/endpoint/get-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |

***

### update\_sequencer\_task

Change a ONE-OFF task. A cadence task's shape belongs to its step - snooze it, or un-enrol the contact, instead.

Calls [`PATCH /v2/sequencer/tasks/{id}`](/api-reference/endpoint/update-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `due_at` | string | No | ISO 8601, and must be in the future |
| `priority` | string | No | Only tasks in this priority band. One of `high`, `medium`, `low` |
| `subject` | string | No | Subject line, for a `manual_email` task. |
| `note` | string | No | Optional free-text note |

***

### delete\_sequencer\_task

Cancel a ONE-OFF task. It moves to `cancelled` rather than being destroyed, so the history survives.

Calls [`DELETE /v2/sequencer/tasks/{id}`](/api-reference/endpoint/delete-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### list\_sequencer\_task\_events

The timeline for one task, newest first. For a one-off task this is the only way to reach its history. Returns at most 200 events and takes no pagination; for a sequenced prospect use list\_sequencer\_enrollment\_events, which is paged.

Calls [`GET /v2/sequencer/tasks/{id}/events`](/api-reference/endpoint/list-sequencer-task-events).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |

***

### complete\_sequencer\_task

Complete a task and advance the cadence. For a manual\_email task this QUEUES A REAL EMAIL - confirm the body with the user before calling it.

Calls [`POST /v2/sequencer/tasks/{id}/complete`](/api-reference/endpoint/complete-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `call_log` | string | No | For a call task: the call log it was resolved by |
| `note` | string | No | Optional free-text note |
| `subject` | string | No | manual\_email only |
| `body` | string | No | manual\_email only; HTML. Sends a real email |

***

### skip\_sequencer\_task

Skip a task. The cadence still advances.

Calls [`POST /v2/sequencer/tasks/{id}/skip`](/api-reference/endpoint/skip-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `reason` | string | No | Optional reason |

***

### snooze\_sequencer\_task

Move a task's due date. The auto-skip deadline moves with it.

Calls [`POST /v2/sequencer/tasks/{id}/snooze`](/api-reference/endpoint/snooze-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `due_at` | string | Yes | ISO 8601 |

***

### reassign\_sequencer\_task

Hand one task to another rep. A call task also moves out of the old rep's dial list and into the new one.

Calls [`POST /v2/sequencer/tasks/{id}/reassign`](/api-reference/endpoint/reassign-sequencer-task).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character task id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `assignee_id` | string | Yes | The team member to hand the task to |
| `note` | string | No | Optional free-text note |

***

## Suppression

### list\_sequencer\_suppression

The team's do-not-contact list, checked before every enrolment and every send.

Calls [`GET /v2/sequencer/suppression`](/api-reference/endpoint/list-sequencer-suppression).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `type` | string | No | Only entries of this kind. One of `email`, `domain`, `phone` |
| `reason` | string | No | Only entries added for this reason. |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### create\_sequencer\_suppression

Add an address, domain or phone number to the do-not-contact list.

Calls [`POST /v2/sequencer/suppression`](/api-reference/endpoint/create-sequencer-suppression).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `type` | string | Yes | Only entries of this kind. One of `email`, `domain`, `phone` |
| `value` | string | Yes | The email address, domain or phone number to suppress, matching `type` |
| `reason` | string | No | Only entries added for this reason. One of `unsubscribed`, `bounced`, `complained`, `manual`, `dnc` |

***

### import\_sequencer\_suppression

Add up to 1000 suppression entries at once. Re-importing an existing value updates it rather than duplicating it.

Calls [`POST /v2/sequencer/suppression/import`](/api-reference/endpoint/import-sequencer-suppression).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `entries` | object\[] | Yes | At most 1000 per request. Fields: `type` (one of `email`, `domain`, `phone`: domain suppresses every address at that domain); `value` (string: Stored normalised, so matching is case-insensitive); `reason` (one of `unsubscribed`, `bounced`, `complained`, `manual`, `dnc`) |

***

### delete\_sequencer\_suppression

Remove one entry from the suppression list, so that address or domain can be contacted again.

Calls [`DELETE /v2/sequencer/suppression/{id}`](/api-reference/endpoint/delete-sequencer-suppression).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character suppression entry id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

## Policies

### get\_sequencer\_policy\_catalog

The conditions and actions a rule can be built from, and which scopes each is valid in. Read this BEFORE writing a policy - the vocabulary is live and is not pinned in the API.

Calls [`GET /v2/sequencer/policies/catalog`](/api-reference/endpoint/get-sequencer-policy-catalog).

Takes no parameters.

***

### preview\_sequencer\_policy

Replay an UNSAVED rule set against the team's recent enrolments and report what it would have done. Run this before saving: a rule that is too broad silently blocks every enrolment team-wide, and this is the cheapest way to find that out.

Calls [`POST /v2/sequencer/policies/preview`](/api-reference/endpoint/preview-sequencer-policy).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `rules` | object\[] | No | Rules. Each has name, action `{type, params}`, scope\[], and either condition `{type, params}` or condition\_group. Read get\_sequencer\_policy\_catalog for the valid condition and action types |

***

### list\_sequencer\_policies

The team's rules of engagement: what may be enrolled and what happens at each step.

Calls [`GET /v2/sequencer/policies`](/api-reference/endpoint/list-sequencer-policies).

Takes no parameters.

***

### create\_sequencer\_policy

Create a rules-of-engagement policy. Preview the rules first.

Calls [`POST /v2/sequencer/policies`](/api-reference/endpoint/create-sequencer-policy).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | Yes | Name of the policy |
| `description` | string | No | Description of the policy |
| `rules` | object\[] | No | Rules. Each has name, action `{type, params}`, scope\[], and either condition `{type, params}` or condition\_group. Read get\_sequencer\_policy\_catalog for the valid condition and action types |
| `outcome_rules` | object\[] | No | Each has name, outcome, and actions\[]. Outcomes come from the catalog |
| `crm_refresh_hours` | number | No | How stale a cached CRM snapshot may be before a CRM-backed rule refreshes it. 1-168, default 24 |

***

### get\_sequencer\_policy

One policy with its rules and outcome rules, and whether it is the team default.

Calls [`GET /v2/sequencer/policies/{id}`](/api-reference/endpoint/get-sequencer-policy).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character policy id. |

***

### update\_sequencer\_policy

Edit a policy. Applies IMMEDIATELY to every cadence using it, so preview the rules first.

Calls [`PATCH /v2/sequencer/policies/{id}`](/api-reference/endpoint/update-sequencer-policy).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character policy id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |
| `name` | string | No | Name of the policy |
| `description` | string | No | Description of the policy |
| `rules` | object\[] | No | Rules. Each has name, action `{type, params}`, scope\[], and either condition `{type, params}` or condition\_group. Read get\_sequencer\_policy\_catalog for the valid condition and action types |
| `outcome_rules` | object\[] | No | Reactions: what each outcome on an enrollment does. See [Rules of engagement](/sequencer/rules-of-engagement#reactions-what-an-outcome-does) |
| `crm_refresh_hours` | number | No | How stale a cached CRM snapshot may be before a CRM-backed rule refreshes it. |

***

### delete\_sequencer\_policy

Delete a policy. Cadences pointing at it fall back to the team default.

Calls [`DELETE /v2/sequencer/policies/{id}`](/api-reference/endpoint/delete-sequencer-policy).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character policy id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

### set\_default\_sequencer\_policy

Make a policy the team default. Every cadence that does not name its own falls back to it, so this changes behaviour across the team at once.

Calls [`POST /v2/sequencer/policies/{id}/default`](/api-reference/endpoint/set-default-sequencer-policy).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | 24-character policy id. |
| `user_id` | string | Yes | Team member id this acts as. Must be an active member of the team. |

***

## Settings

### get\_sequencer\_settings

Team-level defaults: the shared mailbox pool, default sending schedule, warmup defaults, unsubscribe wording, reply classifications and the buying-committee map. Provider secrets are never returned.

Calls [`GET /v2/sequencer/settings`](/api-reference/endpoint/get-sequencer-settings).

Takes no parameters.

***

### list\_sequencer\_mailboxes

Sending mailboxes with health and capacity. A cadence with an email step needs at least one able to send.

Calls [`GET /v2/sequencer/email-accounts`](/api-reference/endpoint/list-sequencer-mailboxes).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `status` | string | No | `ready` can send now; `not_connecting` has failed SMTP or IMAP; `out_of_pool` is connected but not assigned to anyone or to the shared pool. One of `ready`, `not_connecting`, `paused`, `out_of_pool` |
| `search` | string | No | Match on the mailbox address or sender name. |
| `page` | number | No | Page number, 1-based. |
| `limit` | number | No | Results per page. |

***

### get\_sequencer\_mailbox

Health, warmup and sending limits for one mailbox. Credentials are never returned.

Calls [`GET /v2/sequencer/email-accounts/{id}`](/api-reference/endpoint/get-sequencer-mailbox).

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | number | Yes | Numeric mailbox id - these come from the sending provider, not Mongo |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.