---
title: "Create an IntakeFormSection"
method: POST
path: "/shop/intake-form-sections"
tags: ["IntakeForms"]
---

# Create an IntakeFormSection

`POST /shop/intake-form-sections`

Use this endpoint to create a new `IntakeFormSection`.

## Request body

- object
  - `description` string — Admin-facing description of what this intake form section captures. Visible in the questionnaire builder but not shown to customers.
  - `intro_text` string, nullable — Optional rich-text shown to the customer at the top of the section, before the questions. Markdown is rendered.
  - `offerings` OfferingIdentifier[] — Offerings this intake form section is attached to. When a customer books one of these offerings, the section is surfaced in the intake flow.
    - `offering_id` string, mongo-id, required — The ID of the offering.
    - `offering_name` string, required — The name of the offering.
    - `offering_type` 'appointment' | 'appointment_enquiry' | 'area_booking' | 'course' | 'hotel_room_reservation' | 'membership' | 'package' | 'product' | 'session' | 'table_reservation' | 'voucher', required — Discriminator describing what kind of sellable item an `Offering` represents. The value determines which downstream schema (`Appointment`, `Session`, `Package`, etc.) the offering's `offering_id` resolves against, and which checkout/booking flow applies.
  - `outro_text` string, nullable — Optional rich-text shown to the customer at the foot of the section, after the questions. Useful for thank-yous or follow-up instructions.
  - `site_id` string, uuid, required — ID of the site this intake form section belongs to.
  - `title` string, required — Customer-facing heading for the section. Plain text only — HTML tags are stripped.
  - `type` 'mandatory', nullable — Optional category flag. `mandatory` marks the section as non-skippable in the intake flow — the customer must complete it before checkout. Null (the default) makes the section advisory.

## Response `201`

Successfully created an `IntakeFormSection`.

- object
  - `data` IntakeFormSection, required
    - `id` string, object-id, required
    - `created_at` string, date-time, nullable, required
    - `deleted_at` string, date-time, nullable
    - `description` string, required — Admin-facing description of what this intake form section captures. Visible in the questionnaire builder but not shown to customers.
    - `intro_text` string, nullable, required — Optional rich-text shown to the customer at the top of the section, before the questions. Markdown is rendered.
    - `offerings` OfferingIdentifier[], required
      - `offering_id` string, mongo-id, required — The ID of the offering.
      - `offering_name` string, required — The name of the offering.
      - `offering_type` 'appointment' | 'appointment_enquiry' | 'area_booking' | 'course' | 'hotel_room_reservation' | 'membership' | 'package' | 'product' | 'session' | 'table_reservation' | 'voucher', required — Discriminator describing what kind of sellable item an `Offering` represents. The value determines which downstream schema (`Appointment`, `Session`, `Package`, etc.) the offering's `offering_id` resolves against, and which checkout/booking flow applies.
    - `outro_text` string, nullable, required — Optional rich-text shown to the customer at the foot of the section, after the questions. Useful for thank-yous or follow-up instructions.
    - `questions` 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.
    - `title` string, required — Customer-facing heading for the section. Plain text only — HTML tags are stripped.
    - `type` 'mandatory', nullable, required
    - `updated_at` string, date-time, required — When then resource was last updated.

## Other responses

- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `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)
