The Bookings Catalog Search API lets you query a site's catalog of services and get back only the services that customers can actually book, each enriched with availability data.
The API applies catalog filters (WQL), business location, resource type, and resource attribute filters to the service catalog, then runs the matching services through the availability engine for a requested date range.
Location, resource type, and attribute filters are combined with AND: a service's resource must satisfy the location/resource type filter and the attribute filter to be included. A resource configured as available at all locations always matches the location filter, regardless of which locations are specified.
With the Catalog Search API, you can:
The QueryServicesByFilters endpoint resolves results in 3 stages:
query field accepts a WQL filter, sort, and
cursor paging. This narrows the set of candidate services.serviceFilters field narrows results
further by business location, resource type, and resource attributes.available: true.serviceFilters accepts a localStartDate and localEndDate pair (ISO
local date-time) together with a timeZone. localStartDate must be strictly
before localEndDate.
How the window is matched depends on its shape:
09:00 to 17:00):
exactMatch: true: the service must be bookable for the exact hour window,
matched to the minute.exactMatch: false (default): at least 1 bookable slot within the window.exactMatch is
not required).exactMatch: true: the service must be bookable on every day in the range.exactMatch: false (default): at least 1 bookable slot anywhere in the range.Range conventions. A whole-day end may be written as the next day's
00:00:00 (exclusive) or as any time at or after 23:59:00 on the same day
(inclusive); both mean "through the end of that day". A window counts as whole
days only when it starts at 00:00:00 and ends on a day boundary; any other
window is an hour window and is matched as such, even when it crosses midnight
(such as 09:00 one day to 09:00 the next).
Hour-based and day-based services. Services configured with a booking
duration range refine the rules above: a single day is matched as a whole
(any slot counts), sub-day hour windows still respect the exactMatch flag,
and an exact multi-day window returns no results for hour-based services (an
exact multi-day booking isn't meaningful when booking by the hour).
Set includeUnavailable: true to also receive services that have no
availability in the window, each marked available: false.
The cursor in pagingMetadata.cursors.next is an opaque token owned by Catalog
Search. Pass it unchanged in the next request's query.cursorPaging.cursor.
Don't assume any relationship between this cursor and the internal cursors of
Services V2 or other upstream services.
If query.cursorPaging.limit isn't specified, it defaults to 10.
When filtering by availability (a date range is set in serviceFilters and
includeUnavailable is false), specify query.cursorPaging to get complete
result pages. Without it, a single page of filtered results is returned
without backfilling to the requested page size.
It's important to note the following points before starting to code:
serviceFilters
used to determine which services are currently bookable.For a comprehensive glossary of Wix Bookings terms, see Terminology.
Last updated: 20 August 2026