Skip to main content
POST
Move Sequence Enrollments

Move Sequence Enrollments

Release a bounded batch of contacts off one sequence step and onto another, keeping their enrollment intact. Use this when you want the next N contacts waiting on a delay to continue early: pace a launch, drain a hold step, or push one wave past a wait without touching the graph. You could approximate this by cancelling the enrollments and re-enrolling them at the target step, but that throws away the enrollment’s entry event properties, its stop-condition entry snapshots, and its original start date, and it is refused outright while the sequence has new enrollment paused. Moving does none of those things. Moved contacts become active on the target step right away, so the sequence emails them as soon as a worker picks them up. Every bulk target defaults to a dry run: pass dryRun: false to actually move them.

Request

string
required
Sequence ID.
string
required
Node ID the contacts are currently sitting on. Read it from currentNodeId on list enrollments.
string
Node ID to move them onto. Defaults to the source step’s only next step, and is required when that step branches or is terminal. Cannot be the trigger node.
number
Maximum enrollments to move in this call. Defaults to 100, maximum 500.
string
Which enrollments to take first: wait_until_asc (default), wait_until_desc, enrolled_at_asc, or enrolled_at_desc. The default takes the contacts that have been waiting longest for their next step.
array
Optional narrowing filter: only move these subscribers, up to 500.
number
Guardrail. Refuses to move more than this many enrollments onto targetNodeId in a rolling 24 hours, counting the moves recorded by earlier calls. The response reports movedInWindow and dailyRemaining so a paced release can resume the next day.
array
Tag names applied to the moved contacts so the released wave stays identifiable. The tags must already exist, and this requires the subscribers:tag scope. Applying them never enrolls contacts in tag_added sequences.
string
Note stored on every moved enrollment and returned as moveReason by list enrollments.
boolean
When true (the default), reports which enrollments would move without moving them. Pass false to apply.

Pacing a release

Each call is bounded on purpose, so it is never drained automatically. When the response reports remainingCount above zero, send the same request again to release the next batch. Combine limit with dailyLimit to spread a large backlog over several days without tracking the running total yourself. Active enrollments, enrollments a worker is currently mid-step on, and enrollments parked awaiting double opt-in are never moved. Active tokens may still have older queue work, so only safely parked waiting tokens can be repositioned. Excluded enrollments are reported in skippedCount and omitted from matchedCount.

Responses