About Wix Bookings Services

The Wix Bookings Services API enables you to retrieve the services your business offers.

The service contains the information customers need to decide whether to book the business offering. This includes the type of offering (appointment, class, course), scheduling information, locations, booking policies (such as the latest possible time a session can be booked), payment information, and more. Creating and managing your services is the cornerstone for working with Wix Bookings.

Once services are created, you can:

  • Use these Services APIs to retrieve information about the service(s), enabling you to make the information available to your customers.

  • Use other Bookings APIs to process customer bookings, manage schedules and calendars, check availability, and more.

More About Services

A service is an online or in-person offering that a business provides to its customers, such as courses and private sessions.

For example, a fitness studio may offer the following services:

  • A 1-hour Pilates class
  • A 30-minute 1-on-1 personal training session
  • A 4-month Yoga course for instructors

Alternatively, a hair salon may offer the following services:

  • A 30-minute haircut appointment
  • A 2-hour hair coloring appointment
  • A 3-week hair styling course

Services may differ in the offering they provide, but the API differentiates between 3 main types of services:

  • Appointments: An appointments is a 1-time session that can be booked and scheduled by a customer. The appointment takes place whenever a customer books a specific time slot.

    For example, a 30-minute haircut.

  • Classes: Recurring sessions of multiple participants scheduled by the business. Customers can book any session of the class. Classes can be scheduled on different days, at different times, with different resources, such as staff members. Customers can sign up for single sessions or a class's recurring sessions.

    For example, a language school offers a beginner's Spanish class every Monday at 8:00 PM. Customers can join the session they want and don't have to commit to attending all sessions.

  • Courses: A limited number of sessions for the same service that starts and ends on a particular day. Customers sign up for the entire course and not just one session.

    For example, a 12-session introductory course to Pilates, starting on February 1st and ending on March 17th.

Before you begin

Before using the API, make sure to set up Wix Bookings and create the right services for your business.

Sample Use Cases

Terminology

For a comprehensive glossary of Wix Bookings terms, see Terminology.

Did this help?

Services: Sample Use Cases and Flows

This article shares some possible use cases your app could support, as well as a sample flow that could support each use case. This can be a helpful jumping off point as you plan your app's implementation.

Periodically export new Wix Bookings services to an external catalog

If a site owner manages their services in an external catalog, you can export new services to it. To do this, your app can periodically bulk load new services being offered:

  1. For the first load after the app is installed and services are defined, use Query Services to retrieve all services. By default the initial paging limit is 100.

  2. If you receive 100 services, there may be more services to retrieve. Run the request again, and increase paging.offset to 100. Keep running the request, each time increasing the offset, until all services are retrieved.

  3. Upload the retrieved services to the external catalog.

  4. Save the current datetime, and use it in the next request. Each subsequent request will need to use the datetime of the request that came before it.

  5. For all subsequent loads, use Query Services , and filter for new services created since the last load:

    Copy
    { "sort": { "fieldName": "createdDate", "order": "ASC" }, "filter": { "createdDate": { "$gt": "<PREVIOUS_LOAD_DATETIME>" } } }
  6. Repeat steps 2 to 4 for each subsequent load. You can allow the site admin to configure the time interval in your app to fit their needs.

Did this help?

Services: Filtering and Sorting

Query endpoints allow you to filter and sort results based on service properties. This article covers field support for filtering and sorting.

Filtering

Specify the filter object in the following format:

Copy
{ "filter": { "fieldName": { "$eq": "value" } } }

The following table shows field support for filters and sorting for the service object:

FieldSupported FiltersSortable
name$eq, $ne, $exists, $in, $startsWithSortable
type$eq, $ne, $exists, $in,Sortable
description$eq, $ne, $exists, $in, $startsWithSortable
hidden$eq, $ne, $exists, $in
tagLine$eq, $ne, $exists, $in, $startsWithSortable
staffMemberIds$eq, $ne, $exists, $in, $hasSome, $startsWith
form.id$eq, $ne, $exists, $in, $startsWith
category.id$eq, $ne, $exists, $in, $startsWith
mainSlug.name$eq, $ne, $exists, $in, $startsWithSortable
supportedSlugs.name$eq, $ne, $exists, $in, $hasSome, $startsWithSortable
locations.business.id$eq, $ne, $exists, $in, $hasSome, $startsWith
onlineBooking.enabled$eq, $ne, $exists, $in
payment.options.online$eq, $ne, $exists, $in
payment.options.inPerson$eq, $ne, $exists, $in
payment.options.pricingPlan$eq, $ne, $exists, $in

Sorting

The default sort is by createdDate in ascending (ASC) order.

Specify the sort object in the following format:

Copy
{ "sort": [ { "fieldName": "sortOrder", "order": "ASC" }, { "fieldName": "createdDate", "order": "DESC" } ] }

Fields

Specify the fields object in the following format:

Copy
{ "fields": ["name", "type", "description"] }

Related content:

Did this help?

About Service Types: Appointments, Classes and Courses

Wix Bookings supports 3 types of services for businesses: appointments, classes and courses. Each individual appointment, class, or course meeting is commonly referred to as a session. Business owners can use any or all of these service types to run their businesses.

Appointments

