Skip to main content
These endpoints are legacy. They use the unversioned /api/public/... paths. For new integrations, use the versioned API (/api/public/v1/...). The create, launch, and wallet endpoints are documented there only.
These four endpoints read study data. They authenticate with the x-api-key header (see Get API Access). The link_id path parameter also accepts the study’s id.

List Studies

This endpoint lists the studies in the key’s organization. It returns up to 5000 studies, newest first. It doesn’t support paging. GET https://listenlabs.ai/api/public/list_surveys

Response

Returns an array. Each study is an object with the following fields: id uuid Permanent unique identifier for the study. It never changes. Accepted by the versioned launch, questions, and response endpoints. link_id string The link ID of the study. This is the path parameter for the Get Responses, Get Single Response, and Get Study Questions endpoints. You can edit it in the study settings, so it might change. title string The title of the study. Returns "Untitled" when the study has no title. created_at string UTC timestamp of when the study was created. desc string A short description in the form "{title} ({count} Responses)". The count is the number of completed responses.

Errors

Example Request

Example Response


Get Responses

This endpoint lists the responses for a study. Responses marked as ignored and test responses are not returned. GET https://listenlabs.ai/api/public/responses/{link_id}

Path Parameters

link_id string The link ID or the id of the study. You can find the link ID in the study URL or with the List Studies endpoint. For example, in https://listenlabs.ai/s/abc123 the link ID is abc123.

Query Parameters

page integer default:"0" The page number, starting at 0. per_page integer default:"1000" Number of responses to return per page. Values above 10000 are reduced to 10000. updated_since string ISO 8601 date string. Returns responses updated at or after this time (e.g., 2023-08-18T11:51:54.649916Z). include_in_progress boolean default:"true" Set to false to leave out responses that are still in progress.

Paging

A response is left out when it has no answers. This happens after each page loads. A page can therefore have fewer items than per_page, even when more responses exist. Keep requesting the next page until a page is empty.

Response

Returns an array of responses. Each response is an object with the following fields: id uuid Unique identifier for the response. response_number number The ordered number of the response. created_at string UTC timestamp of when the response was created. updated_at string UTC timestamp of when the response was last updated. When an analysis finish time exists, this field shows that time instead. progress string The completion progress of the response: "complete", "in_progress", or "screened_out". response_duration_seconds number The total duration of the response in whole seconds. answers object Answers to the study’s questions. Keyed by question title, with no number prefix. Each value is everything the participant said in response to that question. There is no summary key: use tagline and bullet_summary for summaries. answers_array Answer[] Answers to the study’s questions as an array, in the same order as the study’s CSV export.
  • answer_id string: The answer ID. Matches the answer_id on transcript rows from the Get Single Response endpoint.
  • discussion_guide_question_id string | null: The question ID. Matches the id field from the Get Study Questions endpoint. Null when the answer isn’t tied to a question.
  • concept_id string | null: The concept ID. Null if the answer isn’t concept-specific.
  • question string: The question title. Prefixed with its number when one is available (e.g. "Q1: What is your age?").
  • answer string: The answer to the question.
  • option_ids string[]: The IDs of the options the participant selected. These match the id values in the choices list from Get Study Questions. Empty for open-ended answers and matrix questions.
  • matrix_selections object[]: For matrix questions. Each entry has row_id and column_id, which match the id values in the row_choices and column_choices lists. Empty for other question types.
  • question_id string deprecated: Deprecated. Use answer_id instead.
attributes object The visible URL parameters passed to the study. Some parameters are hidden.
  • id string: An ID passed to the study, e.g. https://listenlabs.ai/s/abc123?id=123.
short_transcript string | null A transcript of the entire conversation where the assistant messages are shortened to a couple of words. Null if the transcript has not been generated yet. The fields below appear only when the response has a value for them. short_assistant_messages string[] Condensed assistant turns used to build compact transcript context. bullet_summary string[] Concise bullet-point summary of the response. tags string[] Extracted keyword labels for the response. tagline string Short one-line synthesis for the response. summary string A natural-language summary of the response. quality_score number | string Response quality score, typically on a 1-5 scale. other_remarks string and personas string Additional remarks and the persona classification.

