Sequence steps
Sequence steps are owned by campaigns. They’re created at campaign creation time via POST /campaigns (see Campaigns). There is currently no separate CRUD endpoint for steps post-creation; if you need to edit the sequence, recreate the campaign or contact us.
Step shape
Section titled “Step shape”{ "position": 1, "subject": "Hi {{first_name}}", "body_html": "<p>Hi {{first_name}}, ...</p>", "body_text": "Hi {{first_name}}, ... (optional plaintext fallback)", "delay_minutes": 0}| Field | Required | Notes |
|---|---|---|
position | yes | 1-based step order. Determines send sequence. |
subject | yes | Supports merge tags. |
body_html | yes | Supports merge tags. Rendered as the email’s HTML body. |
body_text | no | Plaintext fallback. If omitted, generated from body_html. |
delay_minutes | no (default 0) | Minutes to wait after the previous step. Step 1’s delay is from dispatch time; subsequent steps stack. |
Merge tags
Section titled “Merge tags”The following are automatically substituted from the contact’s data at send time:
| Tag | Replaced with | Fallback (when contact field is null) |
|---|---|---|
{{first_name}} | contact.first_name | empty string (renders as Hi , — be careful) |
{{last_name}} | contact.last_name | empty string |
{{email}} | contact.email | required, never null |
{{company}} | contact.company | empty string |
If your contact list has uneven first_name population, prefer {{company}} (often higher coverage) or write fallback-friendly copy (“Hi there,”).
Delay math
Section titled “Delay math”Delays are cumulative from dispatch:
- Step 1:
delay_minutes: 0→ fires at dispatch time + jitter - Step 2:
delay_minutes: 4320(3 days) → firesstep_1_send_time + 4320 min + jitter - Step 3:
delay_minutes: 5760(4 days) → firesstep_2_send_time + 5760 min + jitter
Each step’s delay is from the end of the previous step’s batch, not from dispatch. So a 3-step sequence with delays [0, 4320, 5760] actually fires step 3 at dispatch + 4320 + 5760 = 10080 min (7 days), not at 5760.
Get a campaign’s preview
Section titled “Get a campaign’s preview”GET /campaigns/:id/preview?contact_id=<id>Authorization: Bearer <key>Returns each step’s subject + body with merge tags applied (using sample data if contact_id omitted).