Skip to main content
These endpoints all authenticate with the x-api-key header (see Get API Access). The create, launch, and wallet endpoints below build and launch studies; the response and study endpoints further down retrieve data from studies that are already live. For the full study-guide schema (every block type, question type, conditional, and validation rule) see the Study Creation API reference.

Create Study

Validates a study guide and creates a draft study in the API key’s organization. Nothing is visible to participants until you launch it. POST https://listenlabs.ai/api/public/v1/studies/create

Request Body

title string required Internal title of the study. externalTitle string Title shown to participants. background string Context about your company or product that the interviewer can draw on. studyGoal string What you are trying to learn. Guides the interviewer’s follow-ups. config object Interview settings. interviewMode (text, audio, audio_text, audio_screen, video, video_screen), questionLanguage (e.g. en, de), optional availableLanguages for auto-translation, and optional targetPlatforms. welcomeMessage object Optional title and message shown before the interview starts. closingMessage string Message shown when the interview ends. studyGuide Block[] required The ordered list of blocks that make up the interview. Each block has a type (flat, concept, or screening), a title, and an items array of questions. See the Study Guide Reference for the complete schema, all question types, conditionals, carry-forward, and cross-field validation rules.

Response

id uuid Permanent unique identifier for the study. Use it to launch. linkId string The link ID of the study (editable later in study settings). Use it with the response endpoints. status string Always draft for a freshly created study.

Example Request

Example Response

Errors

Every error response returns an error message and a stable code you should branch on. 400 schema failures (code: invalid_request_body) also include an issues array pointing at the offending fields; broken study-guide rules return code: invalid_study_guide.

Launch Study

Publishes a draft and returns its self-recruit link. Requires the API key’s user to have permission to start recruitment on the study. Project responses bill to the launch wallet. POST https://listenlabs.ai/api/public/v1/studies/{studyId}/launch

Path Parameters

studyId uuid The study’s permanent id returned from Create Study.

Request Body

The body is optional. walletId uuid Wallet to bill this study from; must be granted to the API key’s organization (see List Wallets). It can only be omitted when the organization has exactly one wallet, which is then auto-selected. If you have access to more than one wallet, omitting it returns a 400 (code: wallet_required).

Response

id uuid The study’s permanent identifier. linkId string The link ID of the study. selfRecruitLink string The public link to share with participants. status string Always live after a successful launch. wallet object The wallet this launch is billed to. Omitted when no wallet is bound (organization without wallet billing).

Example Request

Example Response

Errors


List Wallets

Lists the wallets granted to the API key’s organization, each with recruitment and project credit balances. Use a wallet’s walletId when launching a study. GET https://listenlabs.ai/api/public/v1/wallets

Response

wallets Wallet[] Each wallet is an object with the following fields:
  • walletId uuid — Identifier to pass when launching a study.
  • name string — Human-readable wallet name.
  • recruitmentCreditBalance object — Credits for recruiting participants. Has balance and usage (includes active holds).
  • projectCreditBalance object — Credits for project responses. Same balance / usage shape.

Example Request

Example Response


Get Responses

Deprecated starting August 1, 2026. This unversioned endpoint has been replaced by GET /api/public/v1/responses/{linkId}, which returns the same data with camelCase parameters and fields. Migrate before August 1, 2026.
This endpoint lists all responses for a given study. GET https://listenlabs.ai/api/public/responses/{link_id}

Path Parameters

link_id string The link ID of the study. You can find this in the study URL or via 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 for pagination. per_page integer default:"1000" Number of responses to return per page. updated_since string ISO 8601 date string to filter responses updated after this date (e.g., 2023-08-18T11:51:54.649916Z). include_in_progress boolean default:"true" Whether to include responses whose analysis is still in progress.

Response

Returns a list of responses for the given study. 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 (uses the analysis completion time when available). progress string The completion progress of the response (e.g. "complete", "in_progress"). response_duration_seconds number The total duration of the response in seconds. answers object Answers to all questions of the study.
  • Summary string — A summary of the entire conversation. Available for all studies.
  • Question 1 string — Everything the user said in response to question 1.
  • Question 2 string — Everything the user said in response to question 2.