Appointments are intended for one-on-one bookings, and exist only as available time slots until they are booked. For example, a salon might offer various hair cutting and styling services of varying lengths of time, and none of them are listed in the business’s booking calendar until they are booked by a customer.

Unique settings for appointments include:

  • Allowing multiple duration times per service type. For example, offering 15-minute, 30-minute, and 45-minute massages within one service. Currently supported only via API. Managed through the Services v2 API schedule.availabilityConstraints.sessionDurations.
  • Allowing customers to filter by their preferred staff member. In the UI, a dropdown is displayed with a list of all staff members available to provide the selected service. Managed through the Resources API and calculated via the Availability calendar API during booking.
  • Allowing customers to define the location for an appointment, for example in their home or office. Managed through the Services v2 API locations.type = “customer”.
  • Scheduling buffer times between booked sessions. For example, adding a 10-minute buffer between hair coloring appointments. Managed through the Services v2 API schedule.availabilityConstraints.timeBetweenSessions.
  • Offering available time slots for all services more often than the length of the appointment itself, enabling maximum flexibility for customers. This “every ___ minutes” feature dictates when time slots will be generated for a given service. For example, enabling display of available time slots every 15 minutes for an hour-long appointment, so long as there are no other bookings in that time period. Currently supported only in the site dashboard.

Specialized policy settings for appointments include:

  • Allowing customers to reschedule their appointments. Accessible through the Services v2 API bookingPolicy.reschedulePolicy and currently managed only in the site dashboard.
  • Allowing customers to cancel their appointments and/or limit the timeframe available for cancellation. Accessible through the Services v2 API bookingPolicy.cancellationPolicy and currently managed only in the site dashboard..

Classes

Classes are intended for one time or recurring events that customers can book individually. For recurring classes, customers can sign up to one, some, or all of the available classes, separately. These classes are listed in the business’s booking calendar immediately when they are created, and customers will see each session they’ve signed up for in their calendar after they book. For example, a yoga studio might offer a weekly vinyasa flow class, and customers can sign up to as many as they like based on their availability, interest, and/or membership coverage.

Specialized policy settings for classes include:

  • Allowing customers to sign up to a waiting list when a class is fully booked. Accessible through the Services v2 API bookingPolicy.waitlistPolicy and currently managed only in the site dashboard.

Courses

Courses are intended for recurring events that customers must book as a set. These courses are listed in the business’s booking calendar immediately when they are created, and customers will see all the individual sessions in their calendar once they’ve booked. For example, a 5-session yoga teacher training course. API responses for course entities will include the read-only fields schedule.firstSessionStart and schedule.lastSessionEnd.

Specialized policy settings for courses include:

  • Allowing customers to sign up to a course after the first session has begun. Accessible through the Services v2 API bookingPolicy.bookAfterStart and currently managed only in the site dashboard.

Updating a service’s type

A service’s type can technically be changed after creation, assuming there aren’t any scheduled upcoming events with participants. However, Wix highly recommends creating a completely new service of the preferred type, rather than changing an existing service’s type. Changing a service’s type field deletes the service’s existing schedule and creates a new one, and re-triggers all validations based on the new type (availability, locations, policies, etc.)

Did this help?

About Service Locations

Wix Bookings supports business owners in offering services at multiple business locations, providing clients and staff with more choices and flexibility. Site owners can create services of appointment and class types that occur at more than one location, or they can create separate services for each branch.

Services can be set to occur at any one of three location types:

  • Business: These are business locations that are associated with the site. When offering a service at multiple locations, only business type locations are supported. For this type, Wix Bookings relies on the location data stored in the following Business Management APIs:
    • A business’s default location is created and managed with the Site Properties API. Any changes to this API will be automatically updated in the Bookings APIs.
    • All additional locations are created and managed with the Locations API.
  • Customer: These locations are defined by the customer only, with no reference to the business locations defined in the APIs above. Supported for appointments only.
  • Custom: These locations are defined by the site contributor at the service level as a string, and are not stored in the Business Management APIs.

When a business sets up multiple business type locations, each staff member is automatically assigned to work at all the business locations. To define specific locations for specific dates/times, manage the staff member’s “working hours schedule” in the Schedule & Sessions API, by creating a session with type:WORKING_HOURS and the relevant location.

Note that there is currently no option to set separate business working hours for multiple locations.

When allowing customers to define their appointment’s location (for example at their home or office), Wix does not validate the provided location.

Did this help?

Receiving payments

Payment rates

The service price can be expressed in one of the following ways:

  • Fixed rate: The service price is fixed and does not change.
  • Varied rate: The service price may depend on different factors, such as the staff member providing the service or custom price options. Read more about price options.
  • Custom rate: The service price is expressed as a custom string. For example, "Free", "Donation", or "Contact us for pricing".

Payment options

Payment options dictate in what manner the customer can pay for the service. The following payment options are available:

Copy
{ "onlinePayment": true, "inPerson": true, "deposit": true, "pricingPlan": true, }

It's required to specify either onlinePayment or inPerson as true.

Online payments

Enabling online payments allows customers to pay for the service at the time of booking.

To read more about the variety of ways you can receive online payments, please refer to the dedicated article.

Paying in person

Enabling a costumer to pay in person allows customers to pay for the service at the time of the service, and to book the service without going through the payment process.

