---
title: "List a broadcast's recipients, outcomes, and engagement"
method: GET
path: "/broadcasts/{id}/recipients"
tags: ["Campaigns"]
---

# List a broadcast's recipients, outcomes, and engagement

`GET /broadcasts/{id}/recipients`

## Request

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

Per-recipient outcome (`queued`, `sending`, `sent`, `held`, `skipped` with a reason, or `failed` with the error), the email ID for delivery events, the inbox provider, and delivery, open, click, bounce, complaint, and unsubscribe times. Filter by `status`, by `activity` (`opened`, `clicked`, `not_opened`, `not_delivered`, `bounced`, `complained`, `unsubscribed`), or by an email substring in `query`. `include=links` (implied by `activity=clicked`) adds the links each recipient clicked. Opens are estimates and bot-filtered; they never prove that someone read the message.

## Path parameters

- `id` string, required

## Query parameters

- `status` 'queued' | 'sending' | 'sent' | 'held' | 'skipped' | 'failed'
- `activity` 'opened' | 'clicked' | 'not_opened' | 'not_delivered' | 'bounced' | 'complained' | 'unsubscribed'
- `query` string
- `include` 'links'
- `limit` integer
- `offset` integer

## Response `200`

Successful response

- object
  - `data` object[], required
    - `contactId` string, required
    - `email` string, email, required
    - `status` string, required
    - `skipReason` unknown, required
    - `emailId` string, required
    - `error` unknown, required
    - `attempts` integer, required
    - `sentAt` string, date-time, required
    - `provider` string, required
    - `deliveredAt` string, date-time, required
    - `openedAt` string, date-time, required
    - `clickedAt` unknown, required
    - `opens` integer, required
    - `clicks` integer, required
    - `bouncedAt` unknown, required
    - `complainedAt` unknown, required
    - `unsubscribedAt` unknown, required
  - `count` integer, 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

## 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)
