Pipory
Node reference

lemlist

lemlist node reference - all 127 operations, the credential it needs, and a worked example.

lemlist API (Email Marketing). 127 operations: leads (add, update, list, get, launch, pause, resume, mark interested, custom variables, CRM import); campaigns (create, start, pause, duplicate, stats, reports, export); sequences, steps and A/B tests; the shared inbox (send email, LinkedIn and WhatsApp, drafts, labels); CRM contacts, lists and companies; tasks; sending schedules; enrichment; the people and companies prospecting database; signal agents; lemwarm and deliverability alerts; unsubscribes; team, users and fields; activities and webhooks.

Credential: lemlist API key - see Credentials.

Permissions

lemlist has no scope system and no OAuth flow. Its OpenAPI spec declares exactly ONE security scheme - HTTP basicAuth - applied globally with an empty scope array, and not a single one of the 140 operations attaches a scope, permission or capability to it. The credential is a workspace API key minted at app.lemlist.com/settings/integrations and sent as Basic auth with an EMPTY login and the key as the password (the leading colon in --user ":YourApiKey" is the whole trick). It carries whatever the workspace user behind it can already do, so every operation below either works or the credential does not - a refusal is never a missing checkbox. A 401 or 403 means the key is wrong, revoked, or belongs to a different workspace than the campaign, lead or contact being named; limit the blast radius by issuing it under a user with a restricted workspace role. Two gates that do exist are not per-operation: enrichment spends team CREDITS (check them with Get remaining credits) rather than needing a grant, and every route shares one rate limit of 20 requests per 2 seconds per key, which answers 429 with Retry-After.

Operations (127)

Leads

OperationWhat it does
addLeadAdd lead to campaign
updateLeadUpdate lead in campaign
deleteLeadDelete or unsubscribe lead by ID
unsubscribeLeadFromCampaignUnsubscribe lead from campaign by email
getCampaignLeadsList leads in a campaign
getLeadGet lead by ID or email
getLeadByEmailGet lead by email
launchLeadLaunch (approve) a lead awaiting review
pauseLeadPause lead
resumeLeadResume paused lead
markLeadInterestedMark lead as interested
markLeadNotInterestedMark lead as not interested
markLeadInterestedInCampaignMark lead interested (in a campaign)
markLeadNotInterestedInCampaignMark lead not interested (in a campaign)
addLeadVariablesAdd custom variables on a lead
updateLeadVariablesUpdate custom variables on a lead
eraseLeadVariablesErase custom variables on a lead
importLeadsFromCrmImport leads from a CRM filter
getCrmFiltersList CRM filters

Campaigns

OperationWhat it does
listCampaignsList campaigns
createCampaignCreate campaign
getCampaignGet campaign
updateCampaignUpdate campaign settings
startCampaignStart campaign
pauseCampaignPause campaign
duplicateCampaignDuplicate campaign
getCampaignStatutesGet campaign lead-status breakdown
getCampaignStatsGet campaign stats
getBatchCampaignStatsGet stats for several campaigns
getCampaignReportsGet campaign reports
exportCampaignLeadsExport campaign leads

Sequences & steps

OperationWhat it does
getCampaignSequencesList a campaign's sequences
addSequenceStepAdd step to sequence
updateSequenceStepUpdate sequence step
deleteSequenceStepDelete sequence step
createAbTestVariantCreate A/B test variant
getAbTestVariantGet A/B test variant
updateAbTestVariantUpdate A/B test variant
deleteAbTestVariantDelete A/B test variant
selectAbTestWinnerSelect A/B test winner

Inbox

OperationWhat it does
getInboxesList conversations
getContactMessagesGet a contact's messages
sendInboxEmailSend email
sendLinkedinMessageSend LinkedIn message
sendWhatsappMessageSend WhatsApp message

Inbox drafts

OperationWhat it does
listDraftsList drafts for a contact
createDraftCreate draft
getDraftGet draft
updateDraftUpdate draft
deleteDraftDelete draft

Inbox labels

OperationWhat it does
getInboxLabelsList labels
createInboxLabelCreate label
getInboxLabelGet label
attachConversationLabelsAttach labels to a conversation
removeConversationLabelsRemove labels from a conversation

CRM contacts

