> ## Documentation Index
> Fetch the complete documentation index at: https://lava.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Smartlead

> Cold-email outreach API for Smartlead — create and run email campaigns, import leads (up to 400 per request), manage sender email accounts and warmup, read campaign analytics, categorize replies in the master inbox, and register webhooks for campaign events.

Cold-email outreach API for Smartlead — create and run email campaigns, import leads (up to 400 per request), manage sender email accounts and warmup, read campaign analytics, categorize replies in the master inbox, and register webhooks for campaign events. Use when an agent needs to operate a team's own Smartlead account: launching or pausing campaigns, adding leads, checking reply/open stats, or wiring campaign events into other systems. Careful: setting a campaign's status to START begins real cold-email sending from the user's connected accounts.

12 example endpoints available through Lava's AI Gateway. See the [Smartlead API docs](https://api.smartlead.ai/introduction) for full documentation.

<Warning>This provider requires your own credentials — connect your API key or OAuth account before use.</Warning>

<Info>This is a **catch-all provider** — any valid URL under `https://server.smartlead.ai/api/v1` is supported. Any Smartlead v1 endpoint. Construct URL as [https://server.smartlead.ai/api/v1/\&#123;path\&#125](https://server.smartlead.ai/api/v1/\&#123;path\&#125); — auth is supplied automatically as an api\_key query parameter, so never add it yourself. Collection endpoints keep their trailing slash (GET /campaigns/, GET /email-accounts/). List endpoints paginate with ?offset and ?limit (max 100 per page). Campaign status values are START, PAUSED, STOPPED (use START, not ACTIVE). Lead imports (POST /campaigns/\{id}/leads) take a lead\_list array of at most 400 leads per request. Campaign-scoped webhooks live at /campaigns/\{id}/webhooks (POST with "id": null creates, with a numeric id updates; DELETE /campaigns/\{id}/webhooks with body \{"id": \<webhook\_id>} removes — the id goes in the body, not the path). Webhook event types are EMAIL\_SENT, EMAIL\_OPEN, EMAIL\_LINK\_CLICK, EMAIL\_REPLY, EMAIL\_BOUNCE, LEAD\_UNSUBSCRIBED, LEAD\_CATEGORY\_UPDATED. Rate limits are per API key: 60 requests/min on Standard, 120/min on Pro; 429 responses include Retry-After and X-RateLimit-\* headers — back off accordingly. SEND SAFETY: this platform sends real cold email. Setting a campaign status to START, or importing leads into an active campaign, starts actual sending from the user's connected email accounts — confirm the user's intent before mutating campaign state. Full reference: [https://api.smartlead.ai/introduction](https://api.smartlead.ai/introduction). The endpoints below are curated examples.</Info>

## Endpoints

### List all campaigns in the account. Use as the auth/connectivity check.

**GET** `https://server.smartlead.ai/api/v1/campaigns/` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Top-level analytics for a campaign: sent, opens, clicks, replies, bounces, unsubscribes.

**GET** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/analytics` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/analytics', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fanalytics" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List leads in a campaign with ?offset and ?limit (max 100), filterable by status, category, and engagement.

**GET** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads?offset=0&limit=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads?offset=0&limit=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fleads%3Foffset%3D0%26limit%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List sender email accounts with connection status, warmup state, and campaign associations. Supports ?offset and ?limit (max 100).

**GET** `https://server.smartlead.ai/api/v1/email-accounts/?offset=0&limit=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/email-accounts/?offset=0&limit=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Femail-accounts%2F%3Foffset%3D0%26limit%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List webhooks registered on a campaign.

**GET** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/webhooks` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/webhooks', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fwebhooks" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a campaign in DRAFTED status. Body accepts only name (and client\_id for agency accounts); configure schedule, sequences, and settings via separate endpoints afterward.

**POST** `https://server.smartlead.ai/api/v1/campaigns/create` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/create', { body: {"name":"Q1 SaaS Outreach"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2Fcreate" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"Q1 SaaS Outreach"}'
    ```
  </Tab>
</Tabs>

### Import leads into a campaign — lead\_list array of at most 400 leads per request, with optional custom\_fields (max 200 keys) and duplicate/validation settings. Importing into an active campaign queues real cold email to the new leads.

**POST** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads', {
      body: {
    "lead_list": [
      {
        "email": "john@company.com",
        "first_name": "John",
        "last_name": "Doe",
        "company_name": "ACME Corp",
        "custom_fields": {
          "job_title": "CEO",
          "industry": "SaaS"
        }
      }
    ],
    "settings": {
      "ignore_duplicate_leads_in_other_campaign": false,
      "return_lead_ids": true
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fleads" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"lead_list":[{"email":"john@company.com","first_name":"John","last_name":"Doe","company_name":"ACME Corp","custom_fields":{"job_title":"CEO","industry":"SaaS"}}],"settings":{"ignore_duplicate_leads_in_other_campaign":false,"return_lead_ids":true}}'
    ```
  </Tab>
</Tabs>

### Change campaign status: START (begins or resumes real cold-email sending — confirm user intent first), PAUSED, or STOPPED. Use START, not ACTIVE.

**POST** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/status` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/status', { body: {"status":"PAUSED"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fstatus" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"status":"PAUSED"}'
    ```
  </Tab>
</Tabs>

### Create or update a campaign webhook: "id": null creates, a numeric id updates. Event types: EMAIL\_SENT, EMAIL\_OPEN, EMAIL\_LINK\_CLICK, EMAIL\_REPLY, EMAIL\_BOUNCE, LEAD\_UNSUBSCRIBED, LEAD\_CATEGORY\_UPDATED.

**POST** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/webhooks` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/webhooks', {
      body: {
    "id": null,
    "name": "CRM Integration",
    "webhook_url": "https://example.com/smartlead-webhook",
    "event_types": [
      "EMAIL_REPLY",
      "EMAIL_OPEN"
    ]
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fwebhooks" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"id":null,"name":"CRM Integration","webhook_url":"https://example.com/smartlead-webhook","event_types":["EMAIL_REPLY","EMAIL_OPEN"]}'
    ```
  </Tab>
</Tabs>

### Categorize a lead reply in the master inbox (1 Interested, 2 Meeting Request, 3 Not Interested, 4 Do Not Contact, 5 Information Request, or a custom category id). Takes the campaign\_lead\_map\_id from inbox or campaign-leads endpoints.

**PATCH** `https://server.smartlead.ai/api/v1/master-inbox/update-category` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/master-inbox/update-category', { method: 'PATCH', body: {"email_lead_map_id":2433664091,"category_id":1} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PATCH "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fmaster-inbox%2Fupdate-category" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"email_lead_map_id":2433664091,"category_id":1}'
    ```
  </Tab>
</Tabs>

### Update an account-level webhook: name, target URL, subscribed event types, and category filters.

**PUT** `https://server.smartlead.ai/api/v1/webhook/update/{webhook_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/webhook/update/{webhook_id}', {
      method: 'PUT',
      body: {
    "name": "My Updated Webhook",
    "webhook_url": "https://example.com/webhook",
    "event_types": [
      "EMAIL_SENT",
      "EMAIL_REPLIED",
      "EMAIL_BOUNCED"
    ],
    "categories": []
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PUT "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fwebhook%2Fupdate%2F%7Bwebhook_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"My Updated Webhook","webhook_url":"https://example.com/webhook","event_types":["EMAIL_SENT","EMAIL_REPLIED","EMAIL_BOUNCED"],"categories":[]}'
    ```
  </Tab>
</Tabs>

### Delete a webhook from a campaign. The webhook id goes in the JSON body, not the URL path (the /webhooks/\{webhook\_id} path form 404s).

**DELETE** `https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/webhooks` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/webhooks', { method: 'DELETE', body: {"id":668157} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE "https://api.lava.so/v1/forward?u=https%3A%2F%2Fserver.smartlead.ai%2Fapi%2Fv1%2Fcampaigns%2F%7Bcampaign_id%7D%2Fwebhooks" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"id":668157}'
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={2}>
  <Card title="All Providers" icon="grid" href="/gateway/supported-providers">
    Browse all supported AI providers
  </Card>

  <Card title="Forward Proxy" icon="route" href="/gateway/forward-proxy">
    Learn how to construct proxy URLs and authenticate requests
  </Card>
</CardGroup>
