Smartlead API Reference

Smartlead API

by growthenginenowoslawski · MIT license · ★ 736 on GitHub

Smartlead API cover

Smartlead API endpoint reference and patterns. Use for any Smartlead campaign, lead, email account, analytics, or inbox operation.

---
name: smartlead-api
description: Smartlead API endpoint reference and patterns. Use for any Smartlead campaign, lead, email account, analytics, or inbox operation. Covers auth, rate limiting, and all commonly used endpoints.
user_invocable: false
---

# Smartlead API Reference

## Authentication

All requests use query parameter auth: `?api_key={SMARTLEAD_API_KEY}`

Environment variable: `$SMARTLEAD_API_KEY`

Base URL: `https://server.smartlead.ai/api/v1`

## Rate Limiting

Overview

All requests use query parameter auth: ?api_key={SMARTLEAD_API_KEY}

Manual install (npx, ZIP)
Claude Codenpx skills add growthenginenowoslawski/coldoutboundskills --skill smartlead-api -g -a claude-code
Claude Code (degit)npx degit growthenginenowoslawski/coldoutboundskills/skills/smartlead-api#main ~/.claude/skills/smartlead-api
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.4 KB
Read SKILL.md here
growthenginenowoslawski/main1 file shown
SKILL.md
Show the full text208 lines

Smartlead API Reference

Authentication

All requests use query parameter auth: ?api_key={SMARTLEAD_API_KEY}

Environment variable: $SMARTLEAD_API_KEY

Base URL: https://server.smartlead.ai/api/v1

Rate Limiting

  • Standard plan: 2,000 req/min (33 req/sec)
  • Higher plans: 3,000 req/min (50 req/sec)
  • Retry on 429 and 5xx with exponential backoff
  • For bulk operations, use p-limit or PQueue with 8-15 concurrency

CLI Quick Reference

The smartlead CLI (@smartlead/cli) wraps all API endpoints. Use it for quick lookups:

# Campaigns
smartlead campaigns list
smartlead campaigns get <id>
smartlead campaigns create --name "Campaign Name"

# Leads
smartlead leads list --campaign-id <id>
smartlead leads add --campaign-id <id> --file leads.csv

# Email accounts
smartlead email-accounts list
smartlead email-accounts get <id>

# Analytics
smartlead analytics campaign <id>
smartlead analytics overall

# Master inbox
smartlead inbox replies

API Endpoints

Campaigns
GET  /campaigns/{id}                    — Fetch campaign by ID
POST /campaigns/create                  — Create new campaign
POST /campaigns/{id}/status             — Update status (START, PAUSED, STOP)
     Body: { "status": "START" }
Campaign Email Accounts
GET    /campaigns/{id}/email-accounts   — List accounts assigned to campaign
POST   /campaigns/{id}/email-accounts   — Add accounts to campaign
       Body: { "email_account_ids": [1, 2, 3] }
DELETE /campaigns/{id}/email-accounts   — Remove accounts from campaign
Campaign Sequences
GET  /campaigns/{id}/sequences          — Fetch sequences
POST /campaigns/{id}/sequences          — Save/update sequences
     Body: { "sequences": [{ "seq_number": 1, "seq_delay_details": { "delay_in_days": 0 }, "subject": "...", "email_body": "..." }] }

A/B/C Variants — use seq_variants array inside each sequence:

{
  "sequences": [{
    "seq_number": 1,
    "seq_delay_details": { "delay_in_days": 0 },
    "seq_variants": [
      { "variant_label": "A", "subject": "Subject A", "email_body": "<div>Body A</div>" },
      { "variant_label": "B", "subject": "Subject B", "email_body": "<div>Body B</div>" },
      { "variant_label": "C", "subject": "Subject C", "email_body": "<div>Body C</div>" }
    ]
  }]
}

Note: Do NOT include distribution field — SmartLead splits evenly automatically.

Email body order: content → PS unsub line → %signature% (signature always last)

Campaign Settings & Schedule
POST /campaigns/{id}/settings           — Update settings
     Body: { "track_settings": [...], "stop_lead_settings": "..." }

POST /campaigns/{id}/schedule           — Update schedule
     Body: { "timezone": "US/Eastern", "days_of_the_week": [1,2,3,4,5], "start_hour": "08:00", "end_hour": "17:00", "min_time_btw_emails": 8, "max_new_leads_per_day": 30 }
Leads
GET  /leads/?api_key={key}&email={email}
     — Lookup lead by email address

POST /campaigns/{id}/leads
     — Add leads to campaign (batch up to 100)
     Body: { "lead_list": [{ "email": "...", "first_name": "...", "last_name": "...", "company_name": "...", "custom_fields": { "field1": "value1" } }] }
