---
title: "Campaign analytics over time"
method: GET
path: "/v1/campaigns/{id}/analytics/timeseries"
tags: ["Analytics"]
---

# Campaign analytics over time

`GET /v1/campaigns/{id}/analytics/timeseries`

## Request

- Base URL: `https://api.mailbeast.ai`
- URL: `https://api.mailbeast.ai/v1/campaigns/{id}/analytics/timeseries`
- Auth: HTTP bearer

One point per interval so you can chart a campaign – this series carries bounces AND unsubscribes, so those rates are chartable without extra calls. Long windows auto-coarsen (day → week → month); the response says which interval it used.

Requires one of the following scopes: `metrics:read`, `all:read`, `all:all`.

## Path parameters

- `id` string, required

## Query parameters

- `startDate` string
- `endDate` string
- `excludeOOO` boolean
- `interval` 'day' | 'week' | 'month'

## Response `200`

- AnalyticsTimeseriesApiResponseDto
  - `campaignId` string, required
  - `period` AnalyticsPeriodView, required
    - `start` string, required
    - `end` string, required
    - `clamped` boolean, required: true = your requested start was older than the plan retention window and was moved forward. The data you got is real but shorter than you asked for.
    - `retentionDays` number, required: Days of history your plan retains.
  - `interval` 'day' | 'week' | 'month', required: Bucket size actually used – may be coarser than requested for long windows.
  - `data` AnalyticsTimeseriesPointView[], required
    - `timestamp` string, required: Start of the bucket.
    - `sent` number, required
    - `delivered` number, required
    - `opens` EngagementCountView, required
      - `total` number, required: Opens/clicks counted per email (bots excluded): the same email opened twice counts once, two different steps count twice.
      - `uniqueLeads` number, required: Distinct leads who did this at least once.
    - `clicks` EngagementCountView, required
      - `total` number, required: Opens/clicks counted per email (bots excluded): the same email opened twice counts once, two different steps count twice.
      - `uniqueLeads` number, required: Distinct leads who did this at least once.
    - `replies` number, required
    - `bounces` number, required
    - `unsubscribed` number, required: Unsubscribes in this bucket.

## Other responses

- `400`: The request body or parameters failed validation.
- `401`: Missing or invalid API key.
- `403`: The key lacks a required scope, or the plan does not include API access.
- `404`: The resource does not exist in your workspace.
- `429`: Rate limit exceeded - retry after the interval in the Retry-After header.

---

[API](https://skmtc.dev/mailbeast/apis/mailbeast-public-api.md) · [All operations](https://skmtc.dev/mailbeast/apis/mailbeast-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mailbeast/apis/mailbeast-public-api/revisions/6440ce0738a4?raw)
