lemlist Campaigns API
Campaign CRUD and lifecycle - create, update, duplicate, start, pause, validation statutes, stats, reports and asynchronous exports.
Campaign CRUD and lifecycle - create, update, duplicate, start, pause, validation statutes, stats, reports and asynchronous exports.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/lemlist-campaigns-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Lemlist Campaigns API
version: 1.0.0
description: 'Operations tagged Campaigns across 3 of this provider''s published API definitions: lemlist-openapi-v1-legacy.json, lemlist-openapi-v2.json, lemlist-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.lemlist.com/api
tags:
- name: Campaigns
paths:
/campaigns:
parameters: []
get:
summary: Retrieve All Campaigns
tags:
- Campaigns
parameters:
- name: offset
in: query
required: false
description: (Optional) Offset from the start. For pagination.
example: '24'
schema:
type: integer
- name: limit
in: query
required: false
description: (Optional) Number of campaigns to retrieve. 100 per default ( and 100 max ).
example: '2'
schema:
type: integer
- name: version
in: query
required: false
description: (Optional) Set v2 to use last version
example: v2
schema:
type: string
- name: page
in: query
required: false
description: (Optional) Page to show
example: '1'
schema:
type: integer
- name: sortBy
in: query
required: false
description: '(Optional): The field by which to sort the schedules. Currently, only "createdAt" is supported'
example: createdAt
schema:
type: string
- name: sortOrder
in: query
required: false
description: '(Optional): The sort direction. Use "desc" for descending order; any other value (or omission) will sort in ascending order'
example: desc
schema:
type: string
- name: status
in: query
required: false
description: '(Optional): the campaign status. Can be the following values : running, draft, archived, ended, paused, errors. Beware: a campaign can be in multiple status at one time (eg a paused campaign with errors)'
example: running
schema:
type: string
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: array
items:
type: object
properties:
_id:
type: string
name:
type: string
labels:
type: array
items:
type: string
createdAt:
type: string
format: date-time
createdBy:
type: string
status:
type: string
example:
- _id: cam_A1B2C3D4E5F6G7H8I9
name: Insights Outreach 2024
labels:
- Insightful
createdAt: '2024-02-29T11:00:11.293Z'
createdBy: usr_T3dhQkG8xzCv4MU1e
status: running
- _id: cam_K9L8M7N6O5P4Q3R2S1
name: Discover Solutions Campaign
labels:
- Solutions
- Future-Ready
createdAt: '2024-02-29T11:00:11.293Z'
createdBy: usr_T3dhQkG8xzCv4MU1e
archived: true
status: ended
isEnded: true
- _id: cam_M5N4O3P2Q1R9S8T7U6
name: Future Innovations Outreach
createdAt: '2024-02-15T09:00:15.272Z'
createdBy: usr_T3dhQkG8xzCv4MU1e
status: paused
- _id: cam_G6H7I8J9K0L1M2N3O4
name: Insightful Solutions Drive
createdAt: '2024-01-25T13:00:11.293Z'
createdBy: usr_T3dhQkG8xzCv4MU1e
labels:
- Insightful
- Solutions
status: draft
hasError: true
post:
summary: Create a new campaign
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
_id:
type: string
sequenceId:
type: string
scheduleIds:
type: array
items:
type: string
teamId:
type: string
createdBy:
type: string
createdAt:
type: string
format: date-time
state:
type: string
scannedCount:
type: integer
reviewedCount:
type: integer
inSequenceLeadCount:
type: integer
variableKeys:
type: array
items: {}
senders:
type: array
items: {}
sendUsers:
type: array
items: {}
displayedVariableKeys:
type: array
items:
type: string
emoji:
type: string
stopOnEmailReplied:
type: boolean
crmOpportunitiesOnTask:
type: boolean
unsubscribe:
type: string
name:
type: string
crm:
type: string
crmUserId:
type: string
example:
_id: cam_WN3M22c3gDs4eQDXN
sequenceId: seq_hPj7N88tCgpFYgtnj
scheduleIds:
- skd_isFGZkjSsvJZ7CfRx
teamId: tea_MtScZ2GexXzHXRdTr
createdBy: usr_XCQktNJNa79X5Tvnh
createdAt: '2025-01-16T13:53:22.726Z'
state: running
scannedCount: 0
reviewedCount: 0
inSequenceLeadCount: 0
variableKeys: []
senders: []
sendUsers: []
displayedVariableKeys:
- companyName
emoji: 🚀
stopOnEmailReplied: true
crmOpportunitiesOnTask: true
unsubscribe: campaign
name: My new campaign
crm: hubspot
crmUserId: usr_BXJcMBSk7pwhdqAL2
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
example:
name: '{{name}}'
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}:
parameters:
- name: campaignId
in: path
required: true
example: '{{campaignId}}'
schema:
type: string
get:
summary: Retrieve One Campaigns
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
example: null
patch:
summary: Update campaign configuration
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
name:
type: string
stopOnEmailReplied:
type: boolean
example:
name: New campaign name
stopOnEmailReplied: false
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
stopOnEmailReplied:
type: string
stopOnMeetingBooked:
type: string
stopOnLinkClicked:
type: string
leadsPausedByInterest:
type: string
opportunityReplied:
type: string
opportunityClicked:
type: string
autoLeadInterest:
type: string
disableTrackOpen:
type: string
disableTrackClick:
type: string
disableTrackReply:
type: string
stopOnLinkClickedFilter:
type: string
example:
name: '{{name}}'
stopOnEmailReplied: '{{stopOnEmailReplied}}'
stopOnMeetingBooked: '{{stopOnMeetingBooked}}'
stopOnLinkClicked: '{{stopOnLinkClicked}}'
leadsPausedByInterest: '{{leadsPausedByInterest}}'
opportunityReplied: '{{opportunityReplied}}'
opportunityClicked: '{{opportunityClicked}}'
autoLeadInterest: '{{nautoLeadInterestame}}'
disableTrackOpen: '{{disableTrackOpen}}'
disableTrackClick: '{{disableTrackClick}}'
disableTrackReply: '{{disableTrackReply}}'
stopOnLinkClickedFilter: '{{stopOnLinkClickedFilter}}'
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}/pause:
parameters:
- name: campaignId
in: path
required: true
example: '{{campaignId}}'
schema:
type: string
post:
summary: Pause a campaign
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
_id:
type: string
state:
type: string
example:
_id: cam_A1B2C3D4E5F6G7H8I9
state: paused
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}/export/start:
parameters:
- name: campaignId
in: path
required: true
example: '{{campaignId}}'
schema:
type: string
get:
summary: Start an Export Campaign Stats
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
_id:
type: string
id:
type: string
teamId:
type: string
campaignId:
type: string
campaignName:
type: string
status:
type: string
startedAt:
type: string
format: date-time
progressIndex:
type: integer
progressTime:
type: integer
progressLastStepDuration:
type: integer
progressType:
type: string
progress:
type: integer
total:
type: integer
example:
_id: axp_7dKLTwqpjxzR5vh2n
id: axp_7dKLTwqpjxzR5vh2n
teamId: tea_c123fg5h8ijKL9noP
campaignId: cam_A1B2C3D4E5F6G7H8I9
campaignName: Insights Outreach 2024
status: pending
startedAt: '2024-07-09T13:43:52.124Z'
progressIndex: 0
progressTime: 1720532632124
progressLastStepDuration: 0
progressType: starting
progress: 0
total: 0
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}/export/{exportId}/status:
parameters:
- name: campaignId
in: path
required: true
example: '{{campaignId}}'
schema:
type: string
- name: exportId
in: path
required: true
example: '{{exportId}}'
schema:
type: string
get:
summary: Get Status Of Campaign Export
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Done
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
status:
type: object
properties:
id:
type: string
teamId:
type: string
campaignId:
type: string
campaignName:
type: string
status:
type: string
startedAt:
type: string
format: date-time
endedAt:
type: string
format: date-time
progressIndex:
type: integer
progressTime:
type: integer
progressLastStepDuration:
type: integer
progressType:
type: string
progress:
type: integer
total:
type: integer
url:
type: string
format: uri
example:
ok: true
status:
id: axp_7dKLTwqpjxzR5vh2n
teamId: tea_c123fg5h8ijKL9noP
campaignId: cam_A1B2C3D4E5F6G7H8I9
campaignName: Insights Outreach 2024
status: done
startedAt: '2020-01-01T00:00:00.000Z'
endedAt: '2020-01-01T00:00:00.000Z'
progressIndex: 6
progressTime: 1639138959979
progressLastStepDuration: 476
progressType: done
progress: 0
total: 0
url: https://api.lemlist.com/api/files/exports/fil_axp_7dKLTwqpjxzR5vh2n_insights_outreach_2024.csv
'404':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Not found
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
message:
type: string
example:
ok: false
message: Export with id axp_8bALQxunkwwC3yc9p not found
servers:
- url: https://api.lemlist.com/api
/campaigns/reports:
parameters: []
get:
summary: Reports
tags:
- Campaigns
parameters:
- name: campaignIds
in: query
required: false
example: '{{campaignId}},{{campaignId}}'
schema:
type: string
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
status:
type: object
properties:
id:
type: string
teamId:
type: string
campaignId:
type: string
campaignName:
type: string
status:
type: string
startedAt:
type: string
format: date-time
endedAt:
type: string
format: date-time
progressIndex:
type: integer
progressTime:
type: integer
progressLastStepDuration:
type: integer
progressType:
type: string
progress:
type: integer
total:
type: integer
url:
type: string
format: uri
example:
ok: true
status:
id: axp_7dKLTwqpjxzR5vh2n
teamId: tea_c123fg5h8ijKL9noP
campaignId: cam_A1B2C3D4E5F6G7H8I9
campaignName: Insights Outreach 2024
status: done
startedAt: '2020-01-01T00:00:00.000Z'
endedAt: '2020-01-01T00:00:00.000Z'
progressIndex: 6
progressTime: 1639138959979
progressLastStepDuration: 476
progressType: done
progress: 0
total: 0
url: https://api.lemlist.com/api/files/exports/fil_axp_7dKLTwqpjxzR5vh2n_insights_outreach_2024.csv
'404':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Not found
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
message:
type: string
example:
ok: false
message: Export with id axp_8bALQxunkwwC3yc9p not found
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}/export/{exportId}/email/{email}:
parameters:
- name: campaignId
in: path
required: true
example: '{{campaignId}}'
schema:
type: string
- name: exportId
in: path
required: true
example: '{{exportId}}'
schema:
type: string
- name: email
in: path
required: true
example: '{{email}}'
schema:
type: string
put:
summary: Export Campaign Send Status By Email
tags:
- Campaigns
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
status:
type: object
properties:
_id:
type: string
id:
type: string
teamId:
type: string
campaignId:
type: string
campaignName:
type: string
status:
type: string
startedAt:
type: string
format: date-time
progressIndex:
type: integer
progressTime:
type: integer
progressLastStepDuration:
type: integer
progressType:
type: string
progress:
type: integer
total:
type: integer
fileSize:
type: integer
endedAt:
type: string
format: date-time
url:
type: string
format: uri
email:
type: string
format: email
example:
ok: true
status:
_id: axp_7dKLTwqpjxzR5vh2n
id: axp_7dKLTwqpjxzR5vh2n
teamId: tea_c123fg5h8ijKL9noP
campaignId: cam_A1B2C3D4E5F6G7H8I9
campaignName: Insights Outreach 2024
status: done
startedAt: '2024-07-11T09:49:15.278Z'
progressIndex: 6
progressTime: 1720691355497
progressLastStepDuration: 0
progressType: done
progress: 0
total: 0
fileSize: 654
endedAt: '2024-07-11T09:49:15.497Z'
url: https://api.lemlist.com/api/files/exports/fil_axp_7dKLTwqpjxzR5vh2n_insights_outreach_2024.csv
email: emily.johnson@example.com
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}/export/leads:
parameters:
- name: campaignId
in: path
required: true
example: '{{campaignId}}'
schema:
type: string
get:
summary: Export Campaign Leads
tags:
- Campaigns
parameters:
- name: state
in: query
required: false
description: Filter to export only the specified lead's last states; 'all' will export all states.
example: all
schema:
type: string
- name: format
in: query
required: false
description: '(Optional) Output format: json or csv'
example: json
schema:
type: string
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Export Campaign Leads
servers:
- url: https://api.lemlist.com/api
/campaigns/{campaignId}/start:
parameters:
- name: campaignId
in: path
required: true
description: The unique identifier of the campaign
example: cam_A1B2C3D4E5F6G7H8I9
schema:
type: string
post:
summary: Start Campaign
tags:
- Campaigns
parameters: []
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
_id:
type: string
state:
type: string
example:
_id: cam_A1B2C3D4E5F6G7H8I9
state: running
'400':
description: Bad team
content:
text/plain:
example: Bad team
'401':
description: Unauthorized
'404':
description: Campaign not found
content:
text/plain:
example: Campaign not found
security:
- basicAuth: []
servers:
- url: https://api.lemlist.com/api
/v2/campaigns/{campaignId}/stats:
get:
summary: Get Campaign Stats
tags:
- Campaigns
description: Retrieve detailed statistics for a specific campaign, with filtering options by date, user, A/B testing, and communication channels.
parameters:
- name: campaignId
in: path
required: true
description: Unique campaign ID
example: cam_123
schema:
type: string
- name: startDate
in: query
required: true
description: Start date in ISO 8601 format
example: '2024-01-07T22:00:00.000Z'
schema:
type: string
format: date-time
- name: endDate
in: query
required: true
description: End date in ISO 8601 format
example: '2025-07-10T21:59:59.999Z'
schema:
type: string
format: date-time
- name: sendUser
in: query
required: false
description: 'Filter stats by send user. Format: `sendUserId|sendUserEmail`. The sendUserId should begin with ''usr_'' and the sendUserEmail should be a valid sender email. If the param is specified, both sendUserId and sendUserEmail are mandatory.'
example: usr_OcIHizJyIeaDxicQP|email@example.com
schema:
type: string
- name: ABSelected
in: query
required: false
description: A/B version filter
example: A
schema:
type: string
enum:
- A
- B
- name: channels
in: query
required: false
description: 'JSON array of channels to include. Possible values: ''email'', ''linkedin'', ''others'''
example: '["others", "linkedin", "email"]'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
nbLeads:
type: integer
description: Total number of leads in the campaign
nbLeadsLaunched:
type: integer
description: Number of leads launched in the campaign
nbLeadsReached:
type: integer
description: Number of leads that were successfully reached
nbLeadsOpened:
type: integer
description: Number of leads that opened messages
nbLeadsInteracted:
type: integer
description: Number of leads that interacted with messages (clicked, replied)
nbLeadsAnswered:
type: integer
description: Number of leads that answered
nbLeadsInterested:
type: integer
description: Number of leads marked as interested
nbLeadsNotInterested:
type: integer
description: Number of leads marked as not interested
nbLeadsUnsubscribed:
type: integer
description: Number of leads that unsubscribed
nbLeadsInterrupted:
type: integer
description: Number of leads with interrupted sequences
messagesSent:
type: integer
description: Total number of messages sent
messagesNotSent:
type: integer
description: Number of messages that failed to send
messagesBounced:
type: integer
description: Number of messages that bounced
delivered:
type: integer
description: Number of messages successfully delivered
opened:
type: integer
description: Number of messages opened
clicked:
type: integer
description: Number of messages with clicks
replied:
type: integer
description: Number of messages that received replies
invitationAccepted:
type: integer
description: Number of LinkedIn invitations accepted
meetingBooked:
type: integer
description: Number of meetings booked
steps:
type: array
description: Detailed metrics for each step in the campaign
items:
type: object
properties:
index:
type: integer
description: Step index in the sequence
sequenceId:
type: string
description: ID of the sequence
sequenceStep:
type: integer
description: Step number within the sequence
abTest:
type: string
description: A/B test variant (if applicable)
taskType:
type: string
description: Type of task
enum:
- email
- linkedinVisit
- linkedinInvite
- linkedinSend
- phone
- manual
- conditional
conditionLabel:
type: string
description: Label
# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lemlist/refs/heads/main/openapi/lemlist-campaigns-api-openapi.yml