> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Campaign Poll Responses

> Retrieve individual Poll and NPS responses for a campaign.

Returns one row per respondent per Poll or NPS block in a campaign, newest answer first, with the answer, its stored value, the subscriber attribute the answer was saved to, and the response time.

The [campaign metrics endpoint](/api-reference/analytics/campaign-metrics) reports the answer distribution; this endpoint reports who answered what and when. Only each subscriber's latest answer per block is returned, so the counts match the `polls` summaries.

Poll answers are also written to a subscriber attribute, but that attribute carries no response time and holds the latest answer to any email, so respondents for one campaign cannot be reconstructed from it.

Also available at `GET /api/v1/campaigns/{campaignId}/poll-responses`.

## Path Parameters

<ParamField path="campaignId" type="string" required>
  The ID of the campaign. For a sequence email step, pass the step's automation
  node ID.
</ParamField>

## Query Parameters

<ParamField query="blockId" type="string">
  Restrict results to one poll block. Block IDs come from the `polls` array of
  the campaign metrics endpoint.
</ParamField>

<ParamField query="page" type="number" default="1">
  Page number for pagination.
</ParamField>

<ParamField query="limit" type="number" default="100">
  Responses per page (max 500).
</ParamField>

## Common Queries

### List everyone who answered a campaign poll

```bash theme={null}
curl "https://api.sequenzy.com/api/v1/metrics/campaigns/camp_abc123/poll-responses?limit=500" \
 -H "Authorization: Bearer YOUR_API_KEY"
```

### Scope to one poll block

```bash theme={null}
curl "https://api.sequenzy.com/api/v1/metrics/campaigns/camp_abc123/poll-responses?blockId=poll_1" \
 -H "Authorization: Bearer YOUR_API_KEY"
```

## Response Fields

Multi-select polls set `allowMultiple` to `true` and list every selected option in `answers`, with the stored values in the parallel `values` array. `email` is `null` when the subscriber has since been deleted.

## Responses

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "campaignId": "camp_abc123",
    "blockId": "poll_1",
    "responses": [
      {
        "subscriberId": "sub_123",
        "email": "user@example.com",
        "externalId": null,
        "firstName": "Ana",
        "lastName": null,
        "blockId": "poll_1",
        "variant": "options",
        "question": "Did you get your sample?",
        "attributeKey": "sample_received",
        "allowMultiple": false,
        "answers": ["Yes"],
        "values": ["yes"],
        "respondedAt": "2026-08-08T11:00:00.000Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 100,
      "total": 1,
      "totalPages": 1
    }
  }
  ```

  ```json 400 theme={null}
  { "success": false, "error": "'limit' must be a positive integer" }
  ```

  ```json 401 theme={null}
  { "success": false, "error": "Unauthorized" }
  ```

  ```json 404 theme={null}
  { "success": false, "error": "Campaign not found" }
  ```
</ResponseExample>
