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

# Fetch Campaign Lead Statistics

> Fetch campaign lead statistics using the campaign's ID

## Path Parameters

<ParamField path="campaign_id" type="integer" required>
  The ID of the campaign
</ParamField>

## Query Parameters

<ParamField query="api_key" type="string" required>
  Your API key
</ParamField>

<ParamField query="limit" type="integer">
  The number of leads you want to fetch in one go (optional, max 100)
</ParamField>

<ParamField query="event_time_gt" type="string">
  Replied/Sent at date in YYYY-MM-DD format. If you want to filter by when the last event for the lead was received by. This can be a reply event, send event etc (optional)
</ParamField>

<ParamField query="offset" type="integer">
  Used to paginate lead data (optional)
</ParamField>

## Rate Limit

<Warning>
  This endpoint has its **own dedicated rate limit of 10 requests per minute**, which is separate from your plan's overall API rate limit.
</Warning>

| Scope | Limit | Window |
| - | - | - |
| `GET /campaigns/{campaign_id}/leads-statistics` | 10 requests | 60 seconds |

The limit is counted per SmartLead account across all campaigns — hitting a different `campaign_id` uses the same 10-request budget. If you authenticate with a client API key, the count is scoped to that key instead.

This limit **stacks on top of** your plan-wide limit rather than replacing it. Requests to this endpoint still count toward the account-wide quota described in the [Rate Limits guide](/guides/rate-limits), so staying under 10/min here does not exempt you from that limit, and having plan-wide quota left does not let you exceed 10/min here.

The window starts on your first request and resets 60 seconds later. Exceeding it returns `429 Too Many Requests` with a plain-text body:

```text 429 - Too Many Requests theme={null}
You have exceeded the 10 requests in 60 sec limit for this endpoint!
```

<Note>
  This 429 does not include `Retry-After` or `X-RateLimit-*` headers. Wait up to 60 seconds before retrying.
</Note>

<Tip>
  This endpoint aggregates the full send and reply history for every lead in the page, so each call is expensive to serve — which is why it is capped more tightly than most endpoints. When polling for changes, pass `event_time_gt` to fetch only leads with activity since your last poll instead of re-reading the whole campaign, and page with `limit=100` to get the most out of each of your 10 requests.
</Tip>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://server.smartlead.ai/api/v1/campaigns/12345/leads-statistics?api_key=YOUR_API_KEY&limit=100&offset=1"
  ```

  ```python Python theme={null}
  import requests

  API_KEY = "YOUR_API_KEY"
  CAMPAIGN_ID = 12345

  response = requests.get(
      f"https://server.smartlead.ai/api/v1/campaigns/{CAMPAIGN_ID}/leads-statistics",
      params={
          "api_key": API_KEY,
          "limit": 100,
          "offset": 1
      }
  )

  result = response.json()
  print(result)
  ```

  ```javascript JavaScript theme={null}
  const API_KEY = 'YOUR_API_KEY';
  const CAMPAIGN_ID = 12345;

  const response = await fetch(
    `https://server.smartlead.ai/api/v1/campaigns/${CAMPAIGN_ID}/leads-statistics?api_key=${API_KEY}&limit=100&offset=1`
  );

  const result = await response.json();
  console.log(result);
  ```
</RequestExample>

## Response Codes

<ResponseField name="200" type="Success">
  Request successful
</ResponseField>

<ResponseField name="400" type="Bad Request">
  Invalid request parameters or malformed request body
</ResponseField>

<ResponseField name="401" type="Unauthorized">
  Invalid or missing API key. Check your authentication.
</ResponseField>

<ResponseField name="404" type="Not Found">
  The requested resource does not exist or you don't have access to it
</ResponseField>

<ResponseField name="429" type="Too Many Requests">
  You exceeded this endpoint's dedicated limit of 10 requests per minute, or your plan-wide API rate limit. Wait up to 60 seconds and retry.
</ResponseField>

<ResponseExample>
  ```json 200 - Success theme={null}
  {
    "ok": true,
    "data": []
  }
  ```

  ```json 401 - Unauthorized theme={null}
  {
    "message": "Invalid API Key"
  }
  ```

  ```text 429 - Too Many Requests theme={null}
  You have exceeded the 10 requests in 60 sec limit for this endpoint!
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.