---
title: "Fetch questionnaire by ID"
method: GET
path: "/api/v1/questionnaires/{id}"
tags: ["Questionnaires"]
---

# Fetch questionnaire by ID

`GET /api/v1/questionnaires/{id}`

## Request

- Base URL: `https://api.checkcherry.com`
- URL: `https://api.checkcherry.com/api/v1/questionnaires/{id}`
- Auth: none declared. Required headers: `Api-Key`

Returns a single questionnaire, including its question structure (`data`) and the answers collected so far (`values`).

`kind` tells you what you are looking at. A `standard` questionnaire carries its questions in `data.fieldGroups`, keyed by field UUID in `values`. An `external` one carries no questions — open `external_url` instead.

`url` is a browser link to the questionnaire that works for the customer without a login. For external questionnaires it redirects to `external_url`.

**Required permission:** `assigned_event_read` or `unassigned_event_read`. Customers can always read questionnaires on their own bookings where `allow_customer_view` is set.

## Path parameters

- `id` integer, required

## Headers

- `Api-Key` string, required

## Response `200`

questionnaire found

- object
  - `data` object
    - `attributes` object
      - `data` QuestionnaireData: A questionnaire's questions. Empty for an external questionnaire, whose questions live on another site.
        - `title` string: The questionnaire's name.
        - `fieldGroups` QuestionnaireFieldGroup[]: The tabs, in the order the customer moves through them.
          - `name` string: The label shown on the tab.
          - `fields` QuestionnaireField[]: The questions on this tab, in order.
            - `uuid` union, required: Identifies the field. Answers in `values` are keyed by this. Older questionnaires store it as a number rather than a string.
              - …
            - `type` 'header' | 'subheader' | 'separator' | 'plain_text' | 'rich_text' | 'static_image' | 'text_field' | 'double_text_field' | 'triple_text_field' | 'quadruple_text_field' | 'text_box' | 'dropdown' | 'radio_group' | 'checkbox' | 'checkbox_group' | 'date_field' | 'time_field' | 'color_picker_field' | 'file_uploader_field' | 'image_uploader_field' | 'e_sign_field' | 'song' | 'song_list' | 'spotify_playlist' | 'apple_music_playlist' | 'youtube_music_playlist' | 'music_playlist', required: Decides how the question is shown and which element its answer is stored under. See the Questionnaires section for the full table.
            - `name` string, nullable: The question as shown to the person answering.
            - `hint` string, nullable: Help text shown with the question.
            - `placeholder` string, nullable: Shown in the empty input. Multi-part text fields also use placeholder2, placeholder3 and placeholder4 for their later parts.
            - `label` string, nullable: The wording beside a single checkbox.
            - `required` boolean: Whether an answer is needed before the questionnaire can be submitted.
            - `values` string[]: The options offered by a dropdown, radio group or checkbox group. Not to be confused with the questionnaire-level `values`, which holds answers.
            - `content` string, nullable: The text shown by a plain_text or rich_text field. rich_text holds HTML.
            - `imageUrl` string, nullable: The image shown by a static_image field.
            - `allowMultipleEntries` boolean: Whether the question can be answered more than once. Each repeat is one entry in the array under this field in `values`.
            - `maximumEntries` integer, nullable: How many repeats are allowed, when there is a limit.
            - `suggestionListId` integer, nullable: On a `song` or `song_list` question, the suggestion list the answer is picked from. Fetch `GET /api/v1/suggestion_lists/{id}` to see the songs on offer. Not to be confused with `songSuggestionListId` in `values`, which records the list a chosen song actually came from. This one is the question; that one is the answer.
            - `allowCustomSongEntry` boolean: On a `song` or `song_list` question with a `suggestionListId`, whether an answer may name a song that is not on the list. With no `suggestionListId` every answer is a custom one.
            - `conditional` boolean: Whether the question is only shown when `conditions` are met.
            - `conditions` object[]: Evaluated together; all must hold for the question to be shown.
              - …
            - `timelineEnabled` boolean: Whether the question also carries a time on the event timeline.
            - `timelineSettings` object: Only meaningful when `timelineEnabled` is true.
              - …

---

[API](https://skmtc.dev/checkcherry/apis/check-cherry-business-api.md) · [All operations](https://skmtc.dev/checkcherry/apis/check-cherry-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/checkcherry/apis/check-cherry-business-api/revisions/84a9aabdf519?raw)