Analytics
GET /analytics/day-wise-overall-stats
    ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
    — Day-by-day metrics (sent, opened, clicked, replied, bounced)

GET /analytics/day-wise-positive-reply-stats
    ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
    — Day-by-day positive reply counts

GET /analytics/overall-stats-v2
    ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
    — Overall campaign metrics for date range

GET /analytics/campaign/list
    ?api_key={key}
    — List all campaigns with summary stats

GET /campaigns/{id}/analytics
    ?api_key={key}
    — Analytics for specific campaign

GET /campaigns/{id}/analytics-by-date
    ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
    — Campaign analytics for specific date range (sent_count, reply_count)
Email Accounts (Global)
GET  /email-accounts
     ?api_key={key}&offset=0&limit=100
     — List all email accounts (paginated)

GET  /email-accounts/{id}
     ?api_key={key}
     — Get specific email account

POST /email-accounts/save
     — Create/update email account (SMTP details, warmup, etc.)
Master Inbox
POST /master-inbox/inbox-replies
     Body: { "api_key": "...", "offset": 0, "limit": 50, "message_type": "RECEIVED" }
     — Fetch inbox replies with filtering and pagination

Sub-Client / Custom API Key Pattern

  • Normal sub-clients: Pass ?api_key={MAIN_KEY}&client_id={CLIENT_ID} on all requests
  • Custom API key clients: Use the client's own API key directly, no client_id param

TypeScript Pattern

const SMARTLEAD_API = "https://server.smartlead.ai/api/v1";
const API_KEY = process.env.SMARTLEAD_API_KEY;

// GET example
const res = await fetch(`${SMARTLEAD_API}/campaigns/${campaignId}?api_key=${API_KEY}`);
const campaign = await res.json();

// POST example (add leads)
const res = await fetch(`${SMARTLEAD_API}/campaigns/${campaignId}/leads?api_key=${API_KEY}`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ lead_list: leads.slice(0, 100) }),
});

Performance tip: cache the email-accounts list

If you hit /email-accounts more than a few times per script, paginate once at the start and keep the result in memory. Smartlead's pagination returns 100 per page — for accounts with thousands of inboxes, a full walk takes 30+ seconds.

For persistent caching across scripts, write the list to a local JSON file and refresh on a timer (e.g. every hour). The /smartlead-inbox-manager skill has scripts that implement this pattern.


What to do next

This is a reference skill — no direct next step. Used by all skills that interact with Smartlead (/smartlead-inbox-manager, /smartlead-campaign-upload-public, /email-deliverability-audit, /positive-reply-scoring, /deliverability-incident-response, etc.).

Return to the skill that sent you here.

  • Every skill that touches Smartlead uses this reference.
