---
title: "Get survey responses for a survey"
method: GET
path: "/surveys/{id}/responses"
tags: ["surveys"]
---

# Get survey responses for a survey

`GET /surveys/{id}/responses`

Returns paginated survey responses visible to the caller, optionally filtered by time range, account, or contact.

**Rate limit:** 300 requests per minute

## Path parameters

- `id` string, required

## Query parameters

- `submitted_after` string
- `submitted_before` string
- `account_id` string
- `contact_id` string
- `cursor` string
- `limit` integer

## Response `200`

- GetSurveyResponsesResponseBody
  - `data` SurveyResponse[] — The data payload of the response.
    - `account_id` string — The ID of the account associated with the response.
    - `answers` SurveyResponseAnswer[] — The answers submitted in this response.
      - `prompt` string — The prompt/question that was answered.
      - `question_id` string — The ID of the survey question, when applicable.
      - `question_type` string — The type of question (score or comment).
      - `value` string — The value of the answer.
    - `contact_id` string — The ID of the contact who submitted the response.
    - `excluded_at` string, date-time — When the response was excluded from analytics.
    - `id` string — The unique identifier of the survey response.
    - `issue_id` string — The ID of the issue associated with this response, when applicable.
    - `submitted_at` string, date-time — When the response was submitted.
    - `survey_id` string — The ID of the survey template associated with this response.
    - `survey_instance_id` string — The ID of the individual survey delivery that produced this response.
    - `survey_type` 'nps' | 'csat' | 'custom' — The type of survey associated with this response.
  - `pagination` Pagination
    - `cursor` string, required — The cursor for the next page of results.
    - `has_next_page` boolean, required — Indicates if there is a next page of results.
  - `request_id` string — The request ID for tracking.

## Other responses

- `400` — The request was invalid or could not be completed.
- `403` — The authenticated caller or organization is not allowed to access this endpoint or operation.
- `404`
- `500` — An unexpected internal error occurred.

## Changes

- **2026-08-28** `fe3adb90ea45` — 1 info
  - added the non-success response with the status `403`
- **2026-08-27** `9fa10bb80c73` — 6 info
  - added the optional property `data/items/answers/items/question_id` to the response with the `200` status
  - added the optional property `data/items/excluded_at` to the response with the `200` status
  - added the optional property `data/items/issue_id` to the response with the `200` status
  - added the optional property `data/items/survey_id` to the response with the `200` status
  - …2 more

[Change history](https://skmtc.dev/usepylon/apis/pylon-api/changes/surveys/:id/responses/get.md)

---

[API](https://skmtc.dev/usepylon/apis/pylon-api.md) · [All operations](https://skmtc.dev/usepylon/apis/pylon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usepylon/pylon-api/revisions/7b12ab92de27/schema)