It's recommended to set up online payments as services that accept online payment significantly reduce no-shows.

Requiring deposit

Setting a deposit requirement allows you to charge some amount of the service price as a deposit. The deposit is charged at the time of booking and the remaining balance is charged at the time of the service.

Setting deposit to true requires onlinePayment to be true as well.

The deposit amount should be specified in the rate object, and is supported both for fixed and varied rates.

Pricing plans

Enabling payment with pricing plan enables customers to pay for the service using a pricing plan. Read more about offering pricing plans.

Did this help?

Service Object


The Service object represents the business offering that a business provides to its customers.

Properties
idstringRead-onlyformat GUID

Service ID.


typestring

Service type.


sortOrderintegerformat int32

Order of a service within a category.


namestringmaxLength 400minLength 1

descriptionstringmaxLength 7000

tagLinestringmaxLength 6000

defaultCapacityintegerminimum 1maximum 1000format int32

Default maximum number of customers that can book the service. The service cannot be booked beyond this capacity.


mediaMedia

Media associated with the service.


hiddenboolean

Whether the service is hidden from the site.


categoryCategory

The category the service is associated with.


formForm

The form used when booking the service.


paymentPayment

Payment options for booking the service.


onlineBookingOnlineBooking

Online booking settings.


conferencingConferencing

Conferencing options for this service.


locationsArray <Location>maxItems 500

The locations this service is offered at. In case of multiple (more than 1) location, All locations must be of type BUSINESS. For courses only: Currently, only 1 location is supported, for all location types.


bookingPolicyBookingPolicy

Policy determining under what conditions this service can be booked. For example, whether the service can only be booked up to 30 minutes before it begins.


scheduleSchedule

The service's schedule, which can be used to manage the service's sessions.


staffMemberIdsArray <string>maxItems 220format GUID

IDs of the staff members providing the service. For appointments only.


supportedSlugsArray <Slug>Read-onlymaxItems 100

A slug is the last part of the URL address that serves as a unique identifier of the service. The list of supported slugs includes past service names for backwards compatibility, and a custom slug if one was set by the business owner.


mainSlugMainSlugRead-only

The main slug for the service. mainSlug is either taken from the current service name or is a custom slug set by the business owner. mainSlug is used to construct the service's URLs.


urlsUrlsRead-only

URLs to various service-related pages, such as the calendar page and the booking page.


extendedFieldsExtendedFieldsRead-only

Extensions enabling users to save custom data related to the service.


seoDataSeoData

Custom SEO data for the service.


createdDatestringRead-onlyformat date-time

Date and time the service was created.


updatedDatestringRead-onlyformat date-time

Date and time the service was updated.


revisionintegerRead-onlyformat int64

Revision number, which increments by 1 each time the service is updated. To prevent conflicting changes, the existing revision must be used when updating a service.

Did this help?

POST

Create Service


Creates a new service.

Authentication

You can only call this method when authenticated as a Wix app or Wix user identity.

Permissions
Manage Bookings - all permissions
Manage Bookings
Learn more about app permissions.
Endpoint
POST
https://www.wixapis.com/_api/bookings/v2/services

Body Params
serviceServiceRequired

Service to be created.

Response Object
serviceService

The created service.

