lemlist_campaign
Manage campaigns: create, configure, pause, duplicate, validate,
report, export. oto_guide op=read slug="lemlist-playbook": build order, where each id comes from, and the doc↔API gaps.
Nothing here sends by itself — but a created or duplicated campaign is
born RUNNING (its status reads "draft"): op="pause" is the switch.
Putting messages on the wire is lemlist_campaign_start (hidden by
default — enable it with oto_enable_tool lemlist_campaign_start).
Args by op:
create:name(required), optionaltimezone(IANA, drives the auto-created schedule; server defaultEurope/Paris). Returns the campaign withsequenceIdandscheduleIds— the two idslemlist_sequenceandlemlist_scheduleneed.settingsis REFUSED here (the endpoint takes name + timezone only) — chainupdateon the returned id rather than believe a setting landed. ⚠️ The campaign is created in state RUNNING, not draft (itsstatusreads "draft" only because it has no step and no lead yet). It sends nothing while the review gate holds, but chainop="pause"if you want to build it with the switch off.update:campaign_id+name,sender_user_ids(usr_…, the senders) and/orsettings(raw PATCH body:stopOnEmailReplied,stopOnMeetingBooked,stopOnLinkClicked,disableTrackOpen,disableTrackClick,disableTrackReply,tracking,onReplied,aiFeatures…). Only the keys sent change.pause:campaign_id. THE off switch — a campaign created here is already running. Stops it advancing; already-scheduled leads are NOT recalled. Errors if the campaign is not running.duplicate:campaign_id+ optionalname. Copies sequence, steps, schedules and AI templates into a new campaign (CRM settings excluded). ⚠️ Likecreate, the copy runs (staterunning inreports) although itsstatusreads "draft": chainop="pause"to hold it.statutes:campaign_id. The validation the lemlist UI runs — read it BEFORE starting:level3 blocks the launch (no sender, broken DNS), 2 warns (daily limit, missing schedule), 1 informs.reports:campaign_ids. One row per campaign in operator vocabulary (emailsSent,emailsOpened,emailsReplied,senderNames,state) — the shape for comparing campaigns.batch_stats:campaign_ids(≤ 100) + optionalstart_date/end_date(defaults to the whole life),channels(email/linkedin/others),send_user(usr_…|sender@email),ab_selected(A/B). Same counters aslemlist_get_campaign_stats, in one call.export_start:campaign_id. Opens an ASYNCHRONOUS stats export and returns its id; pollexport_status(campaign_id+export_id), or ask to be notified withexport_email(+email).export_leads:campaign_id+ optionalstate(defaults toall; lemlist's own default filters EVERYTHING out and returns an empty list that reads as "no leads"),format(csv, the API default, orjson). Returns the leads directly — the synchronous cousin of the export above.
autoReview/autoReviewConditions are not settable here: they make
every added lead send immediately, which would turn lemlist_create_lead
into a send path. They live in lemlist_campaign_auto_review, hidden by
default — a switch that arms sending should take a deliberate gesture,
not ride along in a settings dict.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"op": "<op>"
},
"name": "lemlist_campaign"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| full | No | ||
| name | No | ||
| No | |||
| state | No | ||
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| format | No | ||
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| channels | No | ||
| end_date | No | ||
| settings | No | ||
| timezone | No | ||
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| export_id | No | ||
| send_user | No | ||
| start_date | No | ||
| ab_selected | No | ||
| campaign_id | No | ||
| campaign_ids | No | ||
| sender_user_ids | No |