Sequences
Recurring Schedule
Re-enroll an audience into a sequence every day, week or month
PUT
Recurring Schedule
Make a manual-trigger sequence recurring. A recurring schedule enrolls an audience again and again: daily, on chosen weekdays, or on chosen days of the month, at a time in your timezone. Use it for sends that are not tied to an event, such as end-of-month updates, balance reminders or a daily digest.
Read the schedule:
Remove it. Runs already started and contacts already enrolled are not affected, and removing a schedule that does not exist succeeds:
- Each run is an audience enrollment run with
source: "recurring". The audience is evaluated again at every run. - Contacts who finished an earlier run enter again. Contacts still in the sequence from an earlier run are skipped. Sequences with
enrollmentMode: "one_time"never enroll anyone twice. - Unsubscribed and bounced contacts are never enrolled.
- Nothing is enrolled until the first scheduled time.
- Runs only happen while the sequence is enabled and accepting entrants. Occurrences while it is paused, disabled or closed to new entrants are skipped.
- A run waits while another audience enrollment is in progress. A run that cannot start within 6 hours of its time is skipped.
- Only sequences with
trigger: "manual"accept a schedule, and not whileaudienceAutoEnroll(keep enrolling later joiners) is on. Changing the trigger away from manual switches the schedule off.
Request
string
required
Sequence ID.
object
required
Who to enroll at each run. Same shape as the
audience of Enroll Audience: { "type": "all" }, { "type": "lists", "listIds": [...] }, { "type": "segment", "segmentId": "..." }, filtered or rules.object
required
When to run.
boolean
default:"true"
Pass
false to keep the schedule but stop its runs.string | null
ISO 8601 date-time after which no run starts, such as the end of the last day in the schedule’s timezone. Omitted or
null means no end date; since saving replaces the schedule, leaving it out removes an earlier end date. Rejected when no run would happen before it. Once the last run before it has started, nextRunAt becomes null.string
Who enters at each run, saved as the sequence’s enrollment mode:
unlimited (everyone who matches; people still in the sequence are skipped) or one_time (only people who never entered). The mode also applies to enrollments you start by hand. Omit to keep the current mode.GET needs the sequences:read scope; PUT and DELETE need sequences:write.
Response fields
recurringEnrollment is the stored schedule, or null when there is none:
enabled,audience, andschedule(withweekdaysandmonthDayssorted, and empty for frequencies that do not use them)enabledAt: when the schedule was last switched on or changednextRunAt: the next occurrence, ornullwhile switched offlastRunAtandlastRunId: the most recent run that started and its audience enrollment run IDlastSkippedAtandlastSkipReason: the most recent skipped occurrence, withnot_accepting(the sequence was paused, disabled or closed to new entrants) ormissed(the run could not start within 6 hours)endsAt: no run starts after it, ornull
enrollmentMode is the sequence’s enrollment mode, which decides who enters at each run.
description is a readable summary such as Monthly on the 1st and the last day at 10:00 (Europe/London). upcomingRuns lists the next five run times, and is empty while the schedule is off. Writes also return a message.
The schedule is also returned as recurringEnrollment by Get Sequence and List Sequences.