Skip to main content
POST
Create a campaign

Authorizations

Authorization
string
header
required

API key from Settings → API. Send it as Authorization: Bearer .

Headers

x-impersonate-user-id
string

ID of an organization member to act on behalf of. The API key user must be the owner of the organization and the target user must belong to the same organization.

Body

application/json
name
string
required

Campaign name

Example:

"Q1 Sales Campaign"

steps
object[]
required

Campaign steps, executed in order. Valid types: invitation, invitationNote, message, voiceMessage, visitProfile, likePosts, email. Ordering rules: at most one Connection Request step (invitation or invitationNote); an invitation cannot come after a message or voiceMessage step. Common fields: delayAfterLastStep in days (integer >= 1, default 2). stepNumber is assigned automatically from the array order and unknown fields are ignored. message and email steps take a messageMode: 'ai' (content is generated by AI for each contact, the default when no content is provided) or 'same' (the provided content is sent as-is, supports the [FirstName], [LastName], [Company], [JobTitle], [SenderFirstName], [SenderName], [SenderFullName] and [SenderCompany] variables; an empty value removes the tag). In 'same' mode, message is required (max 1900 chars for LinkedIn messages) and email steps also require subject. invitationNote requires note (max 180 chars, 280 with a Sales Navigator seat); voiceMessage requires url to the audio file; likePosts accepts numberOfPosts (1-3, default 1); visitProfile and invitation need no extra fields.

Example:
listIds
string[]
required

IDs of the lists used as lead source. At least one list is required.

Example:
linkedinSeatId
number

LinkedIn seat sending the LinkedIn steps. Required when the campaign contains any LinkedIn step; not allowed on email-only campaigns.

Example:

1

emailSeatIds
string[]

Email seats sending the email steps. Required when the campaign contains email steps. Multiple seats (up to 100) are only allowed on email-only campaigns. Use GET /v1/email-seat to list your email seats and their IDs.

Example:
active
boolean
default:true

Whether the campaign starts active. Once active, the campaign starts the outreach automatically on a daily basis; the launch hours can be configured in the LinkedIn seat settings.

Example:

true

language
string

Campaign language

Example:

"en-US"

Response

Campaign created

id
number
required

Unique identifier for the campaign

name
string
required

Name of the campaign

userId
number
required

User ID who owns this campaign

active
boolean
default:true
required

Whether the campaign is active

excludeFirstDegreeFromCampaigns
boolean
default:true
required

Exclude first degree connections from campaigns

splitLinkedinMessagesIntoConversation
boolean
default:false
required

When enabled, LinkedIn message steps may be sent as multiple shorter messages when it feels natural

isManual
boolean
default:false
required

Whether the campaign is manual

createdAt
string<date-time>
required

Creation timestamp

updatedAt
string<date-time>
required

Last update timestamp

steps
object[]

Campaign steps

skipInvitationAfterDays
number

Number of days after which a pending invitation is skipped and only email steps are sent

language
string | null

Campaign language

tone
enum<string>

Campaign tone

Available options:
professional,
direct,
conversational
goal
enum<string>

Campaign goal

Available options:
conversations,
demos
linkedinSeatId
number

LinkedIn seat ID for this campaign