lemlist

TotalClaw 作者 totalclaw

官方 Lemlist API 集成,用于销售自动化和多渠道推广。 当用户想要执行以下操作时,请使用此技能: - 管理活动(创建、列出、暂停、开始、获取统计数据) - 添加、更新或删除营销活动中的潜在客户 - 通过电子邮件、LinkedIn、WhatsApp 或短信通过收件箱发送消息 - 设置和管理活动活动的网络钩子 - 配置营销活动发送时间表 - 管理取消订阅(电子邮件和域名) - 导出营销活动数据(潜在客户、活动、联系人) - 使用额外数据丰富潜在客户 - 控制 Lemwarm 电子邮件升温 - 使用序列和步骤 - 管理收件箱标签和对话 示例:“列出我的 lemlist 营销活动”、“向我的营销活动添加潜在客户”、“暂停我的营销活动”、 “显示营销活动统计信息”、“设置用于打开电子邮件的网络钩子”、“导出我的潜在客户”

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~micktaiwan-lemlist-official
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~micktaiwan-lemlist-official/file -o micktaiwan-lemlist-official.md
## 概述(中文)

官方 Lemlist API 集成,用于销售自动化和多渠道推广。
当用户想要执行以下操作时,请使用此技能:
- 管理活动(创建、列出、暂停、开始、获取统计数据)
- 添加、更新或删除营销活动中的潜在客户
- 通过电子邮件、LinkedIn、WhatsApp 或短信通过收件箱发送消息
- 设置和管理活动活动的网络钩子
- 配置营销活动发送时间表
- 管理取消订阅(电子邮件和域名)
- 导出营销活动数据(潜在客户、活动、联系人)
- 使用额外数据丰富潜在客户
- 控制 Lemwarm 电子邮件升温
- 使用序列和步骤
- 管理收件箱标签和对话
示例:“列出我的 lemlist 营销活动”、“向我的营销活动添加潜在客户”、“暂停我的营销活动”、
“显示营销活动统计信息”、“设置用于打开电子邮件的网络钩子”、“导出我的潜在客户”

## 原文

# 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](https://app.lemlist.com)
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`:

```json
{
  "skills": {
    "entries": {
      "lemlist": {
        "apiKey": "your-lemlist-api-key"
      }
    }
  }
}
```

Alternative explicit format:

```json
{
  "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:

```json
{
  "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:

```python
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")`, 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 deletion** — `DELETE /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