Booking Flow

Intake Forms

Endpoints to manage IntakeFormSections and IntakeFormQuestions.

get/shop/intake-form-sections

List intake form sections

listIntakeFormSections

Use this endpoint to return a paginated list of IntakeFormSections.

Query parameters

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

  • site_idstringoptional

    Filter results by the site they belong to

  • typestringoptional

    Filter sections by type. Omitting this parameter returns sections where type is null.

    Possible values:mandatory

Responses

  • 200

    A paginated list of IntakeFormSections.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

post/shop/intake-form-sections

Create an IntakeFormSection

createIntakeFormSection

Use this endpoint to create a new IntakeFormSection.

Request body

  • descriptionstringoptional

    Admin-facing description of what this intake form section captures. Visible in the questionnaire builder but not shown to customers.

  • intro_textstringoptionalnullable

    Optional rich-text shown to the customer at the top of the section, before the questions. Markdown is rendered.

  • offeringsobject[]optional

    Offerings this intake form section is attached to. When a customer books one of these offerings, the section is surfaced in the intake flow.

  • outro_textstringoptionalnullable

    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_iduuidrequired

    ID of the site this intake form section belongs to.

  • titlestringrequired

    Customer-facing heading for the section. Plain text only — HTML tags are stripped.

  • typestringoptionalnullable

    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.

    Possible values:mandatory

Responses

  • 201

    Successfully created an IntakeFormSection.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 422

    The request didn't pass validation

get/shop/intake-form-sections/order

List orderable IntakeFormSections

listOrderableIntakeFormSections

Returns a list of orderable IntakeFormSections for the given site.

Query parameters

  • site_idstringrequired

    Filter results by the site they belong to

Responses

  • 200

    Successfully retrieved orderable IntakeFormSections.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

put/shop/intake-form-sections/order

Update orderable IntakeFormSections

updateOrderableIntakeFormSections

Updates the order of IntakeFormSections for the given site.

Request body

  • intake_form_section_idsstring[]required
  • site_iduuidrequired

    ID of the site whose intake form section order is being updated. The caller's API key must have access to this site.

Responses

  • 200

    Successfully retrieved orderable IntakeFormSections.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 422

    The request didn't pass validation

get/shop/intake-form-sections/{intakeFormSectionId}

Retrieve an IntakeFormSection

getIntakeFormSection

Returns a paginated list of intake form sections for the authenticated site.

Path parameters

Responses

  • 200

    Successfully retrieved IntakeFormSection.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

put/shop/intake-form-sections/{intakeFormSectionId}

Update an IntakeFormSection

updateIntakeFormSection

Use this endpoint to update an IntakeFormSection.

Path parameters

Request body

  • descriptionstringoptional

    Admin-facing description of what this intake form section captures. Visible in the questionnaire builder but not shown to customers.

  • intro_textstringoptionalnullable

    Optional rich-text shown to the customer at the top of the section. Markdown is rendered.

  • offeringsobject[]optional

    Offerings this intake form section is attached to.

  • orderintegeroptional

    Zero-based display order of this section relative to others on the same form. Lower values appear first.

  • outro_textstringoptionalnullable

    Optional rich-text shown to the customer at the foot of the section, after the questions.

  • titlestringoptional

    Customer-facing heading for the section. Plain text only — HTML tags are stripped.

  • typestringoptionalnullable

    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.

    Possible values:mandatory

Responses

  • 200

    Successfully updated an IntakeFormSection.

  • 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

delete/shop/intake-form-sections/{intakeFormSectionId}

Delete an IntakeFormSection

deleteIntakeFormSection

Use this endpoint to delete an IntakeFormSection.

Path parameters

Responses

  • 204

    Successfully deleted the IntakeFormSection.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

get/shop/intake-form-sections/{intakeFormSectionId}/questions

List IntakeFormQuestions

listIntakeFormQuestions

Use this endpoint to list paginated IntakeFormQuestions for an IntakeFormSection.

Path parameters

Query parameters

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

  • site_idobject-idrequired

    The ID of the Site associated with the IntakeFormQuestion.

Responses

  • 200

    Successfully retrieved IntakeFormQuestions.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