1---
2name: smartlead-api
3description: Smartlead API endpoint reference and patterns. Use for any Smartlead campaign, lead, email account, analytics, or inbox operation. Covers auth, rate limiting, and all commonly used endpoints.
4user_invocable: false
5---
6 
7# Smartlead API Reference
8 
9## Authentication
10 
11All requests use query parameter auth: `?api_key={SMARTLEAD_API_KEY}`
12 
13Environment variable: `$SMARTLEAD_API_KEY`
14 
15Base URL: `https://server.smartlead.ai/api/v1`
16 
17## Rate Limiting
18 
19- **Standard plan:** 2,000 req/min (33 req/sec)
20- **Higher plans:** 3,000 req/min (50 req/sec)
21- Retry on 429 and 5xx with exponential backoff
22- For bulk operations, use `p-limit` or `PQueue` with 8-15 concurrency
23 
24## CLI Quick Reference
25 
26The `smartlead` CLI (`@smartlead/cli`) wraps all API endpoints. Use it for quick lookups:
27 
28```bash
29# Campaigns
30smartlead campaigns list
31smartlead campaigns get <id>
32smartlead campaigns create --name "Campaign Name"
33 
34# Leads
35smartlead leads list --campaign-id <id>
36smartlead leads add --campaign-id <id> --file leads.csv
37 
38# Email accounts
39smartlead email-accounts list
40smartlead email-accounts get <id>
41 
42# Analytics
43smartlead analytics campaign <id>
44smartlead analytics overall
45 
46# Master inbox
47smartlead inbox replies
48```
49 
50## API Endpoints
51 
52### Campaigns
53 
54```
55GET /campaigns/{id} — Fetch campaign by ID
56POST /campaigns/create — Create new campaign
57POST /campaigns/{id}/status — Update status (START, PAUSED, STOP)
58 Body: { "status": "START" }
59```
60 
61### Campaign Email Accounts
62 
63```
64GET /campaigns/{id}/email-accounts — List accounts assigned to campaign
65POST /campaigns/{id}/email-accounts — Add accounts to campaign
66 Body: { "email_account_ids": [1, 2, 3] }
67DELETE /campaigns/{id}/email-accounts — Remove accounts from campaign
68```
69 
70### Campaign Sequences
71 
72```
73GET /campaigns/{id}/sequences — Fetch sequences
74POST /campaigns/{id}/sequences — Save/update sequences
75 Body: { "sequences": [{ "seq_number": 1, "seq_delay_details": { "delay_in_days": 0 }, "subject": "...", "email_body": "..." }] }
76```
77 
78**A/B/C Variants** — use `seq_variants` array inside each sequence:
79```json
80{
81 "sequences": [{
82 "seq_number": 1,
83 "seq_delay_details": { "delay_in_days": 0 },
84 "seq_variants": [
85 { "variant_label": "A", "subject": "Subject A", "email_body": "<div>Body A</div>" },
86 { "variant_label": "B", "subject": "Subject B", "email_body": "<div>Body B</div>" },
87 { "variant_label": "C", "subject": "Subject C", "email_body": "<div>Body C</div>" }
88 ]
89 }]
90}
91```
92Note: Do NOT include `distribution` field — SmartLead splits evenly automatically.
93 
94**Email body order:** content → PS unsub line → `%signature%` (signature always last)
95 
96### Campaign Settings & Schedule
97 
98```
99POST /campaigns/{id}/settings — Update settings
100 Body: { "track_settings": [...], "stop_lead_settings": "..." }
101 
102POST /campaigns/{id}/schedule — Update schedule
103 Body: { "timezone": "US/Eastern", "days_of_the_week": [1,2,3,4,5], "start_hour": "08:00", "end_hour": "17:00", "min_time_btw_emails": 8, "max_new_leads_per_day": 30 }
104```
105 
106### Leads
107 
108```
109GET /leads/?api_key={key}&email={email}
110 — Lookup lead by email address
111 
112POST /campaigns/{id}/leads
113 — Add leads to campaign (batch up to 100)
114 Body: { "lead_list": [{ "email": "...", "first_name": "...", "last_name": "...", "company_name": "...", "custom_fields": { "field1": "value1" } }] }
115```
116 
117### Analytics
118 
119```
120GET /analytics/day-wise-overall-stats
121 ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
122 — Day-by-day metrics (sent, opened, clicked, replied, bounced)
123 
124GET /analytics/day-wise-positive-reply-stats
125 ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
126 — Day-by-day positive reply counts
127 
128GET /analytics/overall-stats-v2
129 ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
130 — Overall campaign metrics for date range
131 
132GET /analytics/campaign/list
133 ?api_key={key}
134 — List all campaigns with summary stats
135 
136GET /campaigns/{id}/analytics
137 ?api_key={key}
138 — Analytics for specific campaign
139 
140GET /campaigns/{id}/analytics-by-date
141 ?api_key={key}&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
142 — Campaign analytics for specific date range (sent_count, reply_count)
143```
144 
145### Email Accounts (Global)
146 
147```
148GET /email-accounts
149 ?api_key={key}&offset=0&limit=100
150 — List all email accounts (paginated)
151 
152GET /email-accounts/{id}
153 ?api_key={key}
154 — Get specific email account
155 
156POST /email-accounts/save
157 — Create/update email account (SMTP details, warmup, etc.)
158```
159 
160### Master Inbox
161 
162```
163POST /master-inbox/inbox-replies
164 Body: { "api_key": "...", "offset": 0, "limit": 50, "message_type": "RECEIVED" }
165 — Fetch inbox replies with filtering and pagination
166```
167 
168## Sub-Client / Custom API Key Pattern
169 
170- **Normal sub-clients:** Pass `?api_key={MAIN_KEY}&client_id={CLIENT_ID}` on all requests
171- **Custom API key clients:** Use the client's own API key directly, no `client_id` param
172 
173## TypeScript Pattern
174 
175```typescript
176const SMARTLEAD_API = "https://server.smartlead.ai/api/v1";
177const API_KEY = process.env.SMARTLEAD_API_KEY;
178 
179// GET example
180const res = await fetch(`${SMARTLEAD_API}/campaigns/${campaignId}?api_key=${API_KEY}`);
181const campaign = await res.json();
182 
183// POST example (add leads)
184const res = await fetch(`${SMARTLEAD_API}/campaigns/${campaignId}/leads?api_key=${API_KEY}`, {
185 method: "POST",
186 headers: { "Content-Type": "application/json" },
187 body: JSON.stringify({ lead_list: leads.slice(0, 100) }),
188});
189```
190 
191## Performance tip: cache the email-accounts list
192 
193If you hit `/email-accounts` more than a few times per script, paginate once at the start and keep the result in memory. Smartlead's pagination returns 100 per page — for accounts with thousands of inboxes, a full walk takes 30+ seconds.
194 
195For persistent caching across scripts, write the list to a local JSON file and refresh on a timer (e.g. every hour). The `/smartlead-inbox-manager` skill has scripts that implement this pattern.
196 
197---
198 
199## What to do next
200 
201This is a reference skill — no direct next step. Used by all skills that interact with Smartlead (`/smartlead-inbox-manager`, `/smartlead-campaign-upload-public`, `/email-deliverability-audit`, `/positive-reply-scoring`, `/deliverability-incident-response`, etc.).
202 
203Return to the skill that sent you here.
204 
205## Related skills
206 
207- Every skill that touches Smartlead uses this reference.
208 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 736
Checked
Source
growthenginenowoslawski/coldoutboundskills ↗
Creator
growthenginenowoslawski · 52 listings
View creator