Create a new service
Request
cURL
curl -X POST 'https://www.wixapis.com/bookings/v2/services' \ -H 'Authorization: <AUTH>' \ -d '{ "service": { "type": "APPOINTMENT", "name": "Personal Cat Hugging", "description": "Introducing the Purrfect Hug - the ultimate cat cuddling experience! Our team of expert cuddlers will come to your home and provide your furry feline with the warmest and snuggliest hugs around.", "tagLine": "Get some purr therapy with our cat hugging service!", "defaultCapacity": 1, "media": { "items": [], "mainMedia": { "image": { "id": "fb5af50cdfee49a7b8d87f340c969e90.jpg", "height": 4000, "width": 6000 } } }, "hidden": false, "payment": { "rateType": "FIXED", "fixed": { "price": { "value": "25", "currency": "USD" } }, "pricingPlansIds": [], "options": { "online": true, "inPerson": false, "deposit": false, "pricingPlan": false } }, "onlineBooking": { "enabled": true, "requireManualApproval": false, "allowMultipleRequests": false }, "staffMemberIds": [ "76570209-101f-409b-af97-b445bdb63125" ], "locations": [ { "type": "CUSTOMER" } ] } }'
Response
JSON
{ "service": { "id": "d779a301-398d-4552-aa8c-3bef0b65cedb", "type": "APPOINTMENT", "sortOrder": 0, "name": "Personal Cat Hugging", "description": "Introducing the Purrfect Hug - the ultimate cat cuddling experience! Our team of expert cuddlers will come to your home and provide your furry feline with the warmest and snuggliest hugs around.", "tagLine": "Get some purr therapy with our cat hugging service!", "defaultCapacity": 1, "media": { "items": [], "mainMedia": { "image": { "id": "fb5af50cdfee49a7b8d87f340c969e90.jpg", "height": 4000, "width": 6000 } } }, "hidden": false, "payment": { "rateType": "FIXED", "fixed": { "price": { "value": "25", "currency": "USD" } }, "options": { "online": true, "inPerson": false, "deposit": false, "pricingPlan": false }, "pricingPlanIds": [] }, "onlineBooking": { "enabled": true, "requireManualApproval": false, "allowMultipleRequests": false }, "locations": [ { "type": "CUSTOMER" } ], "bookingPolicy": { "id": "2a8cbc1b-7968-44e7-899a-d1df1ecbeefe", "revision": "3", "createdDate": "2023-04-11T08:51:43.025Z", "updatedDate": "2023-05-19T11:32:27.930Z", "name": "Default policy", "customPolicyDescription": { "enabled": false, "description": "" }, "default": true, "limitEarlyBookingPolicy": { "enabled": false, "earliestBookingInMinutes": 604800 }, "limitLateBookingPolicy": { "enabled": false, "latestBookingInMinutes": 1440 }, "bookAfterStartPolicy": { "enabled": false }, "cancellationPolicy": { "enabled": true, "limitLatestCancellation": false, "latestCancellationInMinutes": 1440 }, "reschedulePolicy": { "enabled": true, "limitLatestReschedule": false, "latestRescheduleInMinutes": 1440 }, "waitlistPolicy": { "enabled": false, "capacity": 10, "reservationTimeInMinutes": 10 }, "participantsPolicy": { "enabled": false, "maxParticipantsPerBooking": 1 }, "resourcesPolicy": { "enabled": false, "autoAssignAllowed": false } }, "schedule": { "id": "16e9e039-6437-4144-81a7-124ce6b369c4" }, "supportedSlugs": [ { "name": "personal-cat-hugging", "custom": false, "createdDate": "2023-07-20T07:48:06.900Z" } ], "mainSlug": { "name": "personal-cat-hugging", "custom": false, "createdDate": "2023-07-20T07:48:06.900Z" }, "urls": { "servicePage": { "relativePath": "/service-page-statics/personal-cat-hugging", "url": "https://example.com/services-2-test/service-page-statics/personal-cat-hugging" }, "bookingPage": { "relativePath": "/booking-form/personal-cat-hugging/book", "url": "https://example.com/services-2-test/booking-form/personal-cat-hugging/book" }, "calendarPage": { "relativePath": "/booking-calendar-statics/personal-cat-hugging", "url": "https://example.com/services-2-test/booking-calendar-statics/personal-cat-hugging" } }, "createdDate": "2023-07-20T07:48:07.319Z", "updatedDate": "2023-07-20T07:48:07.319Z", "revision": "1", "staffMemberIds": ["76570209-101f-409b-af97-b445bdb63125"] } }
Event TriggersThis method triggers the following events:
Did this help?

GET

Get Service


Retrieves a service.

Permissions
Manage Bookings Services and Settings
Manage Bookings - all permissions
Read Bookings - all read permissions
Manage Bookings
Read Bookings - Public Data
Read Bookings - Including Participants
Learn more about app permissions.
Endpoint
GET
https://www.wixapis.com/_api/bookings/v2/services/{serviceId}

Path Params
serviceIdstringRequired

ID of the service to retrieve.

Response Object
serviceService

The retrieved service.

Retrieve a service
Request
cURL
curl -X GET 'https://www.wixapis.com/bookings/v2/services/353aa3b7-00ef-42bd-86ff-720d7ef60443' \ -H 'Authorization: <AUTH>'
Response
JSON
{ "service": { "id": "353aa3b7-00ef-42bd-86ff-720d7ef60443", "type": "CLASS", "sortOrder": 0, "name": "Dog Yoga", "description": "Get ready to downward dog with your furry best friend! In this unique class, you and your pup will strike a pose and find your zen. With a mix of stretching, breathing exercises, and playtime, this class is sure to be a tail-waggin' good time. Whether you're a seasoned yogi or a pup-tastic beginner, this class is pawsitively perfect for all levels. Don't forget to bring your sense of humor, as there's sure to be a few doggy distractions and playful paw-terruptions along the way. Namaste!", "tagLine": "Unleash your zen with downward dog and a wagging tail in our pup-poseful yoga class!", "defaultCapacity": 50, "media": { "items": [], "mainMedia": { "image": { "id": "nsplsh_4d7639686a6e4555485234~mv2_d_3024_4032_s_4_2.jpg", "url": "nsplsh_4d7639686a6e4555485234~mv2_d_3024_4032_s_4_2.jpg", "height": 4032, "width": 3024, "filename": "nsplsh_4d7639686a6e4555485234~mv2_d_3024_4032_s_4_2.jpg" } } }, "hidden": false, "category": { "id": "7b5b9862-490f-491c-8477-d39baed078a1", "name": "Best for fun dogs", "sortOrder": 1 }, "form": { "id": "00000000-0000-0000-0000-000000000000" }, "payment": { "rateType": "FIXED", "fixed": { "price": { "value": "15", "currency": "USD" } }, "pricingPlansIds": [], "options": { "online": true, "inPerson": false, "deposit": false, "pricingPlan": false } }, "onlineBooking": { "enabled": true, "requireManualApproval": false, "allowMultipleRequests": false }, "staffMemberIds": [], "conferencing": { "enabled": true }, "locations": [ { "type": "BUSINESS" } ], "bookingPolicy": { "id": "2a8cbc1b-7968-44e7-899a-d1df1ecbeefe", "revision": "3", "createdDate": "2023-04-11T08:51:43.025Z", "updatedDate": "2023-05-19T11:32:27.930Z", "name": "Default policy", "customPolicyDescription": { "enabled": false, "description": "" }, "default": true, "limitEarlyBookingPolicy": { "enabled": false, "earliestBookingInMinutes": 604800 }, "limitLateBookingPolicy": { "enabled": false, "latestBookingInMinutes": 1440 }, "bookAfterStartPolicy": { "enabled": false }, "cancellationPolicy": { "enabled": true, "limitLatestCancellation": false, "latestCancellationInMinutes": 1440 }, "reschedulePolicy": { "enabled": true, "limitLatestReschedule": false, "latestRescheduleInMinutes": 1440 }, "waitlistPolicy": { "enabled": false, "capacity": 10, "reservationTimeInMinutes": 10 }, "participantsPolicy": { "enabled": false, "maxParticipantsPerBooking": 1 }, "resourcesPolicy": { "enabled": false, "autoAssignAllowed": false } }, "schedule": { "id": "8acb939f-34d1-4ac9-8564-b24c29e11ef7", "firstSessionStart": "2023-02-13T15:30:00Z" }, "supportedSlugs": [ { "name": "dog-yoga", "custom": false, "createdDate": "2023-02-09T16:40:45.267Z" } ], "mainSlug": { "name": "dog-yoga", "custom": false, "createdDate": "2023-02-09T16:40:45.267Z" }, "urls": { "servicePage": { "relativePath": "/service-page/dog-yoga", "url": "https://example.com/services-v2" }, "bookingPage": { "relativePath": "/book-online/dog-yoga/book", "url": "https://example.com/services-v2" }, "calendarPage": { "relativePath": "/booking-calendar/dog-yoga", "url": "https://example.com/services-v2" } } } }
Did this help?