post/shop/intake-form-sections/{intakeFormSectionId}/questions

Create an IntakeFormQuestion

createIntakeFormQuestion

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.

Path parameters

Query parameters

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

  • site_idobject-idrequired

    The ID of the Site associated with the IntakeFormQuestion.

Request body

  • questionstringoptional

    The question text.

  • typestringoptional

    The type of question. Drives input rendering on the customer intake form and unlocks the type-specific fields below.

    Possible values:additional_detailsdate_timeemailmultiple_choicephoneterms_conditionstext_longtextyes_no
  • multiple_choice_answersobject[]optionalnullable

    Available answers when type=multiple_choice. Must contain at least two entries when the type is multiple_choice.

  • multiple_select_optionstringoptionalnullable

    Optional bonus label rendered alongside the multiple-choice answers (e.g. "Other"). Only meaningful when type=multiple_choice.

  • multiple_selectionbooleanoptionalnullable

    Whether the customer can pick more than one multiple_choice_answers entry. Only meaningful when type=multiple_choice.

  • additional_detailsbooleanoptionalnullable

    When true, the customer is prompted for free-text "additional details" alongside the structured answer.

  • exact_numberstringoptionalnullable

    Optional exact-number constraint for numeric questions.

  • rangeinteger[]optionalnullable

    A two-element [min, max] constraint on multiple_choice_answers selections. Both bounds are inclusive; omit either to leave it unbounded.

  • terms_statementstringoptionalnullable

    Terms text rendered alongside type=terms_conditions questions. HTML is sanitised to the site's allowed-tag list.

  • placeholderstringoptionalnullable

    Placeholder text for the input field.

  • requiredbooleanoptionalnullable

    Whether the customer must answer this question.

Responses

  • 201

    The question was created successfully.

  • 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

put/shop/intake-form-sections/{intakeFormSectionId}/questions/order

Order IntakeFormQuestions

updateIntakeFormQuestionsOrder

Use this endpoint to order IntakeFormQuestions for an IntakeFormSection.

Path parameters

Request body

  • intake_form_question_idsstring[]required

    An ordered list of intake form question IDs. Must contain at least 2 items.

  • site_idstringrequired

    ID of the site whose intake-form question order should be updated. The caller's API key must have access to this site and to the parent intake form section.

Responses

  • 200

    Successfully ordered IntakeFormQuestions.

  • 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

get/shop/intake-form-sections/{intakeFormSectionId}/questions/{intakeFormQuestionId}

Get an IntakeFormQuestion

getIntakeFormQuestion

Returns a single IntakeFormQuestion by ID, including its multiple-choice answers, range constraints, and terms statement where applicable.

Requires the SETTINGS_VIEW permission on the section's site.

Path parameters

Responses

  • 200

    The question was retrieved successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

put/shop/intake-form-sections/{intakeFormSectionId}/questions/{intakeFormQuestionId}

Update an IntakeFormQuestion

updateIntakeFormQuestion

Updates an existing IntakeFormQuestion in place. type is required and triggers the same conditional validation as on create (e.g. multiple_choice_answers must contain ≥ 2 items when type=multiple_choice).

terms_statement HTML is re-sanitised against the site's allowed-tag list before persisting.

Requires the SETTINGS_MANAGE permission on the section's site.

Path parameters

Request body

  • questionstringoptional

    The question text.

  • typestringoptional

    The type of question. Drives input rendering on the customer intake form and unlocks the type-specific fields below.

    Possible values:additional_detailsdate_timeemailmultiple_choicephoneterms_conditionstext_longtextyes_no
  • multiple_choice_answersobject[]optionalnullable

    Available answers when type=multiple_choice. Must contain at least two entries when the type is multiple_choice.

  • multiple_select_optionstringoptionalnullable

    Optional bonus label rendered alongside the multiple-choice answers (e.g. "Other"). Only meaningful when type=multiple_choice.

  • multiple_selectionbooleanoptionalnullable

    Whether the customer can pick more than one multiple_choice_answers entry. Only meaningful when type=multiple_choice.

  • additional_detailsbooleanoptionalnullable

    When true, the customer is prompted for free-text "additional details" alongside the structured answer.

  • exact_numberstringoptionalnullable

    Optional exact-number constraint for numeric questions.

  • rangeinteger[]optionalnullable

    A two-element [min, max] constraint on multiple_choice_answers selections. Both bounds are inclusive; omit either to leave it unbounded.

  • terms_statementstringoptionalnullable

    Terms text rendered alongside type=terms_conditions questions. HTML is sanitised to the site's allowed-tag list.

  • placeholderstringoptionalnullable

    Placeholder text for the input field.

  • requiredbooleanoptionalnullable

    Whether the customer must answer this question.

