---
title: "Create an IntakeFormQuestion"
method: POST
path: "/shop/intake-form-sections/{intakeFormSectionId}/questions"
tags: ["IntakeForms"]
---

# Create an IntakeFormQuestion

`POST /shop/intake-form-sections/{intakeFormSectionId}/questions`

Creates a new `IntakeFormQuestion` in the parent section. The new
question is appended to the end of the section's question list;
use the `intake-form-sections/{intakeFormSectionId}/questions/order`
endpoint to reposition it afterwards.

`question` and `type` are required. `multiple_choice` questions
additionally require at least two entries in
`multiple_choice_answers`. `terms_statement` HTML is sanitised
against the site's allowed-tag list before persisting.

Requires the `SETTINGS_MANAGE` permission on the section's site.

## Request body

- object — Shared schema for writable fields on `IntakeFormQuestion` — used as the `allOf` base for create and update request bodies. The `required` validation differs per operation and is layered on top of this base.
  - `question` string, required — The question text.
  - `type` 'additional_details' | 'date_time' | 'email' | 'multiple_choice' | 'phone' | 'terms_conditions' | 'text_long' | 'text' | 'yes_no', required — The type of question. Drives input rendering on the customer intake form and unlocks the type-specific fields below.
  - `multiple_choice_answers` object[], nullable — Available answers when `type=multiple_choice`. Must contain at least two entries when the type is `multiple_choice`.
    - `id` integer, required — Stable integer key for the answer. Used to reference the answer in `range` constraints and from the customer's submitted response.
    - `text` string, required — Display label for the answer.
  - `multiple_select_option` string, nullable — Optional bonus label rendered alongside the multiple-choice answers (e.g. "Other"). Only meaningful when `type=multiple_choice`.
  - `multiple_selection` boolean, nullable — Whether the customer can pick more than one `multiple_choice_answers` entry. Only meaningful when `type=multiple_choice`.
  - `additional_details` boolean, nullable — When true, the customer is prompted for free-text "additional details" alongside the structured answer.
  - `exact_number` string, nullable — Optional exact-number constraint for numeric questions.
  - `range` integer[], nullable — A two-element `[min, max]` constraint on `multiple_choice_answers` selections. Both bounds are inclusive; omit either to leave it unbounded.
  - `terms_statement` string, nullable — Terms text rendered alongside `type=terms_conditions` questions. HTML is sanitised to the site's allowed-tag list.
  - `placeholder` string, nullable — Placeholder text for the input field.
  - `required` boolean, nullable — Whether the customer must answer this question.

## Response `201`

The question was created successfully.

- object
  - `data` IntakeFormQuestion, required
    - `id` string, object-id, required — Unique identifier for the intake form question.
    - `additional_details` boolean, nullable, required — Whether additional details are enabled.
    - `exact_number` string, nullable, required — Exact number constraint for the question.
    - `multiple_choice_answers` object[], nullable, required — Available answers for multiple choice questions.
      - `id` string, required — The answer identifier.
      - `text` string, required — The answer text.
    - `multiple_select_option` string, nullable, required — Option for multiple select behavior.
    - `multiple_selection` boolean, nullable, required — Whether multiple answers can be selected.
    - `order` integer, nullable, required — Display order of the question within its section.
    - `placeholder` string, nullable, required — Placeholder text for the input field.
    - `question` string, required — The question text.
    - `range` integer[], nullable, required — A two-element array representing a min/max range.
    - `required` boolean, nullable, required — Whether the question must be answered.
    - `terms_statement` string, nullable, required — The terms statement text for terms_conditions type questions.
    - `type` 'additional_details' | 'date_time' | 'email' | 'multiple_choice' | 'phone' | 'terms_conditions' | 'text_long' | 'text' | 'yes_no', required — The type of question.

## Other responses

- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `404` — The resource couldn't be found
- `422` — The request didn't pass validation

---

[API](https://skmtc.dev/try/apis/trybe-api.md) · [All operations](https://skmtc.dev/try/apis/trybe-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/try/trybe-api/revisions/f37f92702da5/schema)