DELETE

Delete Service


Deletes a service.

Authentication

You can only call this method when authenticated as a Wix app or Wix user identity.

Permissions
Manage Bookings - all permissions
Manage Bookings
Learn more about app permissions.
Endpoint
DELETE
https://www.wixapis.com/_api/bookings/v2/services/{serviceId}

Path Params
serviceIdstringRequired

ID of the service to delete.

Query Params
preserveFutureSessionsWithParticipantsboolean

Whether to preserve future sessions with participants.

Default: false


participantNotification.notifyParticipantsboolean

Whether to send the message about the changes to the customer.

Default: false


participantNotification.messagestringmaxLength 2000

Custom message to send to the participants about the changes to the booking.

Response Object
Returns an empty object.
Delete a service
Request
cURL
curl -X DELETE 'https://www.wixapis.com/bookings/v2/services/d779a301-398d-4552-aa8c-3bef0b65cedb' \ -H 'Authorization: <AUTH>'
Response
JSON
{}
Event TriggersThis method triggers the following events:
Did this help?

PATCH

Update Service


Updates a service.

Partial updates are supported.

Each time the service is updated, revision increments by 1. You must include the number of the existing revision when updating the service. This ensures you're working with the latest service information and prevents unintended overwrites.

Authentication

You can only call this method when authenticated as a Wix app or Wix user identity.

Permissions
Manage Bookings - all permissions
Manage Bookings
Learn more about app permissions.
Endpoint
PATCH
https://www.wixapis.com/_api/bookings/v2/services/{service.id}

Path Params
service.idstringRequired

Service ID.

Body Params
serviceServiceRequired

Service to update. Partial updates are supported.

Response Object
serviceService

The updated service.