Errors

Example Request

Example Response


Get Single Response

This endpoint retrieves a single response for a study. GET https://listenlabs.ai/api/public/responses/{link_id}/{response_id}

Path Parameters

link_id string The link ID or the id of the study. For example, in https://listenlabs.ai/s/abc123 the link ID is abc123. response_id string The unique ID of the response you want to retrieve.

Response

Returns a single response with the following fields: id string The response ID from the path. survey string The study identifier from the path, as you sent it. transcript array A complete transcript of the conversation, with each entry containing:
  • moderator string: The message from the assistant/moderator.
  • user string: The response from the user.
  • discussion_guide_question_id string | null: The question ID for this row. Matches the id field from the Get Study Questions endpoint. Null for non-question rows (e.g. intro messages).
  • concept_id string | null: The concept ID for this row. Null if the question isn’t concept-specific.
  • answer_id string | null: The answer ID for this question. Matches the answer_id in the Get Responses endpoint’s answers_array. Null for non-question rows.
  • response_index number: The zero-based index of this row in the conversation history.
  • is_followup boolean: Whether this row is a follow-up to the same question as the previous row.
  • audio string | null: A signed URL to the audio recording of the user’s response. The URL is valid for 1 hour. Null if no audio recording exists. Null for redacted rows.
  • video object | null: Video playback information. Null if no video recording exists. Null for redacted rows.
    • stream_url string: HLS stream URL for the video recording.
    • mp4_url string: Direct MP4 download URL for the video recording.
  • question_uuid string deprecated: Deprecated. Use discussion_guide_question_id instead.

Errors

Example Request

Example Response: Audio and Text

Example Response: Video and Text

Example Response: Text Only


Get Study Questions

This endpoint retrieves the questions for a study. It returns the questions from the study’s latest revision, which can include unpublished edits. GET https://listenlabs.ai/api/public/studies/{study_id}/questions The field names in this response use snake_case. The versioned endpoint, Get Study Questions, returns the same data with camelCase names.

Path Parameters

study_id string The link ID or the id of the study. You can find the link ID in the study URL or with the List Studies endpoint.

Response

Returns an object with a questions array. Each question has a type field that determines its shape. Conjoint questions are not returned. questions array All question types share these base fields:
  • id string: Unique identifier for the question. Matches the discussion_guide_question_id field in the Get Responses and Get Single Response endpoints.
  • text string: The question text shown to participants.
  • is_screener boolean: Whether this question is part of the screening section.
  • type string: One of open_ended, file_upload, multiple_choice, ranking, statement, matrix, max_diff, or gabor_granger.
  • question_number number: The human-readable question number for display purposes.
  • concepts array: The concepts attached to this question (empty if the question is not part of a concept test block). Each concept contains:
    • id string: Unique identifier for the concept.
    • title string: The concept title.
    • description string: The concept description.
    • media array: Media attachments. Each has a type (image or video), a name, and a url (may be null). An error of media_unavailable is set when the file can’t be loaded.
    • embed_url string | null: An optional embed URL for the concept (e.g. a Figma or prototype link).
    • embed_error string: Present only when the embed can’t be loaded. The value is media_unavailable.
Other fields depend on the type:
  • multiple_choice: is_multi_select boolean, options string[], and choices object[]. Each choice has an id and text.
  • ranking: options string[] and choices object[]. The items to rank.
  • matrix: is_multi_select boolean, display string (grid or card_sort), rows string[], columns string[], row_choices object[], and column_choices object[]. Each choice has an id and text.
  • max_diff: options string[], choices object[], metric string, and items_per_screen number.
  • open_ended: task object, present only for task questions. It has url string | null, pip_enabled boolean, and destination_source string (concept, previous, or custom, when set).
  • gabor_granger: price_points number[], currency_code string, accept_intent_threshold number, and start_price_range string (all or middle).
  • file_upload and statement: base fields only.

Errors

Example Request

Example Response