GET /api/v1/series/upcoming
Lists the steps of your active series that have not gone out yet, soonest first, across every
series at once.
This is the reading the API could not do: a published series was visible, and nothing said when
its steps would leave. The moments are computed — start date, waits accumulated along the path, then
the step's send time — by the same function the editor, the calendar and the engine use. This
endpoint cannot announce a time the send will not honour.
Authorization
| Role | Access |
|---|---|
OWNER | Allowed |
ADMIN | Allowed |
MEMBER | Allowed |
Example
bash
curl -s 'https://www.agentsmail.io/api/v1/series/upcoming' \
-H "x-api-key: $AGENTMAIL_API_KEY"Response
| Code | When |
|---|---|
200 | The steps to come, possibly an empty list |
401 | Missing or invalid key |
Response fields
| Field | Type | Description |
|---|---|---|
success | boolean | Always true here |
data | array | The steps still to come, soonest first |
data[].id | string | Prefixed series: — never a campaign id |
data[].name | string | The name the campaign will carry: <series name> · step N |
data[].dueAt | string | When the step goes out, ISO 8601 |
data[].campaignId | null | Always null: the campaign does not exist yet |
Example response
json
{
"success": true,
"data": [
{
"id": "series:3c3c3c3c-9999-4ddd-8eee-ffff11112222",
"name": "March launch · step 2",
"dueAt": "2026-03-18T08:00:00.000Z",
"campaignId": null
}
]
}Notes
Nothing here exists as a campaign yet, which is whycampaignId is null and the id is
prefixed. The campaign is created at dueAt, named exactly as name says, and from then on it
reads through the Campaigns API like any other. Creating campaigns ahead
of time is deliberately impossible: a draft sitting in the list could be sent by hand, out of the
series' order.
A step whose moment has passed is not listed — it already has its campaign.