Update a service
Request
cURL
curl -X PATCH 'https://www.wixapis.com/bookings/v2/services/d779a301-398d-4552-aa8c-3bef0b65cedb' \ -H 'Authorization: <AUTH>' \ -d '{ "service": { "id": "d779a301-398d-4552-aa8c-3bef0b65cedb", "name": "Group Cat Hugging", "revision": "1" } }'
Response
JSON
{ "service": { "id": "d779a301-398d-4552-aa8c-3bef0b65cedb", "type": "APPOINTMENT", "sortOrder": 0, "name": "Group Cat Hugging", "description": "Introducing the Purrfect Hug - the ultimate cat cuddling experience! Our team of expert cuddlers will come to your home and provide your furry feline with the warmest and snuggliest hugs around.", "tagLine": "Get some purr therapy with our cat hugging service!", "defaultCapacity": 1, "media": { "items": [], "mainMedia": { "image": { "id": "fb5af50cdfee49a7b8d87f340c969e90.jpg", "height": 4000, "width": 6000 } } }, "hidden": false, "payment": { "rateType": "FIXED", "fixed": { "price": { "value": "25", "currency": "USD" } }, "options": { "online": true, "inPerson": false, "deposit": false, "pricingPlan": false }, "pricingPlanIds": [] }, "onlineBooking": { "enabled": true, "requireManualApproval": false, "allowMultipleRequests": false }, "locations": [ { "type": "CUSTOMER" } ], "bookingPolicy": { "id": "2a8cbc1b-7968-44e7-899a-d1df1ecbeefe", "revision": "3", "createdDate": "2023-04-11T08:51:43.025Z", "updatedDate": "2023-05-19T11:32:27.930Z", "name": "Default policy", "customPolicyDescription": { "enabled": false, "description": "" }, "default": true, "limitEarlyBookingPolicy": { "enabled": false, "earliestBookingInMinutes": 604800 }, "limitLateBookingPolicy": { "enabled": false, "latestBookingInMinutes": 1440 }, "bookAfterStartPolicy": { "enabled": false }, "cancellationPolicy": { "enabled": true, "limitLatestCancellation": false, "latestCancellationInMinutes": 1440 }, "reschedulePolicy": { "enabled": true, "limitLatestReschedule": false, "latestRescheduleInMinutes": 1440 }, "waitlistPolicy": { "enabled": false, "capacity": 10, "reservationTimeInMinutes": 10 }, "participantsPolicy": { "enabled": false, "maxParticipantsPerBooking": 1 }, "resourcesPolicy": { "enabled": false, "autoAssignAllowed": false } }, "schedule": { "id": "16e9e039-6437-4144-81a7-124ce6b369c4" }, "supportedSlugs": [ { "name": "group-cat-hugging", "custom": false, "createdDate": "2023-07-20T07:57:40.325Z" }, { "name": "personal-cat-hugging", "custom": false, "createdDate": "2023-07-20T07:48:06.900Z" } ], "mainSlug": { "name": "group-cat-hugging", "custom": false, "createdDate": "2023-07-20T07:57:40.325Z" }, "urls": { "servicePage": { "relativePath": "/service-page-statics/group-cat-hugging", "url": "https://example.com/services-2-test/service-page-statics/group-cat-hugging" }, "bookingPage": { "relativePath": "/booking-form/group-cat-hugging/book", "url": "https://example.com/services-2-test/booking-form/group-cat-hugging/book" }, "calendarPage": { "relativePath": "/booking-calendar-statics/group-cat-hugging", "url": "https://example.com/services-2-test/booking-calendar-statics/group-cat-hugging" } }, "createdDate": "2023-07-20T07:48:07.319Z", "updatedDate": "2023-07-20T07:57:40.637Z", "revision": "2", "staffMemberIds": ["76570209-101f-409b-af97-b445bdb63125"] } }
Event TriggersThis method triggers the following events:
Did this help?

POST

Query Services


Retrieves a list of up to 100 services, given the provided paging, filtering, and sorting.

Define queries using WQL - Wix Query Language. For field support for filters and sorting, see Supported Filters and Sorting.

To retrieve all services use an empty query:

Copy
{ "query": {} }

Query Services runs with these defaults, which you can override:

  • paging.limit is 100.
  • paging.offset is 0.

Notes:

  • Use UTC format when filtering with dates.
  • Only 1 use of each filter in the same query is supported. If a filter is defined more than once in a query, only the first occurrence is processed.
Permissions
Manage Bookings Services and Settings
Manage Bookings - all permissions
Read Bookings - all read permissions
Manage Bookings
Read Bookings - Public Data
Read Bookings - Including Participants
Learn more about app permissions.
Endpoint
POST
https://www.wixapis.com/_api/bookings/v2/services/query

Body Params
queryQueryRequired

WQL expression.

Response Object
servicesArray <Service>

The retrieved services.


pagingMetadataPagingMetadata

Paging metadata, including offset and count.