Responses

  • 200

    The question was updated successfully.

  • 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

delete/shop/intake-form-sections/{intakeFormSectionId}/questions/{intakeFormQuestionId}

Delete an IntakeFormQuestion

deleteIntakeFormQuestion

Deletes the question and removes it from the parent section's rendered intake form. Submitted answers from existing visits are preserved on the underlying VisitIntakeForm records (the question is no longer fillable, but historical answers remain addressable by question ID).

Requires the SETTINGS_MANAGE permission on the section's site.

Path parameters

Responses

  • 204

    The question was deleted successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

get/shop/order-intake-forms/{orderIntakeFormId}/guests

List guests requiring an intake form for an order

listOrderIntakeFormGuests

Returns the guests on an order who still need to complete an intake form, with their display name and customer ID. Used by customer-facing UIs to prompt the right person to fill out the next outstanding form before their visit.

Path parameters

  • orderIntakeFormIdobject-idrequired

    The unique identifier of the Order whose intake forms are being listed. (The route parameter is named for the resource it surfaces; the underlying lookup keys on order/basket ID.)

Responses

  • 200

    The guests requiring intake forms were successfully retrieved.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

get/shop/visit-intake-forms

List completed visit intake forms

listVisitIntakeForms

Returns a paginated list of completed VisitIntakeForms, filtered by the supplied site, customer, basket or type. Use this to surface a guest's prior intake responses in customer-service flows and on the visit log.

Query parameters

  • site_iduuidrequired

    The site to scope the search to.

  • customer_iduuidoptional

    Limit to intake forms filled out for this customer.

  • basket_iduuidoptional

    Limit to intake forms relating to this basket.

  • typestringoptional

    Limit to intake forms of the given type (e.g. mandatory).

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

Responses

  • 200

    A paginated list of VisitIntakeForms.

  • 401

    The user is unauthenticated

post/shop/visit-intake-forms-for-orders

Get visit intake forms for an order

getVisitIntakeFormsForOrders

Returns the IDs of the VisitIntakeForms associated with an order. Although the operation is read-only the request uses POST so a complex order/basket selector can be supplied without fitting it into a URL query string.

Query parameters

  • basket_idstringrequired

    The basket to look up intake forms for.

  • site_idstringrequired

    The site the basket belongs to.

Responses

  • 200

    A paginated list of VisitIntakeForms.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

post/shop/visit-intake-forms-for-orders/pdf

Build a PDF of visit intake forms for an order

getVisitIntakeFormsForOrdersPdf

Queues the construction of a combined PDF containing every completed VisitIntakeForm attached to the order. The response carries a temporary url from which the rendered PDF can be downloaded once the build completes.

Query parameters

  • basket_idstringrequired

    The basket to look up intake forms for.

  • site_idstringrequired

    The site the basket belongs to.

Responses

  • 200

    The PDF download URL was successfully generated.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

get/shop/visit-intake-forms/{visitIntakeFormId}

Get a completed visit intake form

getVisitIntakeForm

Returns the captured-data record of a single completed VisitIntakeForm by ID.

Path parameters

Responses

  • 200

    A single VisitIntakeForm.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

get/shop/visit-intake-forms/{visitIntakeFormId}/html

Get the rendered HTML of a visit intake form

getVisitIntakeFormHtml

Returns the rendered HTML representation of a completed VisitIntakeForm — suitable for embedding in admin UIs or converting to PDF. The questions and the guest's answers are laid out in a print-ready format.

Path parameters

Responses

  • 200

    The intake form HTML was successfully retrieved.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found