Skip to content

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.

{
"position": 1,
"subject": "Hi {{first_name}}",
"body_html": "<p>Hi {{first_name}}, ...</p>",
"body_text": "Hi {{first_name}}, ... (optional plaintext fallback)",
"delay_minutes": 0
}
FieldRequiredNotes
positionyes1-based step order. Determines send sequence.
subjectyesSupports merge tags.
body_htmlyesSupports merge tags. Rendered as the email’s HTML body.
body_textnoPlaintext fallback. If omitted, generated from body_html.
delay_minutesno (default 0)Minutes to wait after the previous step. Step 1’s delay is from dispatch time; subsequent steps stack.

The following are automatically substituted from the contact’s data at send time:

TagReplaced withFallback (when contact field is null)
{{first_name}}contact.first_nameempty string (renders as Hi , — be careful)
{{last_name}}contact.last_nameempty string
{{email}}contact.emailrequired, never null
{{company}}contact.companyempty string

If your contact list has uneven first_name population, prefer {{company}} (often higher coverage) or write fallback-friendly copy (“Hi there,”).

Delays are cumulative from dispatch:

  • Step 1: delay_minutes: 0 → fires at dispatch time + jitter
  • Step 2: delay_minutes: 4320 (3 days) → fires step_1_send_time + 4320 min + jitter
  • Step 3: delay_minutes: 5760 (4 days) → fires step_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 /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).