API review

Smartlead API review

Cold-email sending platform priced on send volume and stored contacts (not seats), with unlimited mailboxes, warmup, master inbox, white-label client workspaces and a broad REST API. Best for agencies running many client workspaces off one account.

Verified 25 Oct 2026 · 227 endpoints listed · Official MCP server

What a call costs

The actions you pay for, as Smartlead prices them.

ActionCostPer
Client workspace / white-label$29per client per month (Pro and Smart add-on; Prime includes 3+)
SmartServer dedicated IP$39per server per month (Pro and Smart add-on; Prime includes 3)
Verified prospect emails allowance (Base, Pro)$59per month add-on; included free on Smart and Prime
SmartProspect quality maintenance fee (in-app SmartProspect tab)$59.00per month on top of the plan; the trial tab showed "Leads Included 1K / Month" and "Effective Cost $0.0472 / Lead" ($59 / 1,250, so the displayed 1K and the math disagree)
SmartSenders Google or Outlook mailbox, fresh (Zapmail)$4.50per mailbox per month + $13/domain/year
SmartSenders Outlook mailbox, fresh (InfraInbox)$5per mailbox per month + $16/domain/year
SmartSenders SMTP mailbox, fresh (Mailreef)$3.99per mailbox per month + $19/domain/year
SmartSenders SMTP mailbox, standard (AeroSend)$4.20per mailbox per month + $13/domain/year
Show all 12 priced actionsHide the rest
ActionCostPer
Pre-warmed Google or Outlook mailbox (Zapmail)$9per mailbox per month + $18/domain/year
SmartDelivery placement testing$49 / $174 / $599per month (Growth / Pro / Export); full API only on Pro and Export
Email verification credit packsfrom $32packs of 6,000 to 960,000 credits, one-time or monthly (monthly saves 17%)
SmartDialer voice credits$9 / $19 / $49 / $249 / $699per month; 1 credit = $1; US numbers from $1/month; no per-seat fee (in-app SmartDialer tab)

Pricing, plan by plan

US dollars, as Smartlead's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier 14-day free trial, no card (pricing page FAQ; help article 439 "Start free for 14 days"). Live trial (2026-10-25): plan_type TRIAL_PLAN, 2,500 sends/mo, 1,250 contacts, 0 email-verification credits, 0 SmartProspect credits (a "Claim 2,000 free credits" offer is shown); a Default API key exists and the API and MCP work on the trial, although the paid Base plan has no API. Offer: 50% off the first month on any plan (pricing page; in-app a countdown of about 3 days from signup).

Base

$39/mo

billed monthly

$32/mo

billed annually

2,000 stored contacts, 6,000 sends/mo, 2,000 verified prospect emails/mo as a $59/mo add-on; billed annually $388/yr in-app

No API
Plan details

upgrade plan

Pro

$94/mo

billed monthly

$78/mo

billed annually

30,000 contacts, 90,000 sends/mo, 30,000 verified prospect emails/mo as a $59/mo add-on; billed annually $936/yr in-app

API included
Plan details

upgrade plan

Unlimited Smart

$174/mo

billed monthly

$144/mo

billed annually

in-app name "Smart"; unlimited contacts, 150,000 sends/mo, 50,000 verified prospect emails included; billed annually $1,733/yr in-app

API included
Plan details

upgrade to Prime (in-app shows Smart as "150K+" sends)

Unlimited Prime

$379/mo

billed monthly

$315/mo

billed annually

in-app name "Prime"; unlimited contacts, 500,000 sends/mo, 170,000 verified prospect emails, 3 SmartServers + OAuth, 3+ client workspaces, dedicated manager, private Slack; billed annually $3,775/yr in-app

API included
Plan details

in-app shows "500K+" sends; the pricing-page slider runs past 500K sends (up to 5.1M+) without showing a price for those steps, so higher-volume pricing is not published (the page script holds unrendered figures, not used here)

Rate limits

Docs: per account, all endpoints and all admin keys combined: Standard 60 req/min, 1,000/hour, burst 10/s; Pro 120/min, 3,000/hour, burst 20/s; Enterprise custom.

Standard (docs)

Per Minute
60
Per Hour
1,000
Burst Per Second
10

Pro (docs)

Per Minute
120
Per Hour
3,000
Burst Per Second
20

Enterprise (docs)

Per Minute
custom

Free trial (observed header, window about 60 s)

Per Window
200
More on limitsLess

The docs do not say which Smartlead plan (Base/Pro/Smart/Prime) maps to "Standard" or "Pro", and the docs FAQ says to contact support or check the dashboard for exact values. Live (our trial key, 2026-10-25): every v1 response carried x-ratelimit-limit: 200 with x-ratelimit-reset as a Unix timestamp about 30-60 s ahead, which matches neither documented tier; prospect-api.smartlead.ai returned no rate-limit headers. Three heavy endpoints (leads-statistics, all-leads-activities, domain-wise-health-metrics) carry their own 10 req/60 s limit on top, whose 429 is plain text with no Retry-After or X-RateLimit headers.