Similar skills

See all →
SkillAPI Interface Designaddyosmani/agent-skills · by addyosmaniGuides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.★ 98.7k GitHub starsAgentVersion-Specific Docs Lookupupstash/context7 · by upstashPulls up-to-date, version-specific library docs and code examples into the prompt so the AI stops inventing old APIs.★ 62.3k GitHub starsSkillAdaptyv Bio Foundry APIK-Dense-AI/scientific-agent-skills · by K-Dense-AIHow to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.★ 46k GitHub starsSkill.NET Backend Developerwshobson/agents · by wshobsonMaster C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures.★ 39.9k GitHub starsSkillGemini Agent API Guidegoogle/skills · by googleGuides the usage of Gemini Interactions API on Gemini Enterprise Agent Platform. Use when the user wants to use the stateful, server-managed Interactions API for multi-turn conversations, background execution, streaming, structured output, and function calling on the Agent Platform.★ 20.9k GitHub starsSkillGemini Notebook Automationteng-lin/notebooklm-py · by teng-linInstall, authenticate, troubleshoot, and operate Gemini Notebook through the notebooklm-py CLI or typed async Python API. Use for notebook and source management, grounded chat and research, and artifact generation or download when the user mentions Gemini Notebook, notebooklm-py, the notebooklm CLI, or its Python API. Do not use for the generic Gemini API or unrelated content creation.★ 19.6k GitHub stars

More from growthenginenowoslawski

SkillCold Email Automationgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiAutonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C variants), and uploads as a live Smartlead campaign. Uses local JSON files for state (no database required). Use for automated daily campaign launches after you have an initial `client-profile.yaml` from /icp-onboarding. Triggers on "auto-research", "launch an automated campaign", "daily campaign", "run the research loop".★ 736 GitHub starsSkillCompany Decision-Maker Findergrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiUse the Blitz API to find decision-makers at specific companies when you already have a list of company domains. Best for SMB owner-finding, domain-to-people lookup, or supplementing Prospeo results. Outputs a CSV you can feed to the email-waterfall or directly to /cold-email-starter-kit for Smartlead upload. Use when your targeting is company-first (not title-first).★ 736 GitHub starsSkillCold Outreach Strategistgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiGenerates 15-25+ cold outbound campaign ideas with targeting strategies, AI personalization approaches, and value propositions. Use when planning campaign experiments for a client, given their website or business context.★ 736 GitHub starsSkillClay Signal Playbooksgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiIndex and shared harness for the 19 signal playbooks. Each playbook turns one buying signal (new in role, raised a round, hiring surge, pricing page, tech on website, ...) into one copy-ready sentence you can drop into a cold email. Every playbook ships three ways to run it: as a Claude skill, as a Clay table built through a browser harness, and as a Clay workflow built from the clay CLI. Use when someone says "personalize this list", "what signal should I use", "build the Clay column for X", or names any of the 19 signals.★ 736 GitHub starsSkillCompetitor Engager Findergrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiFind people actively engaging with competitor LinkedIn posts. Given a website URL, discovers competitors, fetches their company and employee posts, collects all commenters and reactors, and outputs a deduplicated CSV of engaged prospects. Use when someone wants to find leads from competitor engagement, build outreach lists from LinkedIn activity, or analyze who interacts with competitor content.★ 736 GitHub starsSkillEmail Deliverability Crisisgrowthenginenowoslawski/coldoutboundskills · by growthenginenowoslawskiTriage playbook for when cold email deliverability breaks. Decision-tree guidance for "I landed in spam", "bounce rate spiked", "domain blacklisted", "inbox blocked in warmup", "reply rate dropped". Tells you what to check first, what to fix, and how long the fix takes. Pair with /email-deliverability-audit for diagnosis.★ 736 GitHub stars