Skip to main content
POST
/
sequences
/
{sequenceId}
/
steps
curl --request POST \
  --url https://api.lemlist.com/api/sequences/{sequenceId}/steps \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '{
  "type": "email",
  "subject": "{{firstName}}, quick question about {{companyName}}",
  "message": "<p>Hi {{firstName}},</p><p>I noticed {{companyName}} is working on improving customer engagement. Would you be interested in discussing how we can help?</p><p>Best regards,<br>{{senderName}}</p>",
  "delay": 1,
  "index": 2
}'
{
  "_id": "stp_Z2539g5BB4qCoZBgf",
  "type": "linkedinInvite",
  "delay": 2,
  "emailTemplateId": "etp_LWuaE5JG4Bm4riPf5",
  "message": "Hello, I would like..."
}
This endpoint uses the Sequence object.
This endpoint creates a step or condition within a sequence. If you want to get the main sequence or a list of sequences for a campaign, you can call /api/campaigns/{campaignId}/sequences.

Adding Steps

To add a new step to a sequence, call the API with the sequence ID in the parameters and the step details in the request body. For example, adding a LinkedIn invite step:
{
    "type": "linkedinInvite",
    "message": "Invite message...."
}

Adding Conditions

To add a condition to a sequence, you must provide the conditionKey and type conditional along with the required fields. The API will return a condition with an array of condition sequences, where you can call the same API again to add steps to those sequences. For example, creating a LinkedIn invite condition:
{
    "type": "conditional",
    "conditionKey": "linkedinInviteAccepted",
    "delayType": "waitUntil"
}
This will return:
{
    "_id": "stp_Ae93hiemDkypHLys2",
    "type": "conditional",
    "conditions": [
        {
            "sequenceId": "seq_jacL5GNH3YpNnuNQ2",
            "label": "Accepted invite",
            "key": "linkedinInviteAccepted",
            "delay": 1,
            "delayType": "waitUntil"
        },
        {
            "sequenceId": "seq_xzrGLxhZwoo5oxukc",
            "fallback": true
        }
    ]
}
Then you can call /api/sequences/seq_jacL5GNH3YpNnuNQ2/steps to add a send step if the invite is accepted:
{
    "type": "linkedinSend",
    "message": "Hello, ..."
}

Step Types and Required Fields

The table below summarizes the required and optional fields for each step type. Note that all step requests must include a common type field.
Step TypeRequired FieldsOptional Fields
emailsubject, messageindex, delay
manualtitlemessage, index, delay
phone-message, index, delay
apimethod, urlindex, delay
linkedinVisit-index, delay
linkedinInvite-message, index, delay
linkedinSendmessagealtMessage, index, delay
sendToAnotherCampaigncampaignIdindex, delay
conditionalconditionKey, delayType (and delay when delayType is within)index
whatsappMessagemessageindex, delay
In conditional steps, if the delayType is not "within", the delay field is not required.

All Request Body Fields

FieldDescription
type (String, Required)The type of step to create. Allowed values: email, manual, phone, api, linkedinVisit, linkedinInvite, linkedinSend, sendToAnotherCampaign, conditional, whatsappMessage
index (Integer, Optional)The position within the sequence to insert the new step. Must be an integer ≥ -1. If omitted or if the index is greater than the number of steps, the new step is added to the end
delay (Integer, Optional)The delay (in seconds) before executing the step. Defaults to 0 for the first step and to 1 for subsequent steps (except for certain conditional configurations)
subject (String, Conditional)The email subject. Required for steps of type email
message (String, Conditional)Content of the email or message. Used for email, linkedinInvite, and linkedinSend step types, or the note of manual and phone step types
altMessage (String, Conditional)An alternate message for steps of type linkedinSend
title (String, Conditional)A title or label used in manual steps
method (String, Conditional)The HTTP method to use for API steps. Allowed values: GET, POST, PUT, DELETE, PATCH
url (String, Conditional)The URL of the API endpoint to call. Must be a valid URL (starting with http:// or https://)
conditionKey (String, Conditional)For conditional steps only. Defines the condition key. Allowed values: emailsOpened, emailsClicked, emailsUnsubscribed, meetingBooked, linkedinInviteAccepted, hasWhatsappAccount
delayType (String, Conditional)For conditional steps only. Specifies the delay type. Allowed values: within, waitUntil
campaignId (String, Conditional)For steps of type sendToAnotherCampaign only. The target campaign ID to which a lead should be sent. The specified campaign must exist in the team and not be archived

Authorizations

Authorization
string
header
required

Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.

Path Parameters

sequenceId
string
required

The unique identifier of the sequence

Body

application/json
type
enum<string>

The type of step to create

Available options:
email,
manual,
phone,
api,
linkedinVisit,
linkedinInvite,
linkedinSend,
sendToAnotherCampaign,
conditional,
whatsappMessage
index
integer

The position within the sequence to insert the new step (≥ -1). If omitted or greater than the number of steps, the new step is added to the end

delay
integer

Delay in days before executing this step. Defaults to 0 for the first step and 1 for subsequent steps

subject
string

Email subject line (required for email steps)

message
string

Content of the email or message (used for email, linkedinInvite, linkedinSend, manual, phone, whatsappMessage steps)

altMessage
string

Alternate message for linkedinSend steps

title
string

Title or label for manual steps

method
enum<string>

HTTP method for API steps

Available options:
GET,
POST,
PUT,
DELETE,
PATCH
url
string

URL of the API endpoint to call (required for api steps). Must start with http:// or https://

conditionKey
enum<string>

Condition key for conditional steps

Available options:
emailsOpened,
emailsClicked,
emailsUnsubscribed,
meetingBooked,
linkedinInviteAccepted,
hasWhatsappAccount
delayType
enum<string>

Delay type for conditional steps

Available options:
within,
waitUntil
campaignId
string

Target campaign ID for sendToAnotherCampaign steps. The campaign must exist and not be archived

Response

Success

_id
string
type
string
delay
integer
emailTemplateId
string
message
string