Sequences (Drip Campaigns)
Create automated multi-step email sequences that send on a schedule. Build welcome series, onboarding flows, and re-engagement campaigns.
Build automated email sequences that deliver the right message at the right time. Sequences (also known as drip campaigns) let you set up a series of timed emails that send automatically when contacts are enrolled.
Before You Start
Sequences require the Automations feature. This is available on Marketing and BYOK plans.
| Prerequisite | Link |
|---|---|
| Verify a sender | Senders Guide |
| Create a list (for list-triggered sequences) | Lists Guide |
How Sequences Work
A sequence is a series of email steps with configurable delays between them. When a contact is enrolled, they progress through each step automatically.
Contact enrolled
|
v
Step 1: Welcome Email (immediately)
|
v (wait 2 days)
Step 2: Feature Highlights
|
v (wait 3 days)
Step 3: Call to Action
|
v
Sequence completeCreating a Sequence
Step 1: Setup
Define the basics:
- Name: Internal name for your sequence
- Trigger Type: How contacts get enrolled
- List trigger: Auto-enroll when a contact is added to a specific list
- API / Manual: Enroll contacts via the API or manually from the dashboard
- Default Sender: The sender address for all emails in the sequence
- Enroll Existing: Whether to enroll contacts already in the trigger list when the sequence is activated
Step 2: Build Steps
Add email steps to your sequence. Each step has:
- Name: Internal label (e.g., "Welcome Email")
- Subject: The email subject line
- Delay: When to send relative to the previous step (e.g., "immediately", "after 2 days")
- Body: The email content. Supports variables like
{{firstName}},{{lastName}},{{email}}, and any custom metadata fields - Sender Override (optional): Use a different sender for a specific step
Step 3: Review & Activate
Review your sequence settings and timeline. You can save as a draft or activate immediately.
Triggers
List Trigger
The most common trigger. When a contact is added to the trigger list (via the dashboard, API, or bulk import), they are automatically enrolled in the sequence.
# Adding a contact to a list also enrolls them in any active sequences
curl -X POST https://api.xmit.sh/api/lists/lst_xxx/contacts \
-H "Authorization: Bearer pm_live_xxx" \
-H "Content-Type: application/json" \
-d '{"contactIds": ["con_xxx"]}'API / Manual Trigger
Enroll contacts programmatically:
curl -X POST https://api.xmit.sh/api/sequences/seq_xxx/enroll \
-H "Authorization: Bearer pm_live_xxx" \
-H "Content-Type: application/json" \
-d '{"contactIds": ["con_xxx", "con_yyy"]}'Lifecycle Management
| Action | What Happens |
|---|---|
| Activate | Starts the sequence. Enrollments begin processing. Optionally enrolls existing list members. |
| Pause | Stops all sending. Active enrollments are paused. No new enrollments are created. |
| Resume | Resumes sending. Paused enrollments pick up where they left off (stale send times are bumped to avoid flooding). |
| Archive | Permanently stops the sequence. All active enrollments are exited. |
Enrollment States
Each contact's enrollment has a status:
| Status | Description |
|---|---|
| Active | Currently progressing through the sequence |
| Completed | Finished all steps successfully |
| Paused | Sequence is paused, enrollment will resume when sequence resumes |
| Exited | Removed from sequence (unsubscribed, bounced, or manually exited) |
Auto-Exit Conditions
Contacts are automatically exited from sequences when they:
- Unsubscribe from emails (via unsubscribe link or API)
- Bounce (permanent bounce or validation reject)
- File a complaint (spam report)
- Are manually exited by a team member
Step Delays
Delays are configured per step and determine when each email is sent relative to the previous step:
| Delay | Example Use |
|---|---|
0 days (immediately) | First welcome email right after enrollment |
1 day | Follow-up the next day |
3 days | Give contacts time to engage before the next touch |
7 days | Weekly cadence |
30 minutes | Quick follow-up (e.g., after signup) |
Domain Warmup Integration
Sequences respect your domain warmup limits. If the daily sending limit is reached, pending emails are automatically deferred and retried on the next scheduler run (every minute). No manual intervention is needed.
Analytics
Track per-step performance on the sequence detail page:
| Metric | Description |
|---|---|
| Sent | Emails successfully sent for this step |
| Opens | Open tracking per step |
| Clicks | Click tracking per step |
| Bounces | Failed deliveries per step |
| Skipped | Contacts skipped (suppressed, inactive, or warmup deferred) |
Variables
Use Liquid-style variables in your email content:
| Variable | Description |
|---|---|
{{email}} | Contact's email address |
{{firstName}} | Contact's first name |
{{lastName}} | Contact's last name |
{{unsubscribe_url}} | One-click unsubscribe link (always included) |
{{custom_field}} | Any key from the contact's metadata |
API Reference
Create Sequence
POST /api/sequences
{
"name": "Welcome Series",
"triggerType": "list_add",
"triggerListId": "lst_xxx",
"senderId": "snd_xxx",
"enrollExisting": false
}Add Step
POST /api/sequences/seq_xxx/steps
{
"name": "Welcome Email",
"subject": "Welcome to {{companyName}}!",
"bodyHtml": "<p>Hello {{firstName}},</p><p>Welcome aboard!</p>",
"delayAmount": 0,
"delayUnit": "days"
}Activate
POST /api/sequences/seq_xxx/activateEnroll Contacts
POST /api/sequences/seq_xxx/enroll
{
"contactIds": ["con_xxx", "con_yyy"]
}List Enrollments
GET /api/sequences/seq_xxx/enrollments?status=active&limit=50&offset=0Best Practices
Keep it concise. 3-5 emails is the sweet spot for most sequences. Too many emails increases unsubscribe rates.
Front-load value. The first email should deliver immediate value, not just a generic "thanks for signing up."
Test step delays carefully. Start with longer delays (2-3 days) and shorten based on engagement data.
Use the warmup-friendly approach. If you are warming up a new domain, start with a small trigger list and gradually increase volume as your domain reputation builds.