Query all services
Request
cURL
curl -X POST 'https://www.wixapis.com/bookings/v2/services/query' \ -H 'Authorization: <AUTH>' \ -d '{ "query": { "limit": 15, "filter": { "hidden": { "$eq": "false" } }, "fields": ["name", "type", "description"] } }'
Response
JSON
{ "services": [ { "id": "0f01e746-2943-4893-97a3-9d52d8e9e26e", "type": "APPOINTMENT", "sortOrder": 1, "name": "Personal Cat Hugging", "description": "Introducing the Purrfect Hug - the ultimate cat cuddling experience! Our team of expert cuddlers will come to your home and provide your furry feline with the warmest and snuggliest hugs around.", "tagLine": "Get some purr therapy with our cat hugging service!", "defaultCapacity": 1, "media": { "items": [], "mainMedia": { "image": { "id": "fb5af50cdfee49a7b8d87f340c969e90.jpg", "url": "fb5af50cdfee49a7b8d87f340c969e90.jpg", "height": 4000, "width": 6000, "filename": "fb5af50cdfee49a7b8d87f340c969e90.jpg" } } }, "hidden": false, "category": { "id": "0c54fbd3-9de6-4d2f-8775-e58eac5f5921", "name": "Our Services", "sortOrder": 0 }, "form": { "id": "00000000-0000-0000-0000-000000000000" }, "payment": { "rateType": "FIXED", "fixed": { "price": { "value": "25", "currency": "USD" } }, "pricingPlansIds": [], "options": { "online": true, "inPerson": false, "deposit": false, "pricingPlan": false } }, "onlineBooking": { "enabled": true, "requireManualApproval": false, "allowMultipleRequests": false }, "staffMemberIds": ["76570209-101f-409b-af97-b445bdb63125"], "conferencing": { "enabled": false }, "locations": [ { "type": "CUSTOMER" } ], "bookingPolicy": { "id": "2a8cbc1b-7968-44e7-899a-d1df1ecbeefe", "revision": "3", "createdDate": "2023-04-11T08:51:43.025Z", "updatedDate": "2023-05-19T11:32:27.930Z", "name": "Default policy", "customPolicyDescription": { "enabled": false, "description": "" }, "default": true, "limitEarlyBookingPolicy": { "enabled": false, "earliestBookingInMinutes": 604800 }, "limitLateBookingPolicy": { "enabled": false, "latestBookingInMinutes": 1440 }, "bookAfterStartPolicy": { "enabled": false }, "cancellationPolicy": { "enabled": true, "limitLatestCancellation": false, "latestCancellationInMinutes": 1440 }, "reschedulePolicy": { "enabled": true, "limitLatestReschedule": false, "latestRescheduleInMinutes": 1440 }, "waitlistPolicy": { "enabled": false, "capacity": 10, "reservationTimeInMinutes": 10 }, "participantsPolicy": { "enabled": false, "maxParticipantsPerBooking": 1 }, "resourcesPolicy": { "enabled": false, "autoAssignAllowed": false } }, "schedule": { "id": "f986bc0e-ced0-48a7-8557-eb5c75c256cd", "availabilityConstraints": { "sessionDurations": [60], "timeBetweenSessions": 0 } }, "supportedSlugs": [ { "name": "personal-cat-hugging", "custom": false, "createdDate": "2023-02-15T14:40:47.408Z" }, { "name": "initial-in-home-consultation", "custom": false, "createdDate": "2023-02-15T11:58:20.313Z" } ], "mainSlug": { "name": "personal-cat-hugging", "custom": false, "createdDate": "2023-02-15T14:40:47.408Z" }, "urls": { "servicePage": { "relativePath": "/service-page/personal-cat-hugging", "url": "https://example.com/services-v2" }, "bookingPage": { "relativePath": "/book-online/personal-cat-hugging/book", "url": "https://example.com/services-v2" }, "calendarPage": { "relativePath": "/booking-calendar/personal-cat-hugging", "url": "https://example.com/services-v2" } } }, { "id": "353aa3b7-00ef-42bd-86ff-720d7ef60443", "type": "CLASS", "sortOrder": 0, "name": "Dog Yoga", "description": "Get ready to downward dog with your furry best friend! In this unique class, you and your pup will strike a pose and find your zen. With a mix of stretching, breathing exercises, and playtime, this class is sure to be a tail-waggin' good time. Whether you're a seasoned yogi or a pup-tastic beginner, this class is pawsitively perfect for all levels. Don't forget to bring your sense of humor, as there's sure to be a few doggy distractions and playful paw-terruptions along the way. Namaste!", "tagLine": "Unleash your zen with downward dog and a wagging tail in our pup-poseful yoga class!", "defaultCapacity": 50, "media": { "items": [], "mainMedia": { "image": { "id": "nsplsh_4d7639686a6e4555485234~mv2_d_3024_4032_s_4_2.jpg", "url": "nsplsh_4d7639686a6e4555485234~mv2_d_3024_4032_s_4_2.jpg", "height": 4032, "width": 3024, "filename": "nsplsh_4d7639686a6e4555485234~mv2_d_3024_4032_s_4_2.jpg" } } }, "hidden": false, "category": { "id": "7b5b9862-490f-491c-8477-d39baed078a1", "name": "Best for fun dogs", "sortOrder": 1 }, "form": { "id": "00000000-0000-0000-0000-000000000000" }, "payment": { "rateType": "FIXED", "fixed": { "price": { "value": "15", "currency": "USD" } }, "pricingPlansIds": [], "options": { "online": true, "inPerson": false, "deposit": false, "pricingPlan": false } }, "onlineBooking": { "enabled": true, "requireManualApproval": false, "allowMultipleRequests": false }, "staffMemberIds": [], "conferencing": { "enabled": true }, "locations": [ { "type": "BUSINESS" } ], "bookingPolicy": { "id": "2a8cbc1b-7968-44e7-899a-d1df1ecbeefe", "revision": "3", "createdDate": "2023-04-11T08:51:43.025Z", "updatedDate": "2023-05-19T11:32:27.930Z", "name": "Default policy", "customPolicyDescription": { "enabled": false, "description": "" }, "default": true, "limitEarlyBookingPolicy": { "enabled": false, "earliestBookingInMinutes": 604800 }, "limitLateBookingPolicy": { "enabled": false, "latestBookingInMinutes": 1440 }, "bookAfterStartPolicy": { "enabled": false }, "cancellationPolicy": { "enabled": true, "limitLatestCancellation": false, "latestCancellationInMinutes": 1440 }, "reschedulePolicy": { "enabled": true, "limitLatestReschedule": false, "latestRescheduleInMinutes": 1440 }, "waitlistPolicy": { "enabled": false, "capacity": 10, "reservationTimeInMinutes": 10 }, "participantsPolicy": { "enabled": false, "maxParticipantsPerBooking": 1 }, "resourcesPolicy": { "enabled": false, "autoAssignAllowed": false } }, "schedule": { "id": "8acb939f-34d1-4ac9-8564-b24c29e11ef7", "firstSessionStart": "2023-02-13T15:30:00Z" }, "supportedSlugs": [ { "name": "dog-yoga", "custom": false, "createdDate": "2023-02-09T16:40:45.267Z" } ], "mainSlug": { "name": "dog-yoga", "custom": false, "createdDate": "2023-02-09T16:40:45.267Z" }, "urls": { "servicePage": { "relativePath": "/service-page/dog-yoga", "url": "https://example.com/services-v2" }, "bookingPage": { "relativePath": "/book-online/dog-yoga/book", "url": "https://example.com/services-v2" }, "calendarPage": { "relativePath": "/booking-calendar/dog-yoga", "url": "https://example.com/services-v2" } } } ], "pagingMetadata": { "count": 2, "cursors": {} } }
Did this help?

