lemlist official
Official Lemlist API integration for sales automation and multichannel outreach. Use this skill when users want to: - Manage campaigns (create, list, pause,...
Description
name: lemlist primaryEnv: LEMLIST_API_KEY description: | Official Lemlist API integration for sales automation and multichannel outreach. Use this skill when users want to:
- Manage campaigns (create, list, pause, start, get stats)
- Add, update, or remove leads from campaigns
- Send messages via email, LinkedIn, WhatsApp, or SMS through inbox
- Set up and manage webhooks for campaign events
- Configure schedules for campaign sending
- Manage unsubscribes (emails and domains)
- Export campaign data (leads, activities, contacts)
- Enrich leads with additional data
- Control Lemwarm email warming
- Work with sequences and steps
- Manage inbox labels and conversations Examples: "list my lemlist campaigns", "add a lead to my campaign", "pause my campaign", "show campaign stats", "set up a webhook for email opens", "export my leads"
Lemlist
Interact with the Lemlist API to manage campaigns, leads, sequences, schedules, activities, inbox, webhooks, unsubscribes, exports, and enrichment.
Full endpoint reference: references/api-endpoints.md
Official API docs: https://developer.lemlist.com/api-reference
Setup
1. Get API key
- Log in to Lemlist
- Go to Settings > Integrations > API Keys
- Create a new key — copy immediately, shown only once
2. Configure in OpenClaw
Add to ~/.openclaw/openclaw.json:
{
"skills": {
"entries": {
"lemlist": {
"apiKey": "your-lemlist-api-key"
}
}
}
}
Alternative explicit format:
{
"skills": {
"entries": {
"lemlist": {
"env": {
"LEMLIST_API_KEY": "your-lemlist-api-key"
}
}
}
}
}
3. Verify
Run: Get my Lemlist team info
Docker sandbox
Forward the key explicitly:
{
"agents": {
"defaults": {
"sandbox": {
"docker": {
"env": ["LEMLIST_API_KEY"]
}
}
}
}
}
Authentication
Base URL: https://api.lemlist.com/api
Basic Auth with empty username (colon before key is mandatory):
Authorization: Basic base64(:LEMLIST_API_KEY)
Python Helper
Use this pattern for all API calls:
import urllib.request, os, json, base64
API_KEY = os.environ["LEMLIST_API_KEY"]
AUTH = base64.b64encode(f":{API_KEY}".encode()).decode()
BASE = "https://api.lemlist.com/api"
def api(path, method="GET", data=None):
body = json.dumps(data).encode() if data else None
req = urllib.request.Request(f"{BASE}{path}", data=body, method=method)
req.add_header("Authorization", f"Basic {AUTH}")
req.add_header("User-Agent", "OpenClaw/1.0")
if data:
req.add_header("Content-Type", "application/json")
return json.load(urllib.request.urlopen(req))
Endpoint Summary
| Domain | Key endpoints |
|---|---|
| Team | GET /team, /team/members, /team/credits, /team/senders |
| Campaigns | GET/POST /campaigns, PATCH /campaigns/:id, POST pause/start |
| Sequences | GET /campaigns/:id/sequences, POST/PATCH/DELETE steps |
| Leads (campaign) | GET/POST/PATCH/DELETE /campaigns/:id/leads/:idOrEmail |
| Leads (global) | GET /leads, POST pause/start/interested/notinterested |
| Lead variables | POST/PATCH/DELETE /leads/:id/variables |
| Activities | GET /activities (filter: campaignId, type) |
| Schedules | CRUD /schedules, POST /campaigns/:id/schedules |
| Unsubscribes | GET /unsubscribes, POST/DELETE /unsubscribes/:value |
| Webhooks | GET/POST/DELETE /hooks (max 200/team) |
| Inbox | GET /inbox, POST email/linkedin/whatsapp/sms |
| Inbox labels | CRUD /inbox/labels, assign via /conversations/labels/:contactId |
| Companies | GET /companies, /companies/:id/notes |
| Contacts | GET /contacts, /contacts/:idOrEmail |
| Exports | GET /campaigns/:id/export (sync), /export/start (async) |
| Enrichment | POST /leads/:id/enrich, GET /enrich/:id, POST /enrich (batch) |
| Tasks | GET/POST/PATCH /tasks, POST /tasks/ignore |
| Lemwarm | POST start/pause, GET/PATCH settings via /lemwarm/:mailboxId |
For request/response details, read references/api-endpoints.md.
Pagination
Params: offset (default 0), limit (max 100), page (1-based, overrides offset).
Paginated responses include pagination: { totalRecords, currentPage, nextPage, totalPage }. Some older endpoints return a plain array.
ID Prefixes
cam_ campaign, lea_ lead, skd_ schedule, seq_ sequence, tea_ team, usr_ user.
Gotchas
- User-Agent required — set
User-Agent: OpenClaw/1.0, Python's default UA is blocked by Cloudflare (403) - Basic Auth format — empty username mandatory:
base64(":key"), notbase64("key") - No campaign deletion — only pause via API
- Email encoding —
@→%40in URL path params - Webhook auto-deletion — 404/410 response silently removes the webhook
- No rate limiting — the public API does not throttle
- Variable deletion —
DELETE /leads/:id/variablesdeletes vars, not the lead - Sync vs async export —
/exportreturns CSV directly,/export/start+ poll for large volumes - Limits — 100 items/page, 200 webhooks/team, 100 API keys/team
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!