Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

lemlist official

v1.0.1

Official Lemlist API integration for sales automation and multichannel outreach. Use this skill when users want to: - Manage campaigns (create, list, pause,...

0· 640· 2 versions· 0 current· 0 all-time· Updated 7h ago· MIT-0
byMickael Faivre-Maçon@micktaiwan

Install

openclaw skills install lemlist-official

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

  1. Log in to Lemlist
  2. Go to Settings > Integrations > API Keys
  3. 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

DomainKey endpoints
TeamGET /team, /team/members, /team/credits, /team/senders
CampaignsGET/POST /campaigns, PATCH /campaigns/:id, POST pause/start
SequencesGET /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 variablesPOST/PATCH/DELETE /leads/:id/variables
ActivitiesGET /activities (filter: campaignId, type)
SchedulesCRUD /schedules, POST /campaigns/:id/schedules
UnsubscribesGET /unsubscribes, POST/DELETE /unsubscribes/:value
WebhooksGET/POST/DELETE /hooks (max 200/team)
InboxGET /inbox, POST email/linkedin/whatsapp/sms
Inbox labelsCRUD /inbox/labels, assign via /conversations/labels/:contactId
CompaniesGET /companies, /companies/:id/notes
ContactsGET /contacts, /contacts/:idOrEmail
ExportsGET /campaigns/:id/export (sync), /export/start (async)
EnrichmentPOST /leads/:id/enrich, GET /enrich/:id, POST /enrich (batch)
TasksGET/POST/PATCH /tasks, POST /tasks/ignore
LemwarmPOST 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"), not base64("key")
  • No campaign deletion — only pause via API
  • Email encoding@%40 in URL path params
  • Webhook auto-deletion — 404/410 response silently removes the webhook
  • No rate limiting — the public API does not throttle
  • Variable deletionDELETE /leads/:id/variables deletes vars, not the lead
  • Sync vs async export/export returns CSV directly, /export/start + poll for large volumes
  • Limits — 100 items/page, 200 webhooks/team, 100 API keys/team

Version tags

latestvk970ee3d4kmg2dn345gg4fs2x581kcj4