---
title: "Get campaign metrics"
method: GET
path: "/campaigns/{campaignId}/stats"
tags: ["Analytics"]
---

# Get campaign metrics

`GET /campaigns/{campaignId}/stats`

Backward-compatible alias for `GET /metrics/campaigns/{campaignId}`. Returns aggregated engagement metrics plus a lifetime per-link click breakdown and lifetime Poll/NPS summaries for a specific campaign.

## Path parameters

- `campaignId` string, required

## Query parameters

- `period` '1h' | '24h' | '7d' | '30d' | '90d'
- `start` string, date-time
- `end` string, date-time
- `includeMachineEngagement` boolean

## Response `200`

Success

- object
  - `success` boolean
  - `campaignId` string
  - `period` string
  - `stats` EngagementStats — Unified engagement metrics returned by analytics endpoints. Open and click metrics exclude detected scanner, preview, and tracked asset events unless includeMachineEngagement is true.
    - `sent` integer
    - `delivered` integer — Capped at sent count
    - `bounced` integer — Unique bounces (deduplicated by email send)
    - `opened` integer — Unique opens (deduplicated by email send)
    - `clicked` integer — Unique clicks (deduplicated by email send)
    - `unsubscribed` integer
    - `deliveryRate` number — Percentage (0-100)
    - `bounceRate` number — Percentage (0-100), calculated from sent emails
    - `openRate` number — Percentage (0-100)
    - `clickRate` number — Percentage (0-100)
    - `unsubscribeRate` number — Percentage (0-100)
    - `conversions` integer — Attributed goal conversions (last-touch, 24h window). Only returned by campaign and sequence metrics endpoints.
    - `revenueCents` integer — Attributed revenue in cents from purchase events (saas.purchase and ecommerce.order_placed). Only returned by campaign and sequence metrics endpoints.
  - `clickedLinks` ClickedLink[] — Lifetime per-link click breakdown, most clicked first (top 20). Omitted when the campaign has no tracked link clicks.
    - `url` string — The clicked destination URL as sent in the email.
    - `clicks` integer — Number of recorded clicks on this URL.
    - `percentage` number — This link's share of every recorded link click (0-100), including links beyond the returned top 20.
  - `polls` PollResultsSummary[] — Lifetime Poll and NPS summaries. Omitted when the campaign has no responses.
    - `blockId` string — Poll block id inside the email content.
    - `variant` 'options' | 'nps'
    - `question` string
    - `attributeKey` string — Subscriber attribute key where the current/latest response is stored. A later poll that reuses this key can overwrite it, so use a campaign-and-block-scoped pollResponse subscriber filter for an exact historical respondent drill-down. Omitted when the recorded responses carry no valid key.
    - `totalResponses` integer
    - `answers` object[] — Ordered by responses (options) or by score 0-10 (NPS, zero-filled).
      - `answer` string — Human-readable answer label captured when the response was recorded.
      - `value` string — Stable stored answer value. Use this field as the answer identifier when labels can change.
      - `responses` integer
      - `percentage` number — Share of the poll's responses (0-100, one decimal)
    - `nps` object — Present for NPS polls only.
      - `score` integer — Net Promoter Score (-100 to 100)
      - `average` number
      - `promoters` integer
      - `passives` integer
      - `detractors` integer

## Other responses

- `401` — Unauthorized
- `404` — Campaign not found

## Changes

- **2026-07-15** `8bc13491b9f6` — 1 info
  - added the optional property `clickedLinks` to the response with the `200` status
- **2026-07-14** `83e7fd773745` — 1 info
  - added the optional property `polls` to the response with the `200` status
- **2026-06-19** `fd494fa7e64d` — 1 info
  - added the new optional `query` request parameter `includeMachineEngagement`
- **2026-06-12** `f9a826460811` — 2 info
  - added the optional property `stats/conversions` to the response with the `200` status
  - added the optional property `stats/revenueCents` to the response with the `200` status
- **2026-05-15** `b040bb8c6608` — 2 info
  - added the optional property `stats/bounceRate` to the response with the `200` status
  - added the optional property `stats/bounced` to the response with the `200` status

[Full history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/campaigns/:campaignId/stats/get.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/d7ea66dede72/schema)
