# List a campaign's recipients and their outcomes

Source: https://docs.usetone.ai/reference/campaigns/listRecipients

> A recipient row names its LAST attempt.

`GET /v1/campaigns/{id}/recipients`
A recipient row names its LAST attempt. For every call the campaign placed, retries included, filter `GET /v1/calls` by `campaign_id` instead.

Requires the `read` scope.

## Parameters

| Name | In | | Meaning |
|---|---|---|---|
| `id` | path | required | The campaign's id. |
| `limit` | query | optional | How many results to return. 1-100, defaulting to 25. |
| `cursor` | query | optional | Opaque page cursor — pass `meta.pagination.cursor` from the previous response to fetch the next page. Its contents are an implementation detail; do not parse or construct one. |
| `status` | query | optional | Only recipients in this state. Open set — handle an unrecognised value rather than throwing. Today: `pending`, `dialing`, `done`, `excluded`, `failed`. |
| `disposition` | query | optional | Only recipients whose LAST attempt ended this way. A recipient row names one attempt — for every call a campaign placed, retries included, filter GET /v1/calls by campaign_id instead. Open set — handle an unrecognised value rather than throwing. Today: `answered`, `no_answer`, `busy`, `failed`, `voicemail`, `unknown`. |
| `excluded_reason` | query | optional | Only recipients excluded at launch for this reason. Each excluded recipient is counted against exactly one reason. Open set — handle an unrecognised value rather than throwing. Today: `invalid_number`, `duplicate`, `dnc`, `frequency_cap`, `dnd_scrub`, `blocked_by_gate`. |
| `search` | query | optional | Substring match on the recipient number. |

## Response



### Example response

```json
{
  "data": [
    {
      "attemptCount": 0,
      "costPaise": 0,
      "createdAt": "2026-08-25T09:14:22Z",
      "disposition": "answered",
      "e164": "+919876543210",
      "excludedReason": "invalid_number",
      "id": "9f1c2d84-4e3a-4f6c-b902-7d1e8a33c451",
      "lastCallId": "9f1c2d84-4e3a-4f6c-b902-7d1e8a33c451",
      "nextAttemptAt": "2026-08-25T09:14:22Z",
      "outcome": {},
      "status": "running",
      "talkSeconds": 0,
      "variables": {}
    }
  ]
}
```
