Customers are required to complete the booking form when signing up for a service. By default, all services use a standard booking form. You can create custom booking forms by adding fields, removing fields, or marking fields as required.
This article covers booking forms for capturing customer details during checkout, and intake forms for collecting waivers or consents before the scheduled service.
As of January 31, 2025, Wix Bookings integrates with the Wix Forms APIs to provide form functionality in a standardized way across all Wix solutions.
The integration of Wix Forms APIs into Wix Bookings has introduced several changes to the booking object.
formSubmissionId: Unique ID of the form submission
associated with the booking.formId: Unique ID of the booking form
belonging to the relevant service.additionalFields array that stores data from the filled-out
booking form is deprecated and will be removed on September 30, 2025. When creating a booking,
specify the submitted booking form data in formSubmission instead of
booking.additionalFields. Contact details from fields belonging to the
default booking form are saved in the booking's contactDetails, while all
other values aren't saved on the booking object. See the
default booking form for more details.Due to the integration with Wix Forms APIs, you can create booking forms with a wider variety of field types, including text, dropdowns, file uploads, signatures, dates, and numbers. This functionality comes built-in with Wix Forms.
Use the following APIs to manage booking forms and submitted data:
contactDetails submitted in default booking form fields.When creating a custom booking form you need to clone the default booking form, which includes the following fields.
| Field name | Customer input required | Notes |
|---|---|---|
firstName | Required | |
lastName | Required | Can be removed in custom booking forms. |
email | Required | Wix Bookings checks the format of the provided email address, but not whether it actually exists. |
phone | Required | Wix Bookings checks the format of the provided phone number, but not whether it actually exists. |
address.country | Conditionally required | In ISO 3166-2 code format. |
address.subdivision | Conditionally required | |
address.city | Conditionally required | |
address.postalCode | Conditionally required | |
address.streetName | Conditionally required | |
address.streetNumber | Conditionally required | |
address.addressLine | Not required | Can be removed in custom booking forms. |
address.addressLine2 | Not required | Can be removed in custom booking forms. |
Customers are required to provide an address when booking a service at a location that isn't associated with the business, such as their home or office. Depending on the specified country, subdivision and/or postal code may not be required.
You can remove the entire address object in custom booking forms if the service
doesn't support CUSTOMER locations. Additionally, you can always remove
address.addressLine and address.addressLine2 in custom booking forms,
even if the service supports booking at a CUSTOMER location.
You could create a new service with a custom booking form, create a new booking with a filled-out booking form, or retrieve a booking's submitted booking form.
You can follow these steps to create a new service and its associated custom booking form.
To set up a booking form:
formId set to 00000000-0000-0000-0000-000000000000.
The cloned form inherits the wix.bookings.v2.bookings namespace from the source form. Save the ID of the returned form.fields.validation.required appropriately.service.form.id.You can follow these steps to create a new booking and submit its booking form on behalf of the customer.
To create a booking:
Call Wix Bookings' Query Services and display the services to the customer.
For the selected service, save form.formId.
Call Wix Forms' Get Form Summary. Make sure to specify the form ID.
Construct a valid JSON object based on the returned data. Make sure to use
the exact values from formSummary.fields.target as keys in the JSON object.
For example:
Call Wix Bookings' Create Booking.
Specify the constructed JSON object in formSubmission.
Listen to Wix Bookings' Booking Confirmed
and save booking.formSubmissionId.
Tip: To replace a booking's form submission with a new one, use Set Booking Submission ID.
You can follow these steps to retrieve the submitted booking form for a specific booking.
To retrieve a submitted booking form:
filter.
For example, you could filter by booking id or status. We strongly recommend
including startDate in any filter you specify to ensure optimal API performance.namespace by wix.bookings.v2.bookings while setting additional
query filters as required. For example, also filter by the list of form IDs
retrieved from Query Extended Bookings.You can require or encourage customers to complete intake forms before the scheduled service. Intake forms collect additional information such as health waivers, liability releases, or consent forms with expiration tracking.
Use the following APIs to manage intake forms with Bookings:
You could create and connect an intake form to a service, or verify that a customer completed a required intake form before an appointment.
You can create an intake form and connect it to a service. You can require the form before booking, which blocks checkout until completed, or send it after booking as optional.
To set up an intake form for a service:
"namespace": "wix.waivers.forms" and include at least these formFields: firstName, email, and signature.
Set pii: true and required: true in inputOptions for each of these form fields.
Save the returned form ID.expirationPeriodInMonths. For example, 12 for annual forms.bookingPolicy.id from the response.revision from the response.revision: The saved revision.intakeFormPolicy.enabled: true.intakeFormPolicy.formId: Your intake form ID.intakeFormPolicy.timing: For example, AFTER_BOOKING.intakeFormPolicy.completionRequirement: For example, OPTIONAL.Before an appointment, you can verify that the customer has a valid intake form submission.
To verify intake form completion:
externalScheduleId that maps to the service ID and contactId from participants.bookingPolicy.intakeFormPolicy.formId from the response.mostRecentSubmission exists with status of VALID, EXTENDED, or EXEMPT.