---
title: "Get campaign performance statistics"
method: GET
path: "/campaigns/{id}/stats"
tags: ["Campaigns"]
---

# Get campaign performance statistics

`GET /campaigns/{id}/stats`

Returns sent count and open/click/bounce/unsubscribe/spam counts and rates, all read from stored counters.

Pass `include_link_stats=true` to also get `link_stats` — the campaign's links ranked by click count. That part is opt-in because it counts rows in `email_link_clicks` once per link rather than reading a counter, so leaving it off keeps this endpoint as cheap as it has always been.

## Query parameters

- `include_link_stats` boolean
- `link_limit` integer

## Response `200`

Successful response

- CampaignStats
  - `link_stats` object[] — The campaign's links ranked by click count, most-clicked first. Present only when include_link_stats is true — it is the one part of this payload that queries rather than reading a stored counter.
    - `url` string
    - `clicks` integer
  - `sent_count` integer
  - `unique_open_count` integer
  - `unique_click_count` integer
  - `unsubscribe_count` integer
  - `bounce_count` integer
  - `spam_count` integer
  - `open_rate` number, float
  - `click_rate` number, float
  - `unsubscribe_rate` number, float
  - `bounce_rate` number, float
  - `spam_rate` number, float

## Other responses

- `403` — Forbidden. Most often an ownership/authorization failure (Laravel's default `{"message": "..."}` shape). If the account is restricted by SendFox, the response instead carries the structured `account_restricted` body with a link to the account status page.
- `404` — Campaign not found

---

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