---
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
- `mailboxProvider` string
- `includeMachineEngagement` boolean

## Response `200`

Success

- object
  - `success` boolean
  - `campaignId` string
  - `period` string
  - `mailboxProvider` string — Echoed back when `mailboxProvider` is provided.
  - `stats` EngagementStats — Unified engagement metrics returned by analytics endpoints. When a period or start/end filter is applied these are a funnel over the sends made inside that window, not a log of events inside it: every delivery, engagement, and reply count is attributed to one of those sends, including activity that arrives after the window closes, so opened <= delivered <= sent always holds and no rate can exceed 100%. conversions and revenueCents are the exception and use the goal's own last-touch attribution window. 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)
    - `replies` integer — Inbound replies captured for delivered emails
    - `unsubscribed` integer
    - `deliveryRate` number — Percentage (0-100)
    - `bounceRate` number — Percentage (0-100), calculated from sent emails
    - `rateDenominator` integer — The number every engagement rate divides by: delivered, falling back to sent when no delivery events were recorded, and 0 when nothing was sent
    - `rateDenominatorBasis` 'delivered' | 'sent' | 'none' — Which field rateDenominator was taken from
    - `openRate` number — Percentage (0-100), opened / rateDenominator
    - `clickRate` number — Percentage (0-100), clicked / rateDenominator
    - `replyRate` number — Percentage (0-100), replies / rateDenominator
    - `unsubscribeRate` number — Percentage (0-100), unsubscribed / rateDenominator
    - `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'
    - `allowMultiple` boolean — Present and true for multi-select polls, where recipients save a set of options from the hosted selection page and the attribute stores the list of selected values.
    - `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 — Number of respondents (subscribers whose latest answer selects at least one option; a cleared multi-select submit counts as no answer). Also the percentage denominator.
    - `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 respondents (0-100, one decimal). Sums can exceed 100 for multi-select polls.
    - `nps` object — Present for NPS polls only.
      - `score` integer — Net Promoter Score (-100 to 100)
      - `average` number
      - `promoters` integer
      - `passives` integer
      - `detractors` integer
  - `recommendations` RecommendationMetrics — Product recommendation funnel for a campaign or sequence. Returned as a top-level `recommendations` object when recommendation blocks were rendered. The requested period or custom time range scopes impressions and clicks. Orders and revenue are attributed when a subscriber buys a recommended product within 7 days of a scoped click.
    - `impressions` integer — Total recommended products rendered across all sends.
    - `recipients` integer — Unique subscribers shown at least one recommendation.
    - `clicks` integer — Recorded clicks on recommended products.
    - `clickers` integer — Unique subscribers who clicked a recommendation.
    - `orders` integer — Orders containing a clicked recommended product.
    - `revenueCents` integer — Legacy sum of attributed order minor units across currencies. Use revenueByCurrency for display or financial analysis.
    - `revenueByCurrency` object[] — Currency-safe attributed revenue totals. UNKNOWN identifies orders whose source event omitted currency.
      - `currency` string — ISO 4217 code or UNKNOWN.
      - `revenueCents` integer — Attributed revenue in this currency's minor units.
    - `topProducts` object[] — Per-product impressions and clicks, most clicked first.
      - `provider` string — Commerce provider (shopify, woocommerce, ...).
      - `providerProductId` string — Product ID in the provider's catalog.
      - `impressions` integer
      - `clicks` integer

## Other responses

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

---

[API](https://skmtc.net/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.net/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/versions/af1cf9620482/schema)
