curl -X POST "https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences?api_key=YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"sequences": [
{
"id": null,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>",
"seq_delay_details": {
"delay_in_days": 0
}
},
{
"id": null,
"seq_number": 2,
"subject": "",
"email_body": "<p>Just following up on my previous email...</p>",
"seq_delay_details": {
"delay_in_days": 3
}
}
]
}'
import requests
API_KEY = "YOUR_API_KEY"
response = requests.post(
"https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences",
params={"api_key": API_KEY},
json={
"sequences": [
{
"id": None,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>",
"seq_delay_details": {"delay_in_days": 0}
},
{
"id": None,
"seq_number": 2,
"subject": "",
"email_body": "<p>Just following up on my previous email...</p>",
"seq_delay_details": {"delay_in_days": 3}
}
]
}
)
result = response.json()
print(result)
const API_KEY = 'YOUR_API_KEY';
const response = await fetch(
`https://server.smartlead.ai/api/v1/campaigns/${campaignId}/sequences?api_key=${API_KEY}`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sequences: [
{
id: null,
seq_number: 1,
subject: 'Hello {{first_name}}',
email_body: '<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>',
seq_delay_details: { delay_in_days: 0 }
},
{
id: null,
seq_number: 2,
subject: '',
email_body: '<p>Just following up on my previous email...</p>',
seq_delay_details: { delay_in_days: 3 }
}
]
})
}
);
const result = await response.json();
console.log(result);
{
"ok": true,
"data": [
{
"id": 1001,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>"
},
{
"id": 1002,
"seq_number": 2,
"subject": "Re: Hello {{first_name}}",
"email_body": "<p>Just following up on my previous email...</p>"
}
]
}
{
"message": "Invalid API Key"
}
{
"error": "Resource not found"
}
{
"error": "Invalid parameters provided"
}
Campaign Management
Update Campaign Sequences
Create or update email sequences for multi-step campaigns
POST
/
api
/
v1
/
campaigns
/
{campaign_id}
/
sequences
curl -X POST "https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences?api_key=YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"sequences": [
{
"id": null,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>",
"seq_delay_details": {
"delay_in_days": 0
}
},
{
"id": null,
"seq_number": 2,
"subject": "",
"email_body": "<p>Just following up on my previous email...</p>",
"seq_delay_details": {
"delay_in_days": 3
}
}
]
}'
import requests
API_KEY = "YOUR_API_KEY"
response = requests.post(
"https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences",
params={"api_key": API_KEY},
json={
"sequences": [
{
"id": None,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>",
"seq_delay_details": {"delay_in_days": 0}
},
{
"id": None,
"seq_number": 2,
"subject": "",
"email_body": "<p>Just following up on my previous email...</p>",
"seq_delay_details": {"delay_in_days": 3}
}
]
}
)
result = response.json()
print(result)
const API_KEY = 'YOUR_API_KEY';
const response = await fetch(
`https://server.smartlead.ai/api/v1/campaigns/${campaignId}/sequences?api_key=${API_KEY}`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sequences: [
{
id: null,
seq_number: 1,
subject: 'Hello {{first_name}}',
email_body: '<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>',
seq_delay_details: { delay_in_days: 0 }
},
{
id: null,
seq_number: 2,
subject: '',
email_body: '<p>Just following up on my previous email...</p>',
seq_delay_details: { delay_in_days: 3 }
}
]
})
}
);
const result = await response.json();
console.log(result);
{
"ok": true,
"data": [
{
"id": 1001,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>"
},
{
"id": 1002,
"seq_number": 2,
"subject": "Re: Hello {{first_name}}",
"email_body": "<p>Just following up on my previous email...</p>"
}
]
}
{
"message": "Invalid API Key"
}
{
"error": "Resource not found"
}
{
"error": "Invalid parameters provided"
}
Creates new sequences (id: null) or updates existing ones. Each sequence needs: seq_number, email_body, and delay in days. Cannot modify while campaign is ACTIVE - pause first.
Overview
Create new email sequences or update existing ones for a campaign. Sequences define your multi-step email outreach flow. Key Features:- Create new sequences by setting
id: null - Update existing sequences by including their
id - Configure delays between emails (0-365 days)
- Add A/B testing variants with
seq_variants - Subject line optional for follow-ups (uses “Re:” on previous)
Cannot modify sequences while campaign is ACTIVE. Pause campaign first, make changes, then resume.
Path Parameters
number
required
The campaign ID
Query Parameters
string
required
Your SmartLead API key
Request Body
array
required
Array of sequence objects
Show Sequence Object
Show Sequence Object
curl -X POST "https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences?api_key=YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"sequences": [
{
"id": null,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>",
"seq_delay_details": {
"delay_in_days": 0
}
},
{
"id": null,
"seq_number": 2,
"subject": "",
"email_body": "<p>Just following up on my previous email...</p>",
"seq_delay_details": {
"delay_in_days": 3
}
}
]
}'
import requests
API_KEY = "YOUR_API_KEY"
response = requests.post(
"https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequences",
params={"api_key": API_KEY},
json={
"sequences": [
{
"id": None,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>",
"seq_delay_details": {"delay_in_days": 0}
},
{
"id": None,
"seq_number": 2,
"subject": "",
"email_body": "<p>Just following up on my previous email...</p>",
"seq_delay_details": {"delay_in_days": 3}
}
]
}
)
result = response.json()
print(result)
const API_KEY = 'YOUR_API_KEY';
const response = await fetch(
`https://server.smartlead.ai/api/v1/campaigns/${campaignId}/sequences?api_key=${API_KEY}`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sequences: [
{
id: null,
seq_number: 1,
subject: 'Hello {{first_name}}',
email_body: '<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>',
seq_delay_details: { delay_in_days: 0 }
},
{
id: null,
seq_number: 2,
subject: '',
email_body: '<p>Just following up on my previous email...</p>',
seq_delay_details: { delay_in_days: 3 }
}
]
})
}
);
const result = await response.json();
console.log(result);
Response Codes
Success
Request successful
Bad Request
Invalid request parameters or malformed request body
Unauthorized
Invalid or missing API key. Check your authentication.
Not Found
The requested resource (campaign, lead, email account, etc.) does not exist or you don’t have access to it
Validation Error
Request validation failed. Check parameter types, required fields, and value constraints.
Rate Limit Exceeded
Too many requests. Please slow down and retry after the rate limit resets.
Internal Server Error
Server error occurred. Please try again or contact support if the issue persists.
Service Unavailable
API is temporarily unavailable or under maintenance. Please try again later.
{
"ok": true,
"data": [
{
"id": 1001,
"seq_number": 1,
"subject": "Hello {{first_name}}",
"email_body": "<p>Hi {{first_name}},</p><p>I wanted to reach out...</p>"
},
{
"id": 1002,
"seq_number": 2,
"subject": "Re: Hello {{first_name}}",
"email_body": "<p>Just following up on my previous email...</p>"
}
]
}
{
"message": "Invalid API Key"
}
{
"error": "Resource not found"
}
{
"error": "Invalid parameters provided"
}
Personalization Variables
Use these in subject and body:{{first_name}},{{last_name}}{{company_name}},{{website}}{{location}},{{linkedin_profile}}- Any custom field:
{{job_title}},{{industry}}, etc.
Sequence Best Practices
Keep first email under 125 words for best response rates
Wait 3-5 days between follow-ups - don’t be too aggressive
Each email should provide new value, not just “checking in”
