Responses

List responses

Retrieve responses for a study, transcripts included. Supports filtering by study, distribution, status, date range, and more. Without an environment filter, preview responses are left out. Returns one page of limit responses (default 50), ordered by creation time (newest first); pass next_cursor back as cursor to read the next page.

get/api/v1/responses

Request

  • Base URL
    https://app.voicepanel.com
  • URL
    https://app.voicepanel.com/api/v1/responses
  • Auth
    HTTP bearer

Query parameters

studyIdstring
Example:stdy_Qm3vR8tLp2XnWz

Filter by study ID

startDateTimestring
Example:2026-03-02T15:12:00.000Z

Return responses created at or after this ISO 8601 datetime

endDateTimestring
Example:2026-03-31T23:59:59.000Z

Return responses created at or before this ISO 8601 datetime

environment'production' | 'preview'
Example:production

production (the default) returns production and simulation responses. preview returns preview responses only.

hasMessages'true' | 'false'
Example:true

true returns responses with at least one answer. false returns the rest.

'created' | 'opened' | 'incomplete' | 'completed' | 'in_progress'

Where the response is in its lifecycle. created: the link was opened but the welcome screen was not passed. opened: the respondent passed the welcome screen. in_progress: the respondent answered at least one question. completed: the interview finished. incomplete: the respondent left before the end, or was screened out.

OR
string[]

Filter by response status. Repeat the parameter to match more than one status.

string
OR
string[]

Filter by distribution ID. Repeat the parameter to match more than one distribution.

string
OR
string[]

Filter by response ID. Repeat the parameter to match more than one response.

limitinteger

Page size (1-200). Defaults to 50. When has_more is true, pass next_cursor back as cursor to read the next page.

cursorstring

Opaque cursor from a previous page's next_cursor. Returns the rows after that position.

Response

Successful response

has_moreboolean required

True when rows exist after the last one in data

next_cursorstring nullable required

Pass back as cursor to read the next page

Example response

{
  "data": [
    {
      "id": "3f9c2b7e-5d41-4a8e-9b0c-7e2f1a6d4c58",
      "study_id": "stdy_Qm3vR8tLp2XnWz",
      "distribution_id": "dst_7C1hPliVteu3n4",
      "status": "completed",
      "status_reason": "answered_all_questions",
      "mode": "production",
      "format": "audio",
      "language": "en",
      "custom_id": "user-48213",
      "messages": [
        {
          "role": "moderator",
          "content": {
            "type": "question",
            "value": "How often do you order groceries for delivery?"
          },
          "sectionNumber": 1,
          "stepNumber": 1,
          "probeNumber": 1,
          "secondsElapsed": 12.4,
          "sectionId": "1"
        },
        {
          "role": "respondent",
          "content": {
            "type": "single_select",
            "value": "Weekly or more"
          },
          "sectionNumber": 1,
          "stepNumber": 1,
          "probeNumber": 1,
          "secondsElapsed": 18.9,
          "sectionId": "1"
        },
        {
          "role": "moderator",
          "content": {
            "type": "question",
            "value": "What made you try Acme Fresh for the first time?"
          },
          "sectionNumber": 1,
          "stepNumber": 2,
          "probeNumber": 1,
          "secondsElapsed": 24.1,
          "sectionId": "1"
        },
        {
          "role": "respondent",
          "content": {
            "type": "spoken",
            "value": "A friend sent me a referral code, and the first delivery arrived in under an hour."
          },
          "sectionNumber": 1,
          "stepNumber": 2,
          "probeNumber": 1,
          "secondsElapsed": 110.6,
          "sectionId": "1"
        },
        {
          "role": "moderator",
          "content": {
            "type": "question",
            "value": "What about that first delivery stood out to you?"
          },
          "sectionNumber": 1,
          "stepNumber": 2,
          "probeNumber": 2,
          "secondsElapsed": 115,
          "sectionId": "1"
        },
        {
          "role": "respondent",
          "content": {
            "type": "spoken",
            "value": "The driver texted when they were close, and nothing was missing from the order."
          },
          "sectionNumber": 1,
          "stepNumber": 2,
          "probeNumber": 2,
          "secondsElapsed": 240.3,
          "sectionId": "1"
        },
        {
          "role": "moderator",
          "content": {
            "type": "question",
            "value": "How likely are you to recommend Acme Fresh to a friend?"
          },
          "sectionNumber": 1,
          "stepNumber": 3,
          "probeNumber": 1,
          "secondsElapsed": 246,
          "sectionId": "1"
        },
        {
          "role": "respondent",
          "content": {
            "type": "rating_scale",
            "value": "5"
          },
          "sectionNumber": 1,
          "stepNumber": 3,
          "probeNumber": 1,
          "secondsElapsed": 255.5,
          "sectionId": "1"
        }
      ],
      "translated_messages": [
        {
          "role": "moderator",
          "content": {
            "value": "What made you try Acme Fresh for the first time?"
          }
        }
      ],
      "summary": "Orders groceries weekly. Tried Acme Fresh through a friend's referral code and stayed for the fast, accurate deliveries. Very likely to recommend it.",
      "seconds_elapsed": 270,
      "include_in_analysis": true,
      "has_messages": true,
      "message_media_expected": 2,
      "message_media_completed": 2,
      "seq_num": 42,
      "opened_at": "2026-03-09T18:39:00.000Z",
      "first_message_at": "2026-03-09T18:39:30.000Z",
      "last_message_at": "2026-03-09T18:43:15.000Z",
      "created_at": "2026-03-09T18:38:50.000Z",
      "updated_at": "2026-03-09T18:45:00.000Z"
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.