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

  • Booking: Information about the service that the customer has booked. Includes details about the time, location, participants, and price.

  • Schedule: A collection of sessions that belong to the same class, course, appointment, or resource. Schedules also comprise available slots that can still be booked. Additional information required to calculate availability is also contained in a schedule. Read more about schedules.

    • Appointment schedules: The schedule determines when customers can book a session. Bookability is determined using the specified session's duration, the time between sessions, and the schedules of staff members who provide the service.

      For example, given the following scheduling criteria for a business offering haircuts, the schedule allows customers to book sessions from 9:00 to 17:30 with the possibility of booking a maximum of 9 sessions per day:

      • The business offers a 30-minute haircut service.
      • The schedule allows customers to book 30-minute sessions with 30 minutes between each session.
      • The staff members are available from 9:00 to 18:00.
    • Class & course schedules: For classes and courses, the business decides when to schedule a session. This is in contrast to appointments, where the customer decides when to book a session. For classes and courses, the schedule is used to manage the available sessions and holds some aggregated information, such as the start time and end time of a course.

  • Session: An occupied period of time in a schedule. A session is a term we use for any occupied period of time, whether that period is an appointment, class, or course.

    For example, if a “Vinyasa Yoga” class-type service is offered every Monday between 6-7pm, the class on Monday June 5, 2023 from 6-7pm is 1 session in a schedule.

    Therefore, sessions are the building blocks of appointments, classes, and courses. Each of these types of services comprise sessions. The collection of related sessions for a service represent the service's schedule. Read more about sessions.

  • Slot: An available period of time in a schedule that can be booked by a customer. While this includes existing sessions that are available for booking, it can also represent a period of time that can be booked based on the availability of a resource, such as a barber with appointments of 30 minutes each that are open for booking every weekday between 8:00 - 17:00. These slots are calculated according to the constraints of the schedule.

  • Bookings Policy: Terms the business wants to enforce when customers try to book a service. For example, how far in advance customers may book a service or until what point before the start of a session customers can cancel.

Was this helpful?
Yes
No

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 Code
    {
    "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.

Was this helpful?
Yes
No

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 Code
{
"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, $hasSome, $startsWithSortable
type$eq, $ne, $exists, $in, $hasSomeSortable
description$eq, $ne, $exists, $in, $hasSome, $startsWithSortable
hidden$eq, $ne, $exists, $in
tagLine$eq, $ne, $exists, $in, $hasSome, $startsWithSortable
staffMemberIds$eq, $ne, $exists, $in, $hasSome, $startsWith
form.id$eq, $ne, $exists, $in, $hasSome, $startsWith
category.id$eq, $ne, $exists, $in, $hasSome, $startsWith
mainSlug.name$eq, $ne, $exists, $in, $hasSome, $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 Code
{
"sort" : [
{
"fieldName": "sortOrder",
"order": "ASC"
},
{
"fieldName": "createdDate",
"order": "DESC"
}
]
}

Fields

Specify the fields object in the following format:

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

Related content:

Was this helpful?
Yes
No

Service Object

Attributes
idstringRead-onlyformat GUID
Service ID.

typestring
4 supported values:
UNKNOWN_SERVICE_TYPEAPPOINTMENTCLASSCOURSE
Service type.

sortOrderintegerformat int32
Order of a service within a category.

namestringmaxLength 400minLength 1
Service name.

descriptionstringmaxLength 7000
Service description, such as High-class hair styling, cuts, straightening and color.

tagLinestringmaxLength 6000
Short service description, such as Hair styling.

defaultCapacityintegerminimum 1maximum 1000format int32
Default maximum number of customers that can book the service. The service cannot be booked beyond this capacity.

mediaobject
Media associated with the service.

hiddenboolean
Whether the service is hidden from the site.

categoryobject
The category the service is associated with.

formobject
The form used when booking the service.

paymentobject
Payment options for booking the service.

onlineBookingobject
Online booking settings.

conferencingobject
Conferencing options for this service.

locationsArray <Location>maxItems 100
The locations this service is offered at. Only multiple locations of type BUSINESS are supported. multiple locations of type CUSTOM or CUSTOMER are not supported. For courses only: Currently, only 1 location is supported, for all location types. Use setServiceLocations method to update the locations this service is offered at.

bookingPolicyobject
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.

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

staffMemberIdsArray <string>maxItems 100format 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.

mainSlugobject
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.

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

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

seoDataobject
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.

revisionobjectRead-only
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.
Was this helpful?
Yes
No

GetGet Service

Developer Preview - This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.

Retrieves a service.

Permission Scopes

For app development, you must have one of the following permission scopes:
Manage Bookings
Read Bookings - Public Data
Learn more about permission scopes.Authorization header required - pass the OAuth Access Token

Syntax

GET
https://www.wixapis.com/bookings/v2/services/{serviceId}

Was this helpful?
Yes
No

PostQuery Services

Developer Preview - This API is subject to change. Bug fixes and new features will be released based on developer feedback throughout the preview period.

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 Code
{
"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.

Permission Scopes

For app development, you must have one of the following permission scopes:
Manage Bookings
Read Bookings - Public Data
Learn more about permission scopes.Authorization header required - pass the OAuth Access Token

Syntax

POST
https://www.wixapis.com/bookings/v2/services/query

Was this helpful?
Yes
No