How to get an API key

Smartlead uses API key. The steps below follow Smartlead's own docs.

  1. Create a Smartlead account. API access starts on the Pro plan.
  2. Settings & Profile > API Key Management (/app/settings/api-key-management). A "Default" admin key is created automatically at first login, including on the free trial (live app 2026-10-25). Up to 25 named admin keys per account, all sharing one rate-limit pool; the primary key cannot be revoked, only reset. Client-level keys per white-label client; revoked client keys stay visible (masked) for 30 days.
  3. Send it with every request: query (?api_key=...).
  4. Make a first call: Get Campaign List, Retrieve list of all campaigns for building selectors and filtering. Keep the key in an environment variable, never in the command.
    curl -X GET "https://server.smartlead.ai/api/v1/analytics/campaign/list?api_key=$SMARTLEAD_API_KEY"

Where the docs live

WhatWhere
Documentationapi.smartlead.ai/introduction
API referenceapi.smartlead.ai/llms-full.txt
llms.txtapi.smartlead.ai/llms.txt
Base URLhttps://server.smartlead.ai
MCP serverhttps://mcp.smartlead.ai/sse?user_api_key=YOUR_API_KEY

Strengths and limits

Where it fits

  • Agencies running many client workspaces off one account (client-level API keys, white-label)
  • High-volume cold email with mailbox rotation across unlimited connected inboxes
  • Programmatic campaign build: create campaign, sequences, schedule, attach mailboxes, import leads (400/request)
  • Webhook-driven reply capture into a CRM or Supabase

Where it falls short

  • Base-plan accounts: API and webhooks are not included on Base ($39)
  • Relying on its AI reply categorisation as the only triage layer (our audit measured near-zero recall outside positives)
  • LinkedIn-first outreach (pair with HeyReach/Aimfox instead)

Worth knowing

  • API and webhooks are NOT on the Base plan; Pro ($94/mo) is the first tier with API.
  • Auth is ?api_key= in the query string, so keys land in proxy/server logs; MCP also puts the key in the URL.
  • The Mintlify openapi.json at api.smartlead.ai/api-reference/openapi.json is the placeholder 'Plant Store' sample, not the real spec; use llms-full.txt.
  • Three analytics endpoints have their own 10 req/60 s limit and return a plain-text 429 with no Retry-After header; back off a fixed 60 s.
  • All admin keys share one rate-limit pool, so one heavy integration starves the others.
14 moreShow fewer
  • Webhook retry policy is documented two different ways (5 retries then disable vs 3 retries then mark failed); monitor webhook health rather than trusting either.
  • A user-level webhook overrides campaign/client-level ones; only it receives events.
  • Lead (contact) credits do not reset monthly; delete finished campaigns to release them; email-send credits are a separate monthly counter.
  • Our experience: /inbox/get-messages and /lead-categories return 404; the working category path is GET /leads/fetch-categories and replies come from GET /campaigns/{id}/leads/{lead_id}/message-history.
  • Our experience: message-history type=REPLY is used for BOTH inbound replies and our own manual outbound replies; read direction from the from address.
  • Our experience: Smartlead variables are DOUBLE braces {{field}} (HeyReach is single); Smartlead auto-appends the mailbox signature, so strip inline sign-offs.
  • Base URL is server.smartlead.ai with every core path under /api/v1 (docs FAQ: "V1 endpoints prefixed at /api/v1/"). Four other hosts carry their own /api/v1 paths, written as absolute URLs in this record: prospect-api.smartlead.ai (SmartProspect), smartdelivery.smartlead.ai, smart-senders.smartlead.ai and smartservers.smartlead.ai.
  • Campaign status: write START / PAUSED / STOPPED / ARCHIVED with POST /api/v1/campaigns/{id}/status. The same docs show "ACTIVE" in the Python example and in llms.txt, and the create-campaign "Next Steps" box shows PATCH for status, settings and schedule; the endpoint reference pages, the MCP server instructions and our own script use POST + START.
  • START only checks that a schedule exists: it succeeds on a campaign with no sequences, mailboxes or leads, and then nothing sends.
  • The API caps lead import at 400 per request, but the MCP add_leads_to_campaign tool says "up to 1000 leads per call".
  • POST /api/v1/campaigns/{id}/forward-email has no documented request body; the vendor page itself says the schema "needs verification from controller implementation".
  • The paid Base plan has no API or webhooks, yet the 14-day trial does: a Default admin key is auto-created and v1, prospect-api and MCP calls returned 200 on the trial. Test on the trial, but buy Pro or above if you need the API.
  • GET /api/v1/leads/get-domain-block-list took 15.4 s on an empty trial account; set generous client timeouts.
  • Integrations: the marketing site lists Zapier, Slack, Salesforce, Pipedrive, Attio, Expandi and others as native, but the in-app Native Connections tab showed only HubSpot (Beta), Clay, Listkit, LeadMagic and OutboundSync; Salesforce comes via OutboundSync, HeyReach and Close via SmartAgent AI Connections, and Expandi and Attio were "Coming soon" there.