answers_array Answer[] Answers to all questions of the study as an array.
  • answer_id string — The answer ID. Matches the answer_id on transcript rows from the single response endpoint, enabling cross-referencing.
  • discussion_guide_question_id string — The discussion guide question ID. Matches the id field from the Get Study Questions endpoint, enabling you to join answers with their question definitions.
  • concept_id string | null — The concept ID. Null if not concept-specific.
  • question_id string deprecated — Deprecated. Use answer_id instead.
  • question string — The question text, prefixed with its number when available (e.g. "Q1: What is your age?").
  • answer string — The answer to the question.
attributes object URL parameters that were passed to the study.
  • id string — An id that is 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. Can be null if the transcript has not been generated yet. short_assistant_messages string[] Condensed assistant turns used to build compact transcript context. bullet_summary string[] Concise bullet-point summary of the response. quality_score number Numeric response quality score, typically on a 1-5 scale. 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. May be omitted from the payload when a summary has not yet been generated for the response.

Example Request

Example Response


Get Single Response

Deprecated starting August 1, 2026. This unversioned endpoint has been replaced by GET /api/public/v1/responses/{linkId}/{responseId}, which returns the same data with camelCase fields and also accepts a readable numeric ID. Migrate before August 1, 2026.
This endpoint retrieves a single response for a specific study. GET https://listenlabs.ai/api/public/responses/{link_id}/{response_id}

Path Parameters

link_id string The link ID of the study. You can find this in the study URL or via the List Studies endpoint. For example, in https://listenlabs.ai/s/abc123 the link ID is abc123. response_id string The unique ID of the specific response you want to retrieve.

Response

Returns a single response with detailed information: id string Unique identifier for the response. survey string The link ID of the survey this response belongs to. 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 — The discussion guide question ID for this row. Matches the id field from the Get Study Questions endpoint, enabling you to join transcript rows with their question definitions.
  • 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 list endpoint’s answers_array, enabling cross-referencing between endpoints. Null for non-question rows (e.g. intro messages).
  • 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, if available. This URL is valid for 1 hour. Null if no audio recording exists.
  • video object | null — Video playback information, if available. If no video recording exists, this will be null.
    • 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.

Example Request

Example Response — Audio and Text

Example Response — Video and Text

Example Response — Text Only


Get Study Questions

This endpoint retrieves all questions for a specific study. GET https://listenlabs.ai/api/public/studies/{study_id}/questions

Path Parameters

study_id string The link ID of the study you want to retrieve questions for. You can find this in the study URL or via the List Studies endpoint.

Response

Returns an object containing a list of questions from the study’s latest revision. Each question includes its type and relevant metadata. questions array An array of question objects. Each question has a type field that determines its shape. All question types share these base fields:
  • id string — Unique identifier for the question. Matches the discussion_guide_question_id field in the response endpoints, enabling you to join questions with their corresponding transcript rows and answers.
  • text string — The question text shown to participants.
  • is_screener boolean — Whether this question is part of the screening section.
  • type string — The question type. One of: open_ended, multiple_choice, ranking, statement.
  • question_number number — The human-readable question number for display purposes.
  • concepts array — An array of concept objects 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 — An array of media attachments, each with a type (image or video), a name, and a url.
    • embed_url string | null — An optional embed URL for the concept (e.g. a Figma or prototype link).
Multiple choice questions (including scale questions) additionally include:
  • is_multi_select boolean — Whether the participant can select multiple options.
  • options string[] — The list of answer options.
Ranking questions additionally include:
  • options string[] — The list of items to rank.

Example Request

Example Response


List Studies

This endpoint lists all studies. GET https://listenlabs.ai/api/public/list_surveys

Response

Returns a list of studies. Each study is an object with the following fields: id uuid Permanent unique identifier for the study. link_id string The link ID of the study. This is editable in the study settings so it might change. title string The title of the study. created_at string UTC timestamp of when the study was created. desc string A description of the study. E.g. “My study (10 Responses)”.

Example Request

Example Response