POST

Count Services


Counts services according to given criteria. Use WQL filter to define the criteria.

Permissions
Manage Bookings Services and Settings
Manage Bookings - all permissions
Read Bookings - all read permissions
Manage Bookings
Read Bookings - Public Data
Read Bookings - Including Participants
Learn more about app permissions.
Endpoint
POST
https://www.wixapis.com/_api/bookings/v2/services/count

Body Params
filterstruct

The filters for performing the count.

Response Object
countinteger

The number of services matching the given filter.

Count services based on a filter
Request
cURL
curl -X POST 'https://www.wixapis.com/bookings/v2/services/count' \ -H 'Authorization: <AUTH>' \ -d '{ "query": { "filter": { "hidden": { "$eq": "false" } } } }'
Response
JSON
{ "count": 2 }
Did this help?

Service Created


Event BodyEvent Body Event data is received as a JSON Web Token (JWT). It may be delayed. Be sure to verify the data was sent by Wix.
Event Data
idstring

Unique event ID. Allows clients to ignore duplicate webhooks.


entityFqdnstring

Fully qualified domain name of the entity associated with the event. Expected wix.bookings.services.v2.service.


slugstring

Event name. Expected created.


entityIdstring

ID of the entity associated with the event.


eventTimestringformat date-time

Event timestamp.


triggeredByAnonymizeRequestboolean

Whether the event was triggered as a result of a privacy regulation application (for example, GDPR).


originatedFromstring

If present, indicates the action that triggered the event.


createdEventCreatedEvent

Event information.

Event Body

The data payload will include the following as an encoded JWT:

JSON
{ "data": { "eventType": "wix.bookings.services.v2.service_created", "instanceId": "<app-instance-id>", "data": "<stringified-JSON>", // The identity field is sent as a stringified JSON "identity": { "identityType": "<identityType>", // ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP "anonymousVisitorId": "<anonymousVisitorId>", // in case of ANONYMOUS_VISITOR "memberId": "<memberId>", // in case of MEMBER "wixUserId": "<wixUserId>", // in case of WIX_USER "appId": "<appId>" // in case of APP } } }
Did this help?

Service Updated


Event BodyEvent Body Event data is received as a JSON Web Token (JWT). It may be delayed. Be sure to verify the data was sent by Wix.
Event Data
idstring

Unique event ID. Allows clients to ignore duplicate webhooks.


entityFqdnstring

Fully qualified domain name of the entity associated with the event. Expected wix.bookings.services.v2.service.


slugstring

Event name. Expected updated.


entityIdstring

ID of the entity associated with the event.


eventTimestringformat date-time

Event timestamp.


triggeredByAnonymizeRequestboolean

Whether the event was triggered as a result of a privacy regulation application (for example, GDPR).


originatedFromstring

If present, indicates the action that triggered the event.


updatedEventUpdatedEvent

Event information.

Event Body

The data payload will include the following as an encoded JWT:

JSON
{ "data": { "eventType": "wix.bookings.services.v2.service_updated", "instanceId": "<app-instance-id>", "data": "<stringified-JSON>", // The identity field is sent as a stringified JSON "identity": { "identityType": "<identityType>", // ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP "anonymousVisitorId": "<anonymousVisitorId>", // in case of ANONYMOUS_VISITOR "memberId": "<memberId>", // in case of MEMBER "wixUserId": "<wixUserId>", // in case of WIX_USER "appId": "<appId>" // in case of APP } } }
Did this help?

Service Deleted


Event BodyEvent Body Event data is received as a JSON Web Token (JWT). It may be delayed. Be sure to verify the data was sent by Wix.
Event Data
idstring

Unique event ID. Allows clients to ignore duplicate webhooks.


entityFqdnstring

Fully qualified domain name of the entity associated with the event. Expected wix.bookings.services.v2.service.


slugstring

Event name. Expected deleted.


entityIdstring

ID of the entity associated with the event.


eventTimestringformat date-time

Event timestamp.


triggeredByAnonymizeRequestboolean

Whether the event was triggered as a result of a privacy regulation application (for example, GDPR).


originatedFromstring

If present, indicates the action that triggered the event.


deletedEventstruct

Event information.

Event Body

The data payload will include the following as an encoded JWT:

JSON
{ "data": { "eventType": "wix.bookings.services.v2.service_deleted", "instanceId": "<app-instance-id>", "data": "<stringified-JSON>", // The identity field is sent as a stringified JSON "identity": { "identityType": "<identityType>", // ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP "anonymousVisitorId": "<anonymousVisitorId>", // in case of ANONYMOUS_VISITOR "memberId": "<memberId>", // in case of MEMBER "wixUserId": "<wixUserId>", // in case of WIX_USER "appId": "<appId>" // in case of APP } } }
Did this help?