OperationWhat it does
upsertContactAdd or update contact
getContactsList / search contacts
getContactGet contact
deleteContactDelete contact
getContactListsList contact lists
createContactListCreate contact list
updateContactListEntitiesAdd or remove contacts in a list

CRM companies

OperationWhat it does
getCompaniesList / search companies
upsertCompanyAdd or update company
deleteCompanyDelete company
getCompanyNotesList company notes
createCompanyNoteCreate company note

Tasks

OperationWhat it does
createTaskCreate task
getTasksList tasks
updateTaskUpdate task
ignoreTasksIgnore (dismiss) tasks

Schedules

OperationWhat it does
getSchedulesList schedules
createScheduleCreate schedule
getScheduleGet schedule
updateScheduleUpdate schedule
deleteScheduleDelete schedule
getCampaignSchedulesList a campaign's schedules
associateScheduleWithCampaignAttach schedule to campaign

Enrichment

OperationWhat it does
enrichEnrich data (find / verify email, phone, LinkedIn)
bulkEnrichBulk enrich
enrichLeadEnrich an existing lead
getEnrichmentResultGet enrichment result

Prospecting database

OperationWhat it does
getDatabaseFiltersList database filters
searchPeopleDatabaseSearch people database
searchCompaniesDatabaseSearch companies database

Signal agents

OperationWhat it does
listSignalAgentsList signal agents
createSignalAgentCreate signal agent
updateSignalAgentUpdate signal agent
deleteSignalAgentDelete signal agent
getSignalsGet detected signals
pushExternalSignalsPush external signals
getSignalAgentHistoryGet signal agent config history
listSignalTypesList available signal types
listSignalFiltersList allowed filters for a signal type
autocompleteSignalFilterValuesAutocomplete a filter's values

Deliverability & lemwarm

OperationWhat it does
startLemwarmStart lemwarm on a mailbox
pauseLemwarmPause lemwarm on a mailbox
getLemwarmSettingsGet lemwarm settings
updateLemwarmSettingsUpdate lemwarm settings
listDeliverabilityAlertsList deliverability alerts
createDeliverabilityAlertCreate deliverability alert
getDeliverabilityAlertGet deliverability alert
updateDeliverabilityAlertUpdate deliverability alert
deleteDeliverabilityAlertDelete deliverability alert

Unsubscribes

OperationWhat it does
getUnsubscribesList unsubscribes
getUnsubscribeGet unsubscribe by email
addUnsubscribeAdd email or domain to the unsubscribe list
deleteUnsubscribeRe-subscribe an email
listUnsubscribedVariablesList unsubscribed variables
bulkUnsubscribeVariablesBulk unsubscribe variables
getUnsubscribedVariableGet unsubscribed variable
unsubscribeVariableUnsubscribe a variable
resubscribeVariableRe-subscribe a variable
getContactSubscriptionStatusGet a contact's subscription status
unsubscribeContactUnsubscribe a contact
resubscribeContactRe-subscribe a contact

Team, users & fields

OperationWhat it does
getTeamGet team
getTeamSendersList team senders
getTeamCreditsGet remaining credits
getTeamCrmUsersList team CRM users
getUserGet user
getUserChannelsList the user's channels
listFieldsList custom fields

Activities & webhooks

OperationWhat it does
getActivitiesList activities
listWebhooksList webhooks
createWebhookAdd webhook
deleteWebhookDelete webhook

Example

Push a lead into a campaign and let lemlist enrich it

The node's default operation, and the one whose endpoint changed: it now posts to the documented POST /campaigns/{id}/leads/ with the email in the BODY, where it used to use a legacy path form that no longer appears in lemlist's spec at all. Same inputs and same output — but the body form is what makes the enrichment flags below reachable.

Set Operation to addLead, then fill in:

FieldValueNotes
campaignId{{ vars.lemlistCampaignId }}The campaign to add into
email{{ myTrigger.email }}
firstName{{ myTrigger.firstName }}
companyName{{ myTrigger.company }}
deduplicatetrueSkip if the lead already exists anywhere in the account — only reachable via the body form

Sets {{lead.email}} and {{lead._id}}. lemlist allows 20 requests per 2 seconds per key, so a Loop over a list needs a Delay.