> ## Documentation Index
> Fetch the complete documentation index at: https://docs.listenlabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Study Questions

> Get the participant-facing questions and concepts from a study's latest revision

<Note>
  Replaces the legacy
  [`GET /api/public/studies/{study_id}/questions`](/get-study-questions)
  endpoint, deprecated starting **August 1, 2026**.
</Note>

Each question's `id` matches the `discussionGuideQuestionId` field in the
[response endpoints](/api-v2/list-responses), so you can join questions with
their corresponding answers and transcript rows — see the
[Data Map](/data-map).

### Path Parameters

<ParamField path="studyId" type="string" required>
  The study's `id` or `linkId`, both returned by
  [List Studies](/api-v2/list-studies). The legacy endpoint accepts only the
  `linkId`.
</ParamField>

### Response

<ResponseField name="questions" type="object[]" required>
  The participant-facing questions from the study's latest editable revision.
  Each question has a `type` field that determines its shape.

  <Expandable title="Question Types">
    #### Common Fields

    All question types share these base fields:

    <ResponseField name="id" type="string" required>
      Unique identifier for the question. Matches the `discussionGuideQuestionId`
      field in the response endpoints, enabling you to join questions with their
      corresponding transcript rows and answers.
    </ResponseField>

    <ResponseField name="text" type="string" required>
      The question text shown to participants.
    </ResponseField>

    <ResponseField name="isScreener" type="boolean" required>
      Whether this question is part of the screening section.
    </ResponseField>

    <ResponseField name="type" type="string" required>
      The question type. One of: `open_ended`, `file_upload`, `multiple_choice`,
      `ranking`, `statement`, `matrix`, `max_diff`.
    </ResponseField>

    <ResponseField name="questionNumber" type="integer" required>
      The human-readable question number (1-based) for display purposes.
    </ResponseField>

    <ResponseField name="concepts" type="object[]" required>
      An array of concept objects attached to this question (empty if the question
      is not part of a concept test block).

      <Expandable title="Concept Object">
        <ResponseField name="id" type="string" required>
          Unique identifier for the concept. Referenced by `conceptId` on answers
          and transcript rows.
        </ResponseField>

        <ResponseField name="title" type="string" required>
          The concept title.
        </ResponseField>

        <ResponseField name="description" type="string" required>
          The concept description.
        </ResponseField>

        <ResponseField name="media" type="object[]" required>
          An array of media attachments.

          <Expandable title="Media Object">
            <ResponseField name="type" type="string" required>
              The media type. One of: `image`, `video`.
            </ResponseField>

            <ResponseField name="name" type="string" required>
              The file name of the media.
            </ResponseField>

            <ResponseField name="url" type="string" required>
              The URL of the media file.
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="embedUrl" type="string | null" required>
          An optional embed URL for the concept (e.g. a Figma or prototype link).
        </ResponseField>
      </Expandable>
    </ResponseField>

    #### Multiple Choice Questions

    `type: "multiple_choice"` questions additionally include:

    <ResponseField name="isMultiSelect" type="boolean" required>
      Whether the participant can select multiple options.
    </ResponseField>

    <ResponseField name="options" type="string[]" required>
      The list of answer options.
    </ResponseField>

    #### Ranking Questions

    `type: "ranking"` questions additionally include:

    <ResponseField name="options" type="string[]" required>
      The list of items to rank.
    </ResponseField>

    #### Matrix Questions

    `type: "matrix"` questions additionally include:

    <ResponseField name="isMultiSelect" type="boolean" required>
      Whether multiple selections are allowed per row.
    </ResponseField>

    <ResponseField name="rows" type="string[]" required>
      The row labels rated by the participant.
    </ResponseField>

    <ResponseField name="columns" type="string[]" required>
      The column labels each row is rated across.
    </ResponseField>

    #### MaxDiff Questions

    `type: "max_diff"` questions additionally include:

    <ResponseField name="options" type="string[]" required>
      The items being compared.
    </ResponseField>

    <ResponseField name="metric" type="string" required>
      What participants judge the items on (e.g. "importance").
    </ResponseField>

    <ResponseField name="itemsPerScreen" type="integer" required>
      How many items are shown per comparison screen.
    </ResponseField>

    #### Open-Ended, File Upload & Statement Questions

    `type: "open_ended"`, `type: "file_upload"`, and `type: "statement"` questions
    carry only the common fields.
  </Expandable>
</ResponseField>

### Errors

Errors share the [common envelope](/api-v2/overview#errors) (`error` + `code`):

| Status | Code                                  | Meaning                                                        |
| ------ | ------------------------------------- | -------------------------------------------------------------- |
| `401`  | `missing_api_key` / `invalid_api_key` | Missing or invalid API key.                                    |
| `403`  | `forbidden`                           | The key's user isn't a member of the key's organization.       |
| `404`  | `study_not_found`                     | Study not found in the key's organization.                     |
| `500`  | `internal_error`                      | Internal error (details are logged server-side, not returned). |

<RequestExample>
  ```bash Example Request theme={null}
  curl 'https://listenlabs.ai/api/public/v1/studies/9b2f1c3e-0000-0000-0000-000000000000/questions' \
    -H 'x-api-key: <api_key>'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "questions": [
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000001",
        "text": "How often do you drink coffee?",
        "isScreener": true,
        "questionNumber": 1,
        "type": "multiple_choice",
        "isMultiSelect": false,
        "options": ["Every day", "A few times a week", "Rarely or never"],
        "concepts": []
      },
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000002",
        "text": "Tell me about the last time you tried a new coffee brand.",
        "isScreener": false,
        "questionNumber": 2,
        "type": "open_ended",
        "concepts": []
      },
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000003",
        "text": "What's your first impression of this design?",
        "isScreener": false,
        "questionNumber": 3,
        "type": "open_ended",
        "concepts": [
          {
            "id": "c1d2e3f4-0000-0000-0000-000000000001",
            "title": "Minimal design",
            "description": "Clean white packaging with a single accent color.",
            "media": [
              {
                "type": "image",
                "name": "minimal.png",
                "url": "https://example.com/minimal.png"
              }
            ],
            "embedUrl": null
          }
        ]
      },
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000004",
        "text": "How satisfied are you with each of the following?",
        "isScreener": false,
        "questionNumber": 4,
        "type": "matrix",
        "isMultiSelect": false,
        "rows": ["Taste", "Price", "Availability"],
        "columns": ["Not satisfied", "Somewhat satisfied", "Very satisfied"],
        "concepts": []
      },
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000005",
        "text": "Rank these brands from most to least trusted.",
        "isScreener": false,
        "questionNumber": 5,
        "type": "ranking",
        "options": ["Blue Bottle", "Stumptown", "Lavazza"],
        "concepts": []
      },
      {
        "id": "a1b2c3d4-0000-0000-0000-000000000006",
        "text": "Which of these matters most and least when choosing a coffee?",
        "isScreener": false,
        "questionNumber": 6,
        "type": "max_diff",
        "options": ["Price", "Origin", "Roast level", "Brand"],
        "metric": "importance",
        "itemsPerScreen": 4,
        "concepts": []
      }
    ]
  }
  ```
</ResponseExample>
