Why a family of its own
A series is not a separate object: it is a sequence whose version carriestriggerType: "fixed_date". These routes exist because that one difference changes what a call
needs to carry — a start date and an audience — and because POST /api/v1/sequences refuses
fixed_date for exactly that reason: half a series is an unpublishable series.
So this family covers the series as a whole: creating one, reading its calendar, moving it,
deleting it.
What is NOT here, and where it lives
The steps. Nodes, wires, versions and publishing are identical on a series, and they stay on the Sequences API:| To do this | Use |
|---|---|
| Open a draft version | POST /api/v1/sequences/{id}/versions |
| Add an email step, a wait, a tag, a webhook | POST /api/v1/sequences/{id}/versions/{versionId}/nodes |
| Set a step's send time | PATCH …/nodes/{nodeId} with sendTimeMinutes |
| Wire two steps | POST …/edges |
| Publish | POST …/versions/{versionId}/publish |
The two fields that make a series
Both live on the version, and both read back onGET /api/v1/sequences/{id}/versions:
| Field | What it is |
|---|---|
startsAt | The moment day 1 is measured from. No step carries a date — they all count from here, which is why moving this one value moves the whole series |
sendTimeMinutes | On a step: the local time of day, in minutes from midnight (540 = 09:00). null means the step goes out as soon as the wait before it has elapsed |
A series enrols nobody.
GET /api/v1/sequences/{id}/enrollments answers with an empty list on
a series, and that is correct rather than a bug: there is no journey to walk.