Our take

We have run Smartlead email campaigns for several clients, launched in plain-text mode with open and click tracking off, stop-on-reply on, bounce auto-protection at about 5% and at most 15 sends per mailbox a day. On one client's campaigns Smartlead's automatic reply categories caught every positive reply and missed every opt-out and out-of-office reply, and the opt-outs were left off the suppression list, so we classify replies ourselves from each lead's message history, reading direction from the sender address because the API marks both their replies and ours as REPLY. In the API, re-posting a running campaign's sequence without the existing step ids resends step 1, the send_as_plain_text flag is silently ignored, and uploads silently drop leads already in another campaign, so we reconcile lead counts after every upload.

Who should use it

Use Smartlead for
Agencies running many client workspaces off one account (client-level API keys, white-label)
Look elsewhere for
Base-plan accounts: API and webhooks are not included on Base ($39)

If Smartlead is not the answer

Other Email sending tools in this directory, each with its own review.

Compare Smartlead with

Before you build

Four things to settle first, each read off Smartlead's own pages.

  • Confirm the API is on your planAPI access starts on the Pro plan. Free tier: 14-day free trial, no card (pricing page FAQ.
  • Keep the key out of your codeAPI key. It is sent as: query (?api_key=...).
  • Design around the rate limitDocs: per account, all endpoints and all admin keys combined: Standard 60 req/min, 1,000/hour, burst 10/s; Pro 120/min, 3,000/hour, burst 20/s; Enterprise custom.
  • Know the catch before you scaleAPI and webhooks are NOT on the Base plan; Pro ($94/mo) is the first tier with API.

Want us to build it for you?

Tell us what you want Smartlead to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

Read from smartlead.ai/pricing, api.smartlead.ai/llms-full.txt and api.smartlead.ai/guides/rate-limits. Verified 25 Oct 2026.

All 227 endpointsFor developers: method, path, what it does and what it costs.

Base URL: server.smartlead.ai

Bulk and async: Lead import up to 400 leads per request; CSV export endpoints for campaign data.

Webhooks: Events: EMAIL_SENT, FIRST_EMAIL_SENT, EMAIL_OPEN, EMAIL_LINK_CLICK, EMAIL_REPLY, EMAIL_BOUNCE, LEAD_UNSUBSCRIBED, LEAD_CATEGORY_UPDATED, CAMPAIGN_STATUS_CHANGED, UNTRACKED_REPLIES, MANUAL_STEP_REACHED, EMAIL_ACCOUNT_DISCONNECTED and 1 more. Retries: Docs disagree: core/webhooks says 5 retries (1m,5m,15m,1h,6h) then the webhook is DISABLED; guides/webhook-integration says 3 retries (1m,5m,30m) then the event is marked failed. Retrigger endpoint exists.

227 endpoints
MethodPathWhat it doesCost
GET/api/v1/analytics/campaign/listGet Campaign List, Retrieve list of all campaigns for building selectors and filteringNot stated
GET/api/v1/analytics/campaign/overall-statsCampaign Performance, Get performance metrics for each campaign with engagement rates and lead countsNot stated
GET/api/v1/analytics/campaign/response-statsCampaign Response Stats, Get detailed response analysis per campaign with sentiment breakdownNot stated
GET/api/v1/analytics/campaign/status-statsCampaign Status Stats, Get count of campaigns in each status for operational overviewNot stated
GET/api/v1/analytics/client/listGet Client List, Get list of all clients for agency account filtering and selectionNot stated
GET/api/v1/analytics/client/overall-statsClient Overall Stats, Get performance metrics by client for agency reporting and analysisNot stated
GET/api/v1/analytics/day-wise-positive-reply-statsDay-wise Positive Reply Stats, Get daily positive reply metrics filtered to interested/positive categories onlyNot stated
GET/api/v1/analytics/day-wise-positive-reply-stats-by-sent-timePositive Reply Stats by Sent Time, Get positive replies by sent time to optimize sending scheduleNot stated
GET/api/v1/analytics/day-wise-overall-stats-by-sent-timeDay-wise Stats by Sent Time, Get daily breakdown organized by email sent time for schedule analysisNot stated
GET/api/v1/analytics/day-wise-overall-statsGet Day-wise Overall Stats, Get day-by-day email engagement breakdown with daily metricsNot stated
GET/api/v1/analytics/mailbox/domain-wise-health-metricsDomain-wise Health Metrics, Get performance metrics aggregated by email domain for domain analysisNot stated
GET/api/v1/analytics/mailbox/name-wise-health-metricsEmail-ID-wise Health Metrics, Get detailed health metrics by individual email account addressNot stated
GET/api/v1/analytics/campaign/follow-up-reply-rateFollow-up Reply Rate, Analyze reply rates specifically for follow-up sequences (2, 3, 4+)Not stated
GET/api/v1/analytics/lead/category-wise-responseLead Category-wise Response, Get lead response breakdown by category type with sentiment distributionNot stated
GET/api/v1/analytics/lead/overall-statsLead Statistics, Get comprehensive lead engagement statistics by status and categoryNot stated
GET/api/v1/analytics/campaign/lead-to-reply-timeLead to Reply Time, Measure average time from first email sent to first reply receivedNot stated
GET/api/v1/analytics/campaign/leads-take-for-first-replyLeads Take for First Reply, Calculate average leads contacted before receiving first replyNot stated
GET/api/v1/analytics/mailbox/overall-statsMailbox Overall Stats, Get overall health and performance statistics for all mailboxesNot stated
GET/api/v1/analytics/client/month-wise-countGet Month-wise Client Count, Get monthly breakdown of active clients showing growth trendsNot stated
GET/api/v1/analytics/overall-stats-v2Get Overall Analytics, Get account-wide overall statistics for date range with sent, opened, replied metricsNot stated
GET/api/v1/analytics/mailbox/provider-wise-overall-performanceProvider-wise Performance, Compare performance across email service providers (Gmail, Outlook, SMTP)Not stated
GET/api/v1/analytics/team-board/overall-statsTeam Board Stats, Get performance metrics by team member for collaboration featuresNot stated
GET/api/v1/campaigns/{campaign_id}/analytics-by-dateFetch Campaign Statistics by Date Range, Fetch campaign statistics using the campaign's ID filtered by date rangeNot stated
GET/api/v1/campaigns/{campaign_id}/statisticsFetch Campaign Statistics by Campaign ID, Fetch campaign statistics using the campaign's IDNot stated
GET/api/v1/campaigns/{campaign_id}/leads-statisticsFetch Campaign Lead Statistics, Fetch campaign lead statistics using the campaign's IDNot stated
GET/api/v1/campaigns/{campaign_id}/mailbox-statisticsFetch Campaign Mailbox Statistics, Fetch mailbox statistics specific to a campaignNot stated
GET/api/v1/campaigns/{campaign_id}/sequence-analyticsFetch Campaign Sequence Analytics, Per-sequence and per-variant performance for a campaign, with rates.Not stated
GET/api/v1/campaigns/{campaign_id}/analyticsFetch Campaign Top Level Analytics, Fetch a campaign's top level analyticsNot stated
GET/api/v1/campaigns/{campaign_id}/top-level-analytics-by-dateFetch Campaign Top Level Analytics by Date Range, Fetch campaign top-level analytics filtered by date rangeNot stated
POST/api/v1/campaigns/{campaign_id}/email-accountsAdd Email Accounts to Campaign, Associates one or more email accounts with a campaign for automatic sender rotation.Not stated
POST/api/v1/campaigns/{campaign_id}/email-accounts/by-tagAdd Email Accounts to Campaign by Tag, Attach every mailbox carrying a given tag to a campaign in a single call.Not stated
POST/api/v1/campaigns/{campaign_id}/leadsAdd Leads to Campaign, Add new leads to a campaign with custom fields and validation settingsconsumes lead (contact storage) credits; max 400 leads per request
POST/api/v1/campaigns/tagsAdd Tags to Campaigns, Attach one or more tags to one or more campaigns in a single requestNot stated
GET/api/v1/campaigns/all-leads-activitiesGet All Leads Activities, Retrieve lead activities across all campaigns for the authenticated userNot stated
POST/api/v1/campaigns/assign-clientAssign Client to Campaign, Assign a campaign to a client (or remove its client), optionally applying the client's DNC listNot stated
POST/api/v1/campaigns/createCreate Campaign, Creates a new email campaign with default settings in DRAFTED status.Not stated
POST/api/v1/campaigns/{campaign_id}/prompt-templateCreate Campaign AI Prompt Template, Add an AI reply-categorisation prompt and lead categories to a campaignNot stated
POST/api/v1/campaigns/create-subsequenceCreate Subsequence Campaign, Create a child campaign (subsequence) with conditional trigger logicNot stated
DELETE/api/v1/campaigns/{campaign_id}Delete Campaign, Permanently and irreversibly deletes a campaign and ALL associated data: sequences, lead-campaign mappings, email statisNot stated
DELETE/api/v1/campaigns/{campaign_id}/leads/{lead_id}Delete Lead from Campaign, Remove a lead from a campaignNot stated