---
title: "Retrieve a broadcast's engagement report"
method: GET
path: "/broadcasts/{id}/report"
tags: ["Campaigns"]
---

# Retrieve a broadcast's engagement report

`GET /broadcasts/{id}/report`

## Request

- Base URL: `https://sendhq.cc/api/v1`
- URL: `https://sendhq.cc/api/v1/broadcasts/{id}/report`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sendhq/apis/sendhq-api/docs/broadcasts/:id/report/get.ts> (a function with typed inputs; its response is checked against the schema)

Delivery and engagement for a sending or sent broadcast: unique and total opens and clicks, bounces, complaints, and unsubscribes with rates in percent (open and click rates are over delivered messages), the same by inbox provider, clicks per link, first opens and clicks hour by hour, and the workspace's average over its previous five sent broadcasts. Opens and clicks that looked automated (security scanners, link previews, privacy prefetching, data-center networks) are counted in `machine` and left out of every other number, so opens remain an estimate. `remaining` is how many people in a limited audience have not been sent it yet. Returns 409 for a draft.

## Path parameters

- `id` string, required

## Response `200`

Successful response

- object
  - `stats` object, required
    - `sent` integer, required
    - `delivered` integer, required
    - `opened` integer, required
    - `clicked` integer, required
    - `bounced` integer, required
    - `complained` integer, required
    - `unsubscribed` integer, required
    - `opens` integer, required
    - `clicks` integer, required
    - `rates` object, required
      - `delivery` integer, required
      - `open` number, required
      - `click` number, required
      - `clickToOpen` number, required
      - `bounce` number, required
      - `complaint` integer, required
      - `unsubscribe` number, required
  - `providers` object[], required
    - `provider` string, required
    - `label` string, required
    - `sent` integer, required
    - `delivered` integer, required
    - `opened` integer, required
    - `clicked` integer, required
    - `bounced` integer, required
    - `complained` integer, required
    - `openRate` number, required
    - `clickRate` number, required
  - `links` object[], required
    - `position` integer, required
    - `url` string, uri, required
    - `uniqueClicks` integer, required
    - `clicks` integer, required
    - `share` number, required
  - `timeline` object[], required
    - `hour` string, date-time, required
    - `opened` integer, required
    - `clicked` integer, required
  - `average` object, required
    - `basedOn` integer, required
    - `open` number, required
    - `click` number, required
    - `bounce` number, required
    - `unsubscribe` number, required
    - `delivery` number, required
  - `machine` object, required
    - `opens` integer, required
    - `clicks` integer, required
  - `tracking` object, required
    - `opens` boolean, required
    - `clicks` boolean, required
  - `totals` object, required
    - `queued` integer, required
    - `sending` integer, required
    - `sent` integer, required
    - `held` integer, required
    - `skipped` integer, required
    - `failed` integer, required
    - `total` integer, required
  - `remaining` integer, required

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid authentication
- `402`: A paid entitlement is required for this recipient or feature
- `403`: The workspace, domain, policy, or suppression state forbids the operation
- `404`: Tenant-scoped resource not found
- `409`: Resource state or idempotency conflict
- `413`: Attachment count or bytes exceed the accepted limit
- `422`: Request validation or suppression check failed
- `423`: Sending is paused for this sender identity or workspace; the message gives the reason and how to appeal
- `429`: A monthly, daily, or trial usage limit was reached
- `500`: Unexpected server error
- `502`: An upstream provider operation failed
- `503`: A required provider or signing configuration is unavailable
- `default`: An error response using SendHQ's standard JSON envelope

---

[API](https://skmtc.dev/sendhq/apis/sendhq-api.md) - [All operations](https://skmtc.dev/sendhq/apis/sendhq-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sendhq/apis/sendhq-api/revisions/98e39e48cb9a?raw)
