Responses

Get a response

Retrieve a single response by its ID, with its full transcript in messages. A response.completed webhook event names the response; read the transcript here.

get/api/v1/responses/{response_id}

Request

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

Path parameters

response_idstring required
Example:3f9c2b7e-5d41-4a8e-9b0c-7e2f1a6d4c58

The response ID

Response

Successful response

idstring required

Response ID

study_idstring required

ID of the study

distribution_idstring nullable required

ID of the distribution the participant came through. Null for a preview.

segment_idstring nullable required

ID of the segment the participant was recruited for

status'created' | 'opened' | 'incomplete' | 'completed' | 'in_progress' required

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.

status_reason'exited_welcome_screen' | 'exited_paused_screen' | 'started_interview' | 'screened_out' | 'interview_error' | 'spam' | 'hit_time_limit' | 'answered_all_questions' | 'content_filter' | 'inactive_timeout' | 'recording_stopped' | 'quota_full' nullable required

Why the response has its status. answered_all_questions and hit_time_limit go with completed. exited_welcome_screen, exited_paused_screen, screened_out, quota_full, inactive_timeout, recording_stopped, interview_error, content_filter and spam go with incomplete. started_interview goes with in_progress.

mode'preview' | 'production' | 'simulation' required

The environment the response was collected in. production responses come from real participants. preview responses come from the dashboard preview. simulation responses come from AI simulated participants. Previews and simulations do not count toward quotas, and only production responses fire webhooks.

format'video' | 'audio' | 'chat' | 'audio_only' | 'chat_only' required

How the respondent answered the open-ended questions. video records the camera. audio and audio_only record the voice. chat and chat_only are typed. An _only value means the study offered no other input.

languagestring required

ISO 639-1 code of the language the participant took the interview in

custom_idstring nullable required

Your own participant ID, read from the cid query parameter of the study link

emailstring nullable required

Participant email, when collected

summarystring nullable required

AI-generated summary of the response, when one was made

seconds_elapsednumber required

Seconds the participant spent in the interview

include_in_analysisboolean nullable required

Whether the response counts in analysis. A completed response is included unless a reviewer rejects it.

has_messagesboolean nullable required

True when the participant answered at least one question

has_evaluated_screen_outboolean required

Whether the screen-out criteria were evaluated

call_idstring nullable required

ID of the phone call, for phone interviews

call_provider'vapi' | 'retell' nullable required

Provider of the phone call

message_media_expectedinteger nullable required

Per-answer recordings the plan asks for

message_media_completedinteger nullable required

Per-answer recordings that were uploaded

section_media_expectedinteger nullable required

Section recordings (screen, camera) the plan asks for

section_media_completedinteger nullable required

Section recordings that were uploaded

panel_incentive_amountnumber nullable required

Incentive the participant was recruited at, in whole USD. Panel distributions only.

panel_recruiting_feenumber nullable required

Recruiting fee at recruitment, in whole USD. Panel distributions only.

seq_numinteger nullable required

The response number shown in the dashboard. It counts up from 1 within the study.

opened_atstring date-time nullable required

When the participant passed the welcome screen

first_message_atstring date-time nullable required

When the participant answered the first question

last_message_atstring date-time nullable required

When the transcript last changed

created_atstring date-time nullable required

When the link was opened

updated_atstring date-time nullable required

When the response last changed

Example response

{
  "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.