import { QueryServicesByFiltersRequest as QueryServicesByFiltersRequest$1, QueryServicesByFiltersResponse as QueryServicesByFiltersResponse$1 } from './index.typings.mjs'; import '@wix/sdk-types'; /** * Represents a search across a site's catalog of bookable services, combined with location, * resource, and availability filters. */ interface CatalogSearchResult { /** * Catalog search result ID. * @format GUID */ id?: string; } interface QueryServicesByFiltersRequest { /** * Query against the service catalog: WQL filter, sort, and cursor paging. * * Default: `query.cursorPaging.limit` is `10`. */ query?: CursorQuery; /** * Availability and resource constraints applied on top of the service query. * When absent, no availability check is performed and all pre-filtered services are returned. */ serviceFilters?: ServiceFilters; } interface CursorQuery extends CursorQueryPagingMethodOneOf { /** Cursor token pointing to a page of results. Not used in the first request. Following requests use the cursor token and not `filter` or `sort`. */ cursorPaging?: CursorPaging; /** * Filter object in the following format: * `"filter" : { * "fieldName1": "value1", * "fieldName2":{"$operator":"value2"} * }` * Example of operators: `$eq`, `$ne`, `$lt`, `$lte`, `$gt`, `$gte`, `$in`, `$hasSome`, `$hasAll`, `$startsWith`, `$contains` */ filter?: Record | null; /** * Sort object in the following format: * `[{"fieldName":"sortField1","order":"ASC"},{"fieldName":"sortField2","order":"DESC"}]` * @maxSize 5 */ sort?: Sorting[]; } /** @oneof */ interface CursorQueryPagingMethodOneOf { /** Cursor token pointing to a page of results. Not used in the first request. Following requests use the cursor token and not `filter` or `sort`. */ cursorPaging?: CursorPaging; } interface Sorting { /** * Name of the field to sort by. * @maxLength 512 */ fieldName?: string; /** Sort order. */ order?: SortOrderWithLiterals; } declare enum SortOrder { ASC = "ASC", DESC = "DESC" } /** @enumType */ type SortOrderWithLiterals = SortOrder | 'ASC' | 'DESC'; interface CursorPaging { /** * Maximum number of items to return in the results. * @max 50 */ limit?: number | null; /** * Pointer to the next or previous page in the list of results. * * Pass the relevant cursor token from the `pagingMetadata` object in the previous call's response. * Not relevant for the first request. * @maxLength 16000 */ cursor?: string | null; } interface ServiceFilters { /** * Start of the availability window (ISO local date-time, e.g. "2024-03-25T09:00:00"). * Must be provided together with `localEndDate`, and must be strictly before it. * @format LOCAL_DATE_TIME */ localStartDate?: string | null; /** * End of the availability window (ISO local date-time, e.g. "2024-03-25T17:00:00"). * Must be provided together with `localStartDate`. * A whole-day end may be expressed 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 is treated 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). * @format LOCAL_DATE_TIME */ localEndDate?: string | null; /** * IANA time zone identifier (e.g. "America/New_York") used to interpret the availability window. * Optional; when omitted, the site's business time zone is used. * @maxLength 100 */ timeZone?: string | null; /** * Controls how strictly the availability window must be satisfied. Interpreted by window shape: * - Sub-day hour window, true: bookable for the exact hour range, matched to the minute. * - Sub-day hour window, false (default): at least one bookable slot within the window. * - A single full day: bookable that day (any slot). * - Multiple days, true: bookable on every day in the range. * - Multiple days, false (default): at least one bookable slot anywhere in the range. * Hour-based and day-based services (those configured with a booking duration range) refine this: * a single day is matched as a whole (any slot counts), sub-day hour windows still respect `exactMatch`, * and an exact multi-day window returns no results for hour-based services. */ exactMatch?: boolean | null; /** * Filters services to those whose resources are available at these business locations. * If empty, no location-based resource filtering is applied. * * A resource configured as available at all locations always matches, regardless of the * locations specified here. * * Note: at most 200 matching resources are scanned for the `locationIds`/`resourceTypes` * pre-filter; beyond that the filtered set is truncated and results may be imprecise. * @maxSize 100 * @format GUID */ locationIds?: string[]; /** * Filters services to those that have a resource matching the requested attributes. Values given * for the same attribute are OR'd (match any); values for different attributes are AND'd (match all). * If empty, no attribute filtering is applied. * * Combined with `locationIds` and `resourceTypes` using AND: a service's resource must match * this filter and the location/resource type filter to be included. * * Note: at most 1,000 matching attribute values are scanned across all conditions; beyond that the * set is truncated and results may be imprecise. * @maxSize 10 */ attributes?: Attribute[]; /** * Filters services to those that use resources of the given types (e.g. "STAFF", "ROOM"). * If empty, all resource types are included. * Note: see `locationIds` for the 200-resource pre-filter scan limit. * @maxSize 10 * @maxLength 100 */ resourceTypes?: string[]; /** * When true, unavailable services are included in the response with `available` set to `false`. * When absent or false, only available services are returned. */ includeUnavailable?: boolean | null; } /** * Filters resources by a single attribute value. * Exactly one value variant must be set, matching the attribute definition's value_type. */ interface Attribute extends AttributeValueOneOf { /** * Exact enum value to match. Must be in the attribute's EnumConfig.allowed_values. * @maxLength 40 */ enumValue?: string; /** * Inclusive number range to match. At least one bound must be present; min must not exceed max. * To match an exact number, set min and max to the same value. */ numberRangeValue?: NumberRange; /** Exact boolean value to match. */ boolValue?: boolean; /** * Discrete set of numbers to match. At least one value must be present. * A resource matches if its stored number equals any value in the set. */ numberValues?: NumberValues; /** * ID of the attribute definition to filter by. * @format GUID */ attributeId?: string; } /** @oneof */ interface AttributeValueOneOf { /** * Exact enum value to match. Must be in the attribute's EnumConfig.allowed_values. * @maxLength 40 */ enumValue?: string; /** * Inclusive number range to match. At least one bound must be present; min must not exceed max. * To match an exact number, set min and max to the same value. */ numberRangeValue?: NumberRange; /** Exact boolean value to match. */ boolValue?: boolean; /** * Discrete set of numbers to match. At least one value must be present. * A resource matches if its stored number equals any value in the set. */ numberValues?: NumberValues; } /** Inclusive numeric range filter. At least one bound must be present. */ interface NumberRange { /** Minimum value (inclusive). If absent, no lower bound is applied. */ min?: number | null; /** Maximum value (inclusive). If absent, no upper bound is applied. */ max?: number | null; } /** Discrete set of numeric values to match. At least one value must be present. */ interface NumberValues { /** * Numbers to match against. A resource matches if its stored number equals any entry. * @maxSize 10 */ values?: number[]; } interface QueryServicesByFiltersResponse { /** Services matching the query, each enriched with availability data. */ results?: ServiceWithAvailability[]; /** * Paging metadata. The cursor in `pagingMetadata.cursors.next` is an opaque token owned by CatalogSearch. * Pass it unchanged in the next request's `query.cursorPaging.cursor`. * Do not assume any relationship between this cursor and the internal cursors of services-2 or other upstream services. */ pagingMetadata?: CursorPagingMetadata; } /** A service enriched with availability data. */ interface ServiceWithAvailability { /** The service entity. */ service?: Service; /** * Whether the service has available slots in the requested window. * Always true when no date range was provided. */ available?: boolean; } /** The `service` object represents an offering that a business provides to its customers. */ interface Service { /** * Service ID. * @format GUID * @readonly */ id?: string | null; /** * ID of the app associated with the service. You can't update `appId`. * Services are displayed in Wix Bookings only if they are associated with the Wix Bookings appId or have no associated app ID. * Default: `13d21c63-b5ec-5912-8397-c3a5ddb27a97` (Wix Bookings app ID) * For services from Wix apps, the following values apply: * - Wix Bookings: `"13d21c63-b5ec-5912-8397-c3a5ddb27a97"` * - Wix Services: `"cc552162-24a4-45e0-9695-230c4931ef40"` * - Wix Meetings: `"6646a75c-2027-4f49-976c-58f3d713ed0f"`. * [Full list of apps created by Wix](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/platform/about-apps-created-by-wix). * * @format GUID * @immutable */ appId?: string | null; /** * ID of the app that created the service. This field is used for analytics, auditing, and tracking creation sources. * This read-only field is automatically populated during service creation by checking these sources in order: * 1. The caller's App ID from the request identity context. * 2. The service's `appId` field. * 3. The Wix Bookings App ID (`13d21c63-b5ec-5912-8397-c3a5ddb27a97`) as the final fallback. * * @format GUID * @readonly */ createdByAppId?: string | null; /** * Service type. * Learn more about [service types](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/about-service-types). */ type?: ServiceTypeWithLiterals; /** Order of the service within a [category](https://dev.wix.com/docs/rest/business-solutions/bookings/services/categories-v1/category-object). */ sortOrder?: number | null; /** * Service name. * @maxLength 400 * @minLength 1 */ name?: string | null; /** * Service description. For example, `High-class hair styling, cuts, straightening and color`. * @maxLength 7000 */ description?: string | null; /** * Short service description, such as `Hair styling`. * @maxLength 6000 */ tagLine?: string | null; /** * Default maximum number of customers that can book the service. The service cannot be booked beyond this capacity. * @min 1 * @max 1000 */ defaultCapacity?: number | null; /** Media associated with the service. */ media?: Media; /** Whether the service is hidden from Wix Bookings pages and widgets. */ hidden?: boolean | null; /** * [Category](https://dev.wix.com/docs/rest/business-solutions/bookings/services/categories-v2/introduction) * the service is associated with. Services aren't automatically assigned to a category. * Without an associated category, the service isn't visible on the live site. */ category?: Category; /** Form the customer filled out when booking the service. */ form?: Form; /** * Payment options for booking the service. * Learn more about [service payments](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/about-service-payments). */ payment?: Payment; /** Online booking settings. */ onlineBooking?: OnlineBooking; /** Conferencing options for the service. */ conferencing?: Conferencing; /** * The locations this service is offered at. Read more about [service locations](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/about-service-locations). * @immutable * @maxSize 500 */ locations?: Location[]; /** * [Policy](https://dev.wix.com/docs/rest/business-solutions/bookings/policies/booking-policies/introduction) * 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. */ bookingPolicy?: BookingPolicy; /** * The service's [schedule](https://dev.wix.com/docs/rest/business-management/calendar/schedules-v3/introduction), * which can be used to manage the service's [events](https://dev.wix.com/docs/rest/business-management/calendar/events-v3/introduction). */ schedule?: Schedule; /** * IDs of the [resources](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resources-v2/introduction) associated with the [staff members](https://dev.wix.com/docs/api-reference/business-solutions/bookings/staff-members/staff-members/introduction) providing the service. * Note that these are the resource IDs, not the staff member IDs. * * For appointment-based services, set this field when creating or updating the service. * For classes and courses, this field is read-only and is automatically derived from staff assigned to the service's recurring scheduled sessions. * Staff assigned only to single, non-recurring events are not included. * Once all of a staff member's upcoming recurring sessions have ended, their ID is removed from this field. * To retrieve the full list of staff for classes or courses, query the service's calendar events instead. * Learn more about [retrieving staff for classes and courses](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/sample-flows#retrieve-staff-members-for-a-class-or-course). * @maxSize 220 * @format GUID */ staffMemberIds?: string[]; /** Staff members details. Returned only if `STAFF_MEMBER_DETAILS` conditional field was specified. */ staffMemberDetails?: StaffMemberDetails; /** * Information about which resources must be available so customers can book the service. * For example, a meeting room or equipment. * Some nested fields are only returned when specific conditional fields are requested: * pass `RESOURCE_TYPE_DETAILS` to retrieve `resourceType.name`, and `RESOURCE_DETAILS` to retrieve `resourceDetails.resources`. * @maxSize 3 */ serviceResources?: ServiceResource[]; /** * 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. * @readonly * @maxSize 100 */ supportedSlugs?: Slug[]; /** * Active slug for the service. * Learn more about [service slugs](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/about-service-slugs). * @readonly */ mainSlug?: Slug; /** * URLs to various service-related pages, such as the calendar page and the booking page. * @readonly */ urls?: URLs; /** Extensions enabling users to save custom data related to the service. */ extendedFields?: ExtendedFields; /** Custom SEO data for the service. */ seoData?: SeoSchema; /** * Date and time the service was created in `YYYY-MM-DDThh:mm:ss.sssZ` format. * @readonly */ createdDate?: Date | null; /** * Date and time the service was updated in `YYYY-MM-DDThh:mm:ss.sssZ` format. * @readonly */ updatedDate?: Date | null; /** * 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. * @readonly */ revision?: string | null; /** * Information about the [add-on groups](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/about-add-on-groups) associated with the service. * @maxSize 3 */ addOnGroups?: AddOnGroup[]; /** * Details about all [add-ons](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/add-ons/introduction) customers can choose when booking the service. * @readonly * @maxSize 50 */ addOnDetails?: AddOnDetails[]; /** Taxable address used to calculate tax */ taxableAddress?: TaxableAddress; /** * ID of the [resource type](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resource-types-v2/introduction) * that serves as the primary resource for this appointment service. The primary resource type * determines which resources drive slot assignment and availability resolution. * * For example, when set to a "Meeting Rooms" resource type, availability is calculated * based on the rooms' schedules rather than staff schedules. * * Default: The staff resource type. * @format GUID */ primaryResourceType?: string | null; } declare enum ServiceType { /** Appointment-based service. */ APPOINTMENT = "APPOINTMENT", /** Class service. */ CLASS = "CLASS", /** Course service. */ COURSE = "COURSE" } /** @enumType */ type ServiceTypeWithLiterals = ServiceType | 'APPOINTMENT' | 'CLASS' | 'COURSE'; interface Media { /** * Media items associated with the service. * @maxSize 100 */ items?: MediaItem[]; /** Primary media associated with the service. */ mainMedia?: MediaItem; /** Cover media associated with the service. */ coverMedia?: MediaItem; } interface MediaItem extends MediaItemItemOneOf { /** Details of the image associated with the service, such as URL and size. */ image?: Image; } /** @oneof */ interface MediaItemItemOneOf { /** Details of the image associated with the service, such as URL and size. */ image?: Image; } interface Image { /** * WixMedia image ID. (e.g. "4b3901ffcb8d7ad81a613779d92c9702.jpg") * @maxLength 2048 */ id?: string; /** * Image URL. (similar to image.id e.g. "4b3901ffcb8d7ad81a613779d92c9702.jpg") * @maxLength 2048 */ url?: string; /** Original image height. */ height?: number; /** Original image width. */ width?: number; /** * Image alt text. * @maxLength 134061 */ altText?: string | null; /** * Image file name. * @readonly * @maxLength 2048 */ filename?: string | null; } interface Category { /** * Category ID. * @format GUID */ id?: string; /** * Category name. * @maxLength 500 * @readonly */ name?: string | null; /** * Order of a category within a category list. * @readonly */ sortOrder?: number | null; } interface Form { /** * ID of the form associated with the service. * The form information that you submit when booking includes contact details, participants, and other form fields set up for the service. * You can manage the service booking form fields using the Bookings Forms API. * @format GUID */ id?: string; } interface FormSettings { /** Whether the service booking form should be hidden from the site. */ hidden?: boolean | null; } interface Payment extends PaymentRateOneOf { /** * The details for the fixed price of the service. * * Required when: `rateType` is `FIXED` */ fixed?: FixedPayment; /** * The details for the custom price of the service. * * Required when: `rateType` is `CUSTOM` */ custom?: CustomPayment; /** * The details for the varied pricing of the service. * Read more about [varied price options](https://support.wix.com/en/article/wix-bookings-about-getting-paid-online#offering-varied-price-options). * * Required when: `rateType` is `VARIED` */ varied?: VariedPayment; /** * Subscription pricing details for the service. Supported for course services only. * The business charges recurring monthly payments instead of a one-time fee. * * Required when: `rateType` is `SUBSCRIPTION`. */ subscription?: SubscriptionPayment; /** The rate the customer is expected to pay for the service. */ rateType?: RateTypeWithLiterals; /** The payment options a customer can use to pay for the service. */ options?: PaymentOptions; /** * IDs of pricing plans that can be used as payment for the service. * Read more about [service payment options](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/about-service-payments). * @readonly * @maxSize 75 * @format GUID */ pricingPlanIds?: string[]; /** * How customers can pay for add-ons when paying for the related booking with a [pricing plan](https://dev.wix.com/docs/api-reference/business-solutions/pricing-plans/pricing-plans/introduction). * If customers pay for the booking using any method other than a pricing plan, the value of this field is ignored. */ addOnOption?: AddOnPaymentOptionsWithLiterals; /** * Estimated discount information for the service based on active [eCommerce discounts](https://dev.wix.com/docs/rest/business-solutions/e-commerce/extensions/discounts/introduction). * The final discount is determined during eCommerce checkout and may differ from the estimate, * for example when discounts depend on cart totals. * * A discount is considered active when its start time has passed and its end time hasn't. * If multiple active discounts apply, the most recently created one is returned. * * Returned only when `DISCOUNT_INFO_DETAILS` is requested. * @readonly */ discountInfo?: DiscountInfo; } /** @oneof */ interface PaymentRateOneOf { /** * The details for the fixed price of the service. * * Required when: `rateType` is `FIXED` */ fixed?: FixedPayment; /** * The details for the custom price of the service. * * Required when: `rateType` is `CUSTOM` */ custom?: CustomPayment; /** * The details for the varied pricing of the service. * Read more about [varied price options](https://support.wix.com/en/article/wix-bookings-about-getting-paid-online#offering-varied-price-options). * * Required when: `rateType` is `VARIED` */ varied?: VariedPayment; /** * Subscription pricing details for the service. Supported for course services only. * The business charges recurring monthly payments instead of a one-time fee. * * Required when: `rateType` is `SUBSCRIPTION`. */ subscription?: SubscriptionPayment; } declare enum RateType { /** The service has a fixed price. */ FIXED = "FIXED", /** The service has a custom price, expressed as a price description. */ CUSTOM = "CUSTOM", /** This service is offered with a set of different prices based on different terms. */ VARIED = "VARIED", /** This service is offered free of charge. */ NO_FEE = "NO_FEE", /** * The service charges recurring monthly payments. Supported for course services only. * @documentationMaturity preview */ SUBSCRIPTION = "SUBSCRIPTION" } /** @enumType */ type RateTypeWithLiterals = RateType | 'FIXED' | 'CUSTOM' | 'VARIED' | 'NO_FEE' | 'SUBSCRIPTION'; interface FixedPayment { /** * The fixed price required to book the service. * * Required when: `rateType` is `FIXED` */ price?: Money; /** * The deposit price required to book the service. * * Required when: `rateType` is `FIXED` and `paymentOptions.deposit` is `true` */ deposit?: Money; /** * Whether customers can choose to pay the full service price upfront instead of only the deposit. * * Used only when a `deposit` amount is set. * * Default: `false`. */ fullUpfrontPaymentAllowed?: boolean | null; } /** * Money. * Default format to use. Sufficiently compliant with majority of standards: w3c, ISO 4217, ISO 20022, ISO 8583:2003. */ interface Money { /** * Monetary amount. Decimal string with a period as a decimal separator. For example `25.05`. * @format DECIMAL_VALUE * @decimalValue options { gt:0, maxScale:2 } */ value?: string; /** * Currency code in [ISO 4217 format](https://en.wikipedia.org/wiki/ISO_4217). For example, `USD`. * @format CURRENCY * @readonly */ currency?: string; /** * Monetary amount. Decimal string in local format. For example, `1 000,30`. * @maxLength 50 */ formattedValue?: string | null; } /** * A deposit expressed as exactly one of a fixed monetary amount or a percentage of the full service price. * Structurally exclusive: at most one of `amount` or `percentage` may be set. */ interface DepositDetails extends DepositDetailsValueOneOf { /** The deposit as a fixed monetary amount. */ amount?: Money; /** * The deposit as a percentage of the full service price, for example `20` for 20% or `20.5` for 20.5%. * Resolved to a concrete amount when the customer books. * * Min: `0.01` percent * Max: `99.99` percent * @format DECIMAL_VALUE * @decimalValue options { gte:0.01, lte:99.99, maxScale:2 } */ percentage?: string | null; } /** @oneof */ interface DepositDetailsValueOneOf { /** The deposit as a fixed monetary amount. */ amount?: Money; /** * The deposit as a percentage of the full service price, for example `20` for 20% or `20.5` for 20.5%. * Resolved to a concrete amount when the customer books. * * Min: `0.01` percent * Max: `99.99` percent * @format DECIMAL_VALUE * @decimalValue options { gte:0.01, lte:99.99, maxScale:2 } */ percentage?: string | null; } interface CustomPayment { /** * A custom description explaining to the customer how to pay for the service. * @maxLength 50 */ description?: string | null; } interface VariedPayment { /** The default price for the service without any variants. It will also be used as the default price for any new variant. */ defaultPrice?: Money; /** * The deposit price required to book the service. * * Required when: `rateType` is `VARIED` and `paymentOptions.deposit` is `true` */ deposit?: Money; /** * The minimal price a customer may pay for this service, based on its variants. * @readonly */ minPrice?: Money; /** * The maximum price a customer may pay for this service, based on its variants. * @readonly */ maxPrice?: Money; /** * Whether customers can choose to pay the full service price upfront instead of only the deposit. * * Used only when a `deposit` amount is set. * * Default: `false`. */ fullUpfrontPaymentAllowed?: boolean | null; } interface SubscriptionPayment { /** * Base price charged per billing cycle before tax and discounts. * The actual amount charged may differ after checkout applies tax and discounts. */ amountPerBillingCycle?: Money; /** * Billing frequency for recurring subscription charges. * Reflected as `billingFrequency` in the booking's subscription info. * * Currently supports `MONTHLY` only. */ frequency?: FrequencyTypeWithLiterals; /** * Total number of billing cycles in the subscription. For example, `12` for a 12-month subscription with monthly payments. * Reflected as `totalCycles` in the booking's subscription info. * * Required when: `rateType` is `SUBSCRIPTION`. * @min 2 */ totalPayments?: number | null; /** Determines when the first billing cycle payment is charged. Used together with `recurringStartDate` to define the subscription billing schedule. */ firstChargeDate?: FirstChargeDateTypeWithLiterals; /** * Date and time when recurring billing starts. * * When `firstChargeDate` is `CHECKOUT`, the first charge occurs at checkout and subsequent billing cycles start from this date. * * When `firstChargeDate` is `SCHEDULED`, the first charge occurs on this date. * * Customers who book after recurring billing starts are billed for the remaining billing cycles only. * * Required when: `rateType` is `SUBSCRIPTION`. */ recurringStartDate?: Date | null; /** * Deprecated. * @deprecated Deprecated. * @targetRemovalDate 2026-07-01 */ enrollmentFeeAmount?: Money; } declare enum FrequencyType { /** Billing cycle repeats once per month. */ MONTHLY = "MONTHLY" } /** @enumType */ type FrequencyTypeWithLiterals = FrequencyType | 'MONTHLY'; declare enum FirstChargeDateType { /** The first billing cycle is charged at checkout. Recurring billing continues from the `recurringStartDate`. */ CHECKOUT = "CHECKOUT", /** The first billing cycle is charged on the `recurringStartDate`. */ SCHEDULED = "SCHEDULED" } /** @enumType */ type FirstChargeDateTypeWithLiterals = FirstChargeDateType | 'CHECKOUT' | 'SCHEDULED'; interface FullUpfrontPayment { /** * Whether customers can choose a one-time full payment instead of recurring subscription payments. * Default: `false`. */ supported?: boolean | null; /** * Percentage discount applied when a customer chooses the full payment option. * When `supported` is `true` and this field isn't set, no discount is applied. * Min: `0.01` percent * Max: `100` percent * @format DECIMAL_VALUE * @decimalValue options { gte:0.01, lte:100, maxScale:2 } */ discountPercent?: string | null; } /** * The payment options a customer can use to pay for the service. * For payments of type `FIXED` or `VARIED`, at least one of `online`, `inPerson`, or `pricingPlan` must be `true`. */ interface PaymentOptions { /** * Customers can pay for the service online. * When `true`: * + `rateType` must be `FIXED`, `VARIED`, or `SUBSCRIPTION`. * + `fixed.price`, `varied.defaultPrice`, or `subscription.amountPerBillingCycle` must be specified respectively. * * Required when: `rateType` is `SUBSCRIPTION`. * Read more about [getting paid online](https://support.wix.com/en/article/wix-bookings-about-getting-paid-online). */ online?: boolean | null; /** Customers can pay for the service in person. */ inPerson?: boolean | null; /** * This service requires a deposit to be made online in order to book it. * When `true`: * + `rateType` must be `VARIED` or `FIXED`. * + A `deposit` must be specified. * + `online` must be `true`. * + `inPerson` must be `false`. */ deposit?: boolean | null; /** * Whether customers can pay for the service using a pricing plan. * Read more about [service payment options](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/about-service-payments). */ pricingPlan?: boolean | null; } declare enum AddOnPaymentOptions { /** Customers are required to pay online for add-ons when the booking is paid for with a pricing plan. */ ONLINE = "ONLINE", /** Customers are required to pay in person for add-ons when the booking is paid for with a pricing plan. */ IN_PERSON = "IN_PERSON" } /** @enumType */ type AddOnPaymentOptionsWithLiterals = AddOnPaymentOptions | 'ONLINE' | 'IN_PERSON'; /** Estimated discount information for a service based on active eCommerce discounts. */ interface DiscountInfo { /** * Name of the discount. For example, `Summer Sale - 20% Off`. * @minLength 1 * @maxLength 50 */ discountName?: string; /** * Estimated price after applying the discount. The final price is determined at checkout and may differ when additional discounts are applied or rules are re-evaluated with complete booking information. * * Not returned when the discount depends on booking or cart context, for example a discount that applies to a service only when booked together with another service, or when the discount requires information only available at checkout. */ priceAfterDiscount?: Money; } interface OnlineBooking { /** * Whether the service can be booked online. * When set to `true`, customers can book the service online. Configure the payment options via the `service.payment` property. * When set to `false`, customers cannot book the service online, and the service can only be paid for in person. */ enabled?: boolean | null; /** Booking the service requires approval by the Wix user. */ requireManualApproval?: boolean | null; /** Multiple customers can request to book the same time slot. This is relevant when `requireManualApproval` is `true`. */ allowMultipleRequests?: boolean | null; } interface Conferencing { /** Whether a conference link is generated for the service's sessions. */ enabled?: boolean | null; } interface Location extends LocationOptionsOneOf { /** Information about business locations. Required when `type` is `BUSINESS`. */ business?: BusinessLocationOptions; /** Information about custom locations. Required when `type` is `CUSTOM`. */ custom?: CustomLocationOptions; /** * Location ID. * @format GUID * @readonly */ id?: string; /** * Location type. * * Default: `CUSTOM` */ type?: LocationTypeWithLiterals; /** * Location address. Empty for `{"type": "CUSTOMER"}`. * @readonly */ calculatedAddress?: Address; } /** @oneof */ interface LocationOptionsOneOf { /** Information about business locations. Required when `type` is `BUSINESS`. */ business?: BusinessLocationOptions; /** Information about custom locations. Required when `type` is `CUSTOM`. */ custom?: CustomLocationOptions; } declare enum LocationType { /** Location set by the business that is not a standard business [location](https://dev.wix.com/docs/api-reference/business-management/locations/introduction). */ CUSTOM = "CUSTOM", /** Business [location](https://dev.wix.com/docs/api-reference/business-management/locations/introduction). */ BUSINESS = "BUSINESS", /** * The customer specifies any address when booking. Available only for * appointment-based services. */ CUSTOMER = "CUSTOMER" } /** @enumType */ type LocationTypeWithLiterals = LocationType | 'CUSTOM' | 'BUSINESS' | 'CUSTOMER'; interface Address extends AddressStreetOneOf { /** Street name and number. */ streetAddress?: StreetAddress; /** @maxLength 255 */ addressLine?: string | null; /** * 2-letter country code in an [ISO-3166 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format. * @format COUNTRY */ country?: string | null; /** * Code for a subdivision (such as state, prefecture, or province) in [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) format. * @maxLength 255 */ subdivision?: string | null; /** * City name. * @maxLength 255 */ city?: string | null; /** * Postal or zip code. * @maxLength 255 */ postalCode?: string | null; /** * Full address of the location. * @maxLength 512 */ formattedAddress?: string | null; } /** @oneof */ interface AddressStreetOneOf { /** Street name and number. */ streetAddress?: StreetAddress; /** @maxLength 255 */ addressLine?: string | null; } /** Street address. Includes street name, number, and apartment number in separate fields. */ interface StreetAddress { /** * Street number. * @maxLength 255 */ number?: string; /** * Street name. * @maxLength 255 */ name?: string; /** * Apartment number. * @maxLength 255 */ apt?: string; } interface AddressLocation { /** Address latitude. */ latitude?: number | null; /** Address longitude. */ longitude?: number | null; } interface BusinessLocationOptions { /** * ID of the business [location](https://dev.wix.com/docs/api-reference/business-management/locations/introduction). * When setting a business location, specify only the location ID. Other location details are overwritten. * @format GUID */ id?: string; /** * Business location name. * @readonly * @maxLength 150 */ name?: string; /** * Whether this is the default location. There can only be a single default location per site. * @readonly */ default?: boolean | null; /** * Business location address. * @readonly */ address?: Address; /** * Business location email. * @format EMAIL * @readonly */ email?: string | null; /** * Business location phone. * @format PHONE * @readonly */ phone?: string | null; } interface CustomLocationOptions { /** * ID of the custom location. * @format GUID * @readonly */ id?: string; /** Address of the custom location. */ address?: Address; } /** * `BookingPolicy` is the main entity of `BookingPolicyService` and specifies a set of rules for booking a service * by visitors and members. * * Each `BookingPolicy` consists of a number of sub-policies. When the Bookings App is provisioned to a meta site then a * default `BookingPolicy` will be created with defaults for each of these sub-policies. This also applies when a request * is received to create a new `BookingPolicy` and one or more of these sub-policies are not provided. * * Sub-policies are defined in separate objects as specified below. * * - The `LimitEarlyBookingPolicy` object defines the policy for limiting early bookings. * - The `LimitLateBookingPolicy` object defines the policy for limiting late bookings. * - The `BookAfterStartPolicy` object defines the policy for booking after the start of the schedule. * - The `CancellationPolicy` object defines the policy for canceling a booked entity. * - The `ReschedulePolicy` object defines the policy for rescheduling booked entity. * - The `WaitlistPolicy` object defines the policy for a waitlist. * - The `ParticipantsPolicy` object defines the policy regarding the participants per booking. * - The `ResourcesPolicy` object defines the policy regarding the resources per booking. * - The `CancellationFeePolicy` object defines the policy regarding cancellation fees. * - The `SaveCreditCardPolicy` object defines the policy for saving credit card details. * * By default each sub-policy is disabled. A more detailed specification of the default settings of each sub-policy * can be found in the description of the corresponding object. * * Partial updates are supported on the main entity level, however in order to update a sub-policy the client needs to provide the whole sub-policy object. */ interface BookingPolicy { /** * The ID to the policy for the booking. * @format GUID */ id?: string; /** * Date and time the policy was created. * @readonly */ createdDate?: Date | null; /** * Date and time the policy was updated. * @readonly */ updatedDate?: Date | null; /** * Name of the policy. * @maxLength 400 * @readonly */ name?: string | null; /** * Custom description for the policy. This policy is displayed to the participant. * @readonly */ customPolicyDescription?: PolicyDescription; /** * Whether the policy is the default for the meta site. * @readonly */ default?: boolean | null; /** * Policy for limiting early bookings. * @readonly */ limitEarlyBookingPolicy?: LimitEarlyBookingPolicy; /** * Policy for limiting late bookings. * @readonly */ limitLateBookingPolicy?: LimitLateBookingPolicy; /** * Policy on booking an entity after the start of the schedule. * @readonly */ bookAfterStartPolicy?: BookAfterStartPolicy; /** * Policy for canceling a booked entity. * @readonly */ cancellationPolicy?: CancellationPolicy; /** * Policy for rescheduling a booked entity. * @readonly */ reschedulePolicy?: ReschedulePolicy; /** * Waitlist policy for the service. * @readonly */ waitlistPolicy?: WaitlistPolicy; /** * Policy regarding the participants per booking. * @readonly */ participantsPolicy?: ParticipantsPolicy; /** * Policy for allocating resources. * @readonly */ resourcesPolicy?: ResourcesPolicy; /** * Rules for cancellation fees. * @readonly */ cancellationFeePolicy?: CancellationFeePolicy; /** * Rule for saving credit card. * @readonly */ saveCreditCardPolicy?: SaveCreditCardPolicy; } /** A description of the policy to display to participants. */ interface PolicyDescription { /** * Whether the description should be displayed. If `true`, the description is displayed. * * Default: `false` */ enabled?: boolean; /** * The description to display. * * Default: Empty * Max length: 2500 characters * @maxLength 2500 */ description?: string; } /** The policy for limiting early bookings. */ interface LimitEarlyBookingPolicy { /** * Whether there is a limit on how early a customer * can book. When `false`, there is no limit on the earliest * booking time and customers can book in advance, as early as they like. * * Default: `false` */ enabled?: boolean; /** * Maximum number of minutes before the start of the session that a booking can be made. This value must be greater * than `latest_booking_in_minutes` in the `LimitLateBookingPolicy` policy. * * Default: 10080 minutes (7 days) * Min: 1 minute * @min 1 */ earliestBookingInMinutes?: number; } /** * The policy for limiting late bookings. * * This policy and the `BookAfterStartPolicy` policy cannot be enabled at the same time. So if this policy * is enabled, `BookAfterStartPolicy` must be disabled. */ interface LimitLateBookingPolicy { /** * Whether there is a limit on how late a customer * can book. When `false`, there is no limit on the latest * booking time and customers can book up to the last minute. * * Default: `false` */ enabled?: boolean; /** * Minimum number of minutes before the start of the session that a booking can be made. * For a schedule, this is relative to the start time of the next booked session, excluding past-booked sessions. * This value must be less than `earliest_booking_in_minutes` in the `LimitEarlyBookingPolicy` policy. * * Default: 1440 minutes (1 day) * Min: 1 minute * @min 1 */ latestBookingInMinutes?: number; } /** * The policy for whether a session can be booked after the start of the schedule. * This policy and `LimitLateBookingPolicy` cannot be enabled at the same time. So if this policy * is enabled, the `LimitLateBookingPolicy` policy must be disabled. */ interface BookAfterStartPolicy { /** * Whether booking is allowed after the start of the schedule. When `true`, * customers can book after the start of the schedule. * * Default: `false` */ enabled?: boolean; } /** The policy for canceling a booked session. */ interface CancellationPolicy { /** * Whether canceling a booking is allowed. When `true`, customers * can cancel the booking. * * Default: `false` */ enabled?: boolean; /** * Whether there is a limit on the latest cancellation time. When `true`, * a time limit is enforced. * * Default: `false` */ limitLatestCancellation?: boolean; /** * Minimum number of minutes before the start of the booked session that the booking can be canceled. * * Default: 1440 minutes (1 day) * Min: 1 minute * @min 1 */ latestCancellationInMinutes?: number; /** * Whether this cancellation policy allows anonymous cancellations. * * **Important**: This flag only applies when `enabled` is `true`. If the cancellation * policy itself is disabled (`enabled` = `false`), anonymous users cannot cancel * regardless of this flag's value. * * When not set (null), defaults to enabled. Anonymous cancellations are allowed by default * so that customers aren't required to be site members to cancel their bookings. * * Default: `null` (treated as `true`) */ allowAnonymous?: boolean | null; } /** The policy for rescheduling a booked session. */ interface ReschedulePolicy { /** * Whether rescheduling a booking is allowed. When `true`, customers * can reschedule the booking. * * Default: `false` */ enabled?: boolean; /** * Whether there is a limit on the latest reschedule time. When `true`, * a time limit is enforced. * * Default: `false` */ limitLatestReschedule?: boolean; /** * Minimum number of minutes before the start of the booked session that the booking can be rescheduled. * * Default: 1440 minutes (1 day) * Min: 1 minute * @min 1 */ latestRescheduleInMinutes?: number; /** * Whether this reschedule policy allows anonymous rescheduling. * * **Important**: This flag only applies when `enabled` is `true`. If the reschedule * policy itself is disabled (`enabled` = `false`), anonymous users cannot reschedule * regardless of this flag's value. * * When not set (null), defaults to enabled. Anonymous rescheduling is allowed by default * so that customers aren't required to be site members to reschedule their bookings. * * Default: `null` (treated as `true`) */ allowAnonymous?: boolean | null; } /** The policy for the waitlist. */ interface WaitlistPolicy { /** * Whether the session has a waitlist. If `true`, there is a waitlist. * * Default: `false` */ enabled?: boolean; /** * Number of spots available in the waitlist. * * Default: 10 spots * Min: 1 spot * @min 1 */ capacity?: number; /** * Amount of time a participant is given to book, once notified that a spot is available. * * Default: 10 minutes * Min: 1 spot * @min 1 */ reservationTimeInMinutes?: number; } /** The policy for the maximum number of participants per booking. */ interface ParticipantsPolicy { /** * Maximum number of participants allowed. * * Default: 1 participant * Min: 1 participant * @min 1 */ maxParticipantsPerBooking?: number; } /** The policy regarding the allocation of resources (e.g. staff members). */ interface ResourcesPolicy { /** * `true` if this policy is enabled, `false` otherwise. * When `false` then the client must always select a resource when booking an appointment. */ enabled?: boolean; /** * `true`, if it is allowed to automatically assign a resource when booking an appointment, * `false`, if the client must always select a resource. * * Default: `false` */ autoAssignAllowed?: boolean; } interface CancellationFeePolicy { /** * Whether canceling a booking will result in a cancellation fee * * Default: `false` */ enabled?: boolean; /** * Cancellation windows describing the time of cancellation and the fee to charge. * @maxSize 2 */ cancellationWindows?: CancellationWindow[]; /** * Whether the cancellation fee should not be automatically collected when customer cancels the booking. * * Default: `true` */ autoCollectFeeEnabled?: boolean | null; } interface CancellationWindow extends CancellationWindowFeeOneOf { /** Amount to be charged as a cancellation fee. */ amount?: Money; /** * Percentage of the original price to be charged as a cancellation fee. * @decimalValue options { gt:0, lte:100, maxScale:2 } */ percentage?: string; /** * The fee will be applied if the booked session starts within this start time in minutes. * @min 1 */ startInMinutes?: number | null; } /** @oneof */ interface CancellationWindowFeeOneOf { /** Amount to be charged as a cancellation fee. */ amount?: Money; /** * Percentage of the original price to be charged as a cancellation fee. * @decimalValue options { gt:0, lte:100, maxScale:2 } */ percentage?: string; } interface SaveCreditCardPolicy { /** Default: `false` */ enabled?: boolean; } /** * Policy for determining how staff members are sorted and selected during the booking process. * This affects which staff member is chosen when multiple staff members are available for a service. */ interface StaffSortingPolicy extends StaffSortingPolicyOptionsOneOf { rankingOptions?: RankingOptions; customOptions?: CustomOptions; /** * Method used for sorting and selecting staff members. * * Default: `RANDOM` */ sortingMethodType?: SortingMethodTypeWithLiterals; } /** @oneof */ interface StaffSortingPolicyOptionsOneOf { rankingOptions?: RankingOptions; customOptions?: CustomOptions; } /** Order for ranking-based staff selection. */ declare enum RankingOrder { /** Staff members with lower priority values are selected first. */ LOWEST_TO_HIGHEST = "LOWEST_TO_HIGHEST", /** Staff members with higher priority values are selected first. */ HIGHEST_TO_LOWEST = "HIGHEST_TO_LOWEST" } /** @enumType */ type RankingOrderWithLiterals = RankingOrder | 'LOWEST_TO_HIGHEST' | 'HIGHEST_TO_LOWEST'; /** Method used to sort and select staff members. */ declare enum SortingMethodType { /** Staff members are selected randomly from available options. */ RANDOM = "RANDOM", /** Staff members are selected based on their priority ranking. */ RANKING = "RANKING", /** * Staff members are selected using a custom implementation provided by SortStaffSPI. * This allows third-party apps to implement custom staff sorting logic. */ CUSTOM = "CUSTOM" } /** @enumType */ type SortingMethodTypeWithLiterals = SortingMethodType | 'RANDOM' | 'RANKING' | 'CUSTOM'; /** * Configuration options for ranking-based staff selection. * Used when `sorting_method_type` is set to `RANKING`. */ interface RankingOptions { /** * Order in which staff members are sorted by their priority ranking. * * Default: `LOWEST_TO_HIGHEST` */ order?: RankingOrderWithLiterals; } /** * Configuration options for custom staff selection methods. * Used when `sorting_method_type` is set to `CUSTOM`. */ interface CustomOptions { /** * ID of the custom sorting method implemented in SortStaffSPI. * This identifies which custom sorting algorithm to use. * @format GUID */ implementationId?: string; /** * ID of the app that provides the custom sorting method. * @format GUID */ appId?: string; } /** Policy for integrating with Intake form. Stores which form to use and when to present it. */ interface IntakeFormPolicy { /** * Whether intake form integration is enabled for the service. * Default: `false` */ enabled?: boolean; /** * ID of the intake form to integrate with the service. * @format GUID */ formId?: string | null; /** When to present the intake form to the customer. */ timing?: TimingWithLiterals; completionRequirement?: CompletionRequirementWithLiterals; } declare enum Timing { /** Send form after booking. */ AFTER_BOOKING = "AFTER_BOOKING", /** Show form during booking flow. */ BEFORE_BOOKING = "BEFORE_BOOKING" } /** @enumType */ type TimingWithLiterals = Timing | 'AFTER_BOOKING' | 'BEFORE_BOOKING'; /** Requirement for completing the intake form. */ declare enum CompletionRequirement { /** Form completion is optional and can be skipped entirely. */ OPTIONAL = "OPTIONAL", /** * Form must be completed before the booking can be finalized. * can used only if timing is BEFORE_BOOKING. */ REQUIRED_BEFORE_BOOKING = "REQUIRED_BEFORE_BOOKING" } /** @enumType */ type CompletionRequirementWithLiterals = CompletionRequirement | 'OPTIONAL' | 'REQUIRED_BEFORE_BOOKING'; /** * Rule limiting how many times the same customer can book a service within a given period. * The first booking is always allowed; the limit constrains additional bookings. */ interface LimitRebookingPolicy { /** * Whether booking-frequency limits are enabled for the service. When `false`, there's no limit on how often a customer can book. * * Default: `false` */ enabled?: boolean; /** * Maximum number of bookings of the same service a single customer can make within `windowInMinutes`. * Only enforced when `enabled` is `true`, and required in that case. * * Example: `2` (up to two bookings per window) * Min: `1` * @min 1 */ maxBookings?: number | null; /** * Length of the rolling window, in minutes, over which `maxBookings` is counted. Only enforced when `enabled` is `true`. * When enabled and left unset, the limit applies over all time (a lifetime cap) — e.g. `maxBookings = 1` with no window blocks rebooking permanently. * * Examples: `1440` (1 day), `10080` (7 days), `43200` (30 days) * @min 1 */ windowInMinutes?: number | null; } interface Schedule { /** * ID of the [schedule](https://dev.wix.com/docs/api-reference/business-management/calendar/schedules-v3/introduction) * to which the service's events belong. * @format GUID * @readonly */ id?: string | null; /** * Start time of the first session in the schedule. For courses only. * @readonly */ firstSessionStart?: Date | null; /** * End time of the last session in the schedule. For courses only. * @readonly */ lastSessionEnd?: Date | null; /** Limitations affecting the service availability. */ availabilityConstraints?: AvailabilityConstraints; } interface AvailabilityConstraints { /** * Calculated list of all supported session durations for the service. For * appointment-based services without varied pricing based on session length, it * matches the single value in the `sessionDurations` array. For appointment-based * services with varied pricing based on session length, it includes session * durations for all [variants](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/service-options-and-variants/introduction), * while ignoring `sessionDurations`. * For courses and classes, it includes durations for all future * recurring sessions but excludes durations for one-off or past recurring sessions. * @readonly * @maxSize 50 */ durations?: Duration[]; /** * List of supported session durations in minutes. * * - For appointment-based services, specify `sessionDurations` when creating a service. * - For appointment-based services with varied pricing by session length, you must still specify `sessionDurations`, but the values are ignored. Actual durations are taken from the [service variants](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/service-options-and-variants/introduction). * - For classes or courses, don't specify `sessionDurations` when creating a service. * @min 1 * @max 44639 * @maxSize 50 */ sessionDurations?: number[]; /** * The number of minutes between the end of a session and the start of the next. * @max 720 */ timeBetweenSessions?: number; /** * Duration range for the service. When set, the customer picks a duration * within the configured min/max range instead of a fixed session duration. * Mutually exclusive with `sessionDurations`. A service uses one or the other. * Can't be combined with `workingHours`. * * Use `durationRange` for services where the customer chooses how long to book, * such as equipment or space rentals. The `unitType` determines whether the range * is measured in hours or days. */ durationRange?: DurationRange; } interface Duration { /** * The duration of the service in minutes. * @min 1 * @max 44639 */ minutes?: number; } /** * Duration range configuration for a service. Defines the minimum and maximum * booking duration a customer can select, and the unit of measurement. * * For hourly services, durations are configured in minutes via `hourOptions`. * For daily services, durations are configured in days via `dayOptions`. */ interface DurationRange extends DurationRangeConfigOneOf { /** Configuration for hourly duration ranges. Set when `unitType` is `HOUR`. */ hourOptions?: HourlyConfig; /** Configuration for daily duration ranges. Set when `unitType` is `DAY`. */ dayOptions?: DailyConfig; /** The unit type for this duration range. Determines which configuration to use in the `config` union. */ unitType?: UnitTypeWithLiterals; } /** @oneof */ interface DurationRangeConfigOneOf { /** Configuration for hourly duration ranges. Set when `unitType` is `HOUR`. */ hourOptions?: HourlyConfig; /** Configuration for daily duration ranges. Set when `unitType` is `DAY`. */ dayOptions?: DailyConfig; } /** The booking unit for the duration range. */ declare enum UnitType { /** Hourly booking unit. Durations are configured in minutes via `hourOptions`. */ HOUR = "HOUR", /** Daily booking unit. Durations are configured in days via `dayOptions`. */ DAY = "DAY" } /** @enumType */ type UnitTypeWithLiterals = UnitType | 'HOUR' | 'DAY'; /** Hourly duration configuration. Durations are specified in minutes. */ interface HourlyConfig { /** * Minimum bookable duration in minutes. The customer can't book for less than this duration. * @min 30 * @max 1440 */ minDurationInMinutes?: number; /** * Maximum bookable duration in minutes. The customer can't book for more than this duration. * * Must be greater than or equal to `minDurationInMinutes`. * @min 30 * @max 1440 */ maxDurationInMinutes?: number; } /** Daily duration configuration. Durations are specified in days. */ interface DailyConfig { /** * Minimum bookable duration in days. The customer can't book for less than this number of days. * @min 1 * @max 8 */ minDurationInDays?: number; /** * Maximum bookable duration in days. The customer can't book for more than this number of days. * * Must be greater than or equal to `minDurationInDays`. * @min 1 * @max 8 */ maxDurationInDays?: number; } /** * Controls how a service's own working hours combine with the working hours of its assigned * staff members and required resources. The hours themselves are not held here. They are the * `WORKING_HOURS` events on the service's schedule (`schedule.id`), and this message controls * only how they combine with the resources working hours. */ interface WorkingHours { /** How the service's own working hours combine with its resources working hours. */ mode?: ModeWithLiterals; } declare enum Mode { } /** @enumType */ type ModeWithLiterals = Mode; interface StaffMember { /** * ID of the [resource](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resources-v2/introduction) associated with the staff member providing the service. * Despite the field name, this is the resource ID, not the staff member ID. * This value matches the staff member's `resourceId` from the [Staff Members API](https://dev.wix.com/docs/api-reference/business-solutions/bookings/staff-members/staff-members/introduction) * and corresponds to the IDs in the service's `staffMemberIds` field. * @format GUID * @readonly */ staffMemberId?: string; /** * Name of the staff member * @maxLength 40 * @readonly */ name?: string | null; /** * Main media associated with the service. * @readonly */ mainMedia?: StaffMediaItem; } interface StaffMediaItem extends StaffMediaItemItemOneOf { /** Details of the image associated with the staff, such as URL and size. */ image?: Image; } /** @oneof */ interface StaffMediaItemItemOneOf { /** Details of the image associated with the staff, such as URL and size. */ image?: Image; } /** * Working hours location coverage derived from Calendar v3 WORKING_HOURS events * (`NONE` and `MASTER` recurrence types). The server paginates through Calendar results * (100 events per page) until all matching events are collected. * * Coverage states when enrichment is requested: * + `available_at_all_locations = true`: Staff applies to every business location. Set when the staff * uses default business working hours, or has any WORKING_HOURS event without a location ID * (including when mixed with location-specific events). * + `available_at_all_locations = false` with non-empty `location_ids`: Staff has location-specific * WORKING_HOURS only. Show the staff member only when the selected location is in `location_ids`. * + `available_at_all_locations = false` with empty `location_ids`: Staff has working-hours schedules * but no applicable location coverage was found. * * Recommended client filter: * `availableAtAllLocations || locationIds.includes(selectedLocationId)` * * Omitted when `STAFF_WORKING_HOURS_LOCATIONS` is not requested. */ interface WorkingHoursLocationCoverage { } interface StaffMemberDetails { /** * Staff members providing the service. For appointments only. * @maxSize 220 */ staffMembers?: StaffMember[]; } interface ResourceGroup { /** * An optional resource group ID. If specified, it references a resource group in the resource groups API. * TODO - referenced_entity annotation * @format GUID */ resourceGroupId?: string | null; /** * Resource IDs. Each ID references a resource in the resources API and may be a subset of resources within a resource group. * TODO - referenced_entity annotation */ resourceIds?: ResourceIds; /** * Specifies how many resources in the group / resource IDs are required to book the service. * Defaults to 1. * @min 1 */ requiredResourcesNumber?: number | null; /** * If set to `true`, the customer can select the specific resources while booking the service. * If set to `false`, the resources required to book the service will be auto-selected at the time of the booking. * Defaults to false. * @readonly */ selectableResource?: boolean | null; } interface ResourceIds { /** * Values of the resource IDs. * @maxSize 100 * @format GUID */ values?: string[]; } interface ServiceResource extends ServiceResourceSelectionOneOf { /** * IDs of specific [resources](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resources-v2/introduction) * assigned to this service resource. Each ID must reference a resource within the specified `resourceType`. * * When set, only these resources are considered for availability and booking. * When not set, all resources of the specified resource type are eligible. */ resourceIds?: ResourceIds; /** Details about the required [resource type](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resource-types-v2/introduction). */ resourceType?: ResourceType; } /** @oneof */ interface ServiceResourceSelectionOneOf { /** * IDs of specific [resources](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resources-v2/introduction) * assigned to this service resource. Each ID must reference a resource within the specified `resourceType`. * * When set, only these resources are considered for availability and booking. * When not set, all resources of the specified resource type are eligible. */ resourceIds?: ResourceIds; } interface ResourceType { /** * The type of the resource. * @format GUID */ id?: string | null; /** * The name of the resource type. * @readonly * @maxLength 40 * @minLength 1 */ name?: string | null; } /** Details about the individual resources assigned to a service resource. */ interface ResourceDetails { /** * List of resources assigned to this service resource. * @maxSize 100 */ resources?: ResourceInfo[]; } /** A resource assigned to a service resource. */ interface ResourceInfo { /** * ID of the resource. * @format GUID * @readonly */ id?: string; /** * Display name of the resource (for example, `"John Smith"` or `"Room A"`). * @readonly * @maxLength 100 */ name?: string | null; } interface Slug { /** * The unique part of service's URL that identifies the service's information page. For example, `service-1` in `https:/example.com/services/service-1`. * @maxLength 500 */ name?: string; /** * Whether the slug was generated or customized. If `true`, the slug was customized manually by the business owner. Otherwise, the slug was automatically generated from the service name. * @readonly */ custom?: boolean | null; /** * Date and time the slug was created. This is a system field. * @readonly */ createdDate?: Date | null; } interface URLs { /** * The URL for the service page. * @readonly */ servicePage?: PageUrlV2; /** * The URL for the booking entry point. It can be either to the calendar or to the service page. * @readonly */ bookingPage?: PageUrlV2; /** * The URL for the calendar. Can be empty if no calendar exists. * @readonly */ calendarPage?: PageUrlV2; } interface PageUrlV2 { /** * The relative path for the page within the site. For example, `/product-page/a-product`. * @maxLength 2048 */ relativePath?: string; /** * The page's full URL. For example, `https://mysite.com/product-page/a-product`. * @maxLength 2048 */ url?: string | null; } interface ExtendedFields { /** * Extended field data. Each key corresponds to the namespace of the app that created the extended fields. * The value of each key is structured according to the schema defined when the extended fields were configured. * * You can only access fields for which you have the appropriate permissions. * * Learn more about [extended fields](https://dev.wix.com/docs/rest/articles/getting-started/extended-fields). */ namespaces?: Record>; } /** * The SEO schema object contains data about different types of meta tags. It makes sure that the information about your page is presented properly to search engines. * The search engines use this information for ranking purposes, or to display snippets in the search results. * This data will override other sources of tags (for example patterns) and will be included in the section of the HTML document, while not being displayed on the page itself. */ interface SeoSchema { /** SEO tag information. */ tags?: Tag[]; /** SEO general settings. */ settings?: Settings; } interface Keyword { /** Keyword value. */ term?: string; /** Whether the keyword is the main focus keyword. */ isMain?: boolean; /** * The source that added the keyword terms to the SEO settings. * @maxLength 1000 */ origin?: string | null; } interface Tag { /** * SEO tag type. * * * Supported values: `title`, `meta`, `script`, `link`. */ type?: string; /** * A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. * For example: `{"name": "description", "content": "the description itself"}`. */ props?: Record | null; /** SEO tag metadata. For example, `{"height": 300, "width": 240}`. */ meta?: Record | null; /** SEO tag inner content. For example, ` inner content `. */ children?: string; /** Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages). */ custom?: boolean; /** Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines. */ disabled?: boolean; } interface Settings { /** * Whether the [automatical redirect visits](https://support.wix.com/en/article/customizing-your-pages-seo-settings-in-the-seo-panel) from the old URL to the new one is enabled. * * * Default: `false` (automatical redirect is enabled). */ preventAutoRedirect?: boolean; /** * User-selected keyword terms for a specific page. * @maxSize 5 */ keywords?: Keyword[]; } interface AddOnGroup { /** * ID of the add-on group. * Wix Bookings automatically populates this field when creating or updating an add-on group. * @readonly * @format GUID */ id?: string | null; /** * Name of the add-on group. * @maxLength 100 */ name?: string | null; /** * Maximum number of different [add-ons](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/add-ons/introduction) from the group customers can add when booking the service. * When empty, there's no upper limit. */ maxNumberOfAddOns?: number | null; /** * List of IDs of all [add-ons](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/add-ons/introduction) included in the group. * @format GUID * @maxSize 7 */ addOnIds?: string[] | null; /** * Description or instructional prompt of the add-on group that's displayed to customers when booking the service. * @maxLength 200 */ prompt?: string | null; } interface AddOnDetails { /** * ID of the add-on. * @format GUID */ addOnId?: string | null; /** * Duration in minutes for add-ons that extend service time. * Empty for [quantity-based add-ons](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/add-ons/introduction#terminology). */ durationInMinutes?: number | null; } /** `TaxableAddress` defines the taxable address used for the service. */ interface TaxableAddress { /** Taxable address type. */ taxableAddressType?: TaxableAddressTypeWithLiterals; } declare enum TaxableAddressType { BUSINESS = "BUSINESS", BILLING = "BILLING" } /** @enumType */ type TaxableAddressTypeWithLiterals = TaxableAddressType | 'BUSINESS' | 'BILLING'; interface PhoneCall { /** Whether the service is delivered via phone call. */ enabled?: boolean | null; } interface CursorPagingMetadata { /** Number of items returned in the response. */ count?: number | null; /** Cursor strings that point to the next page, previous page, or both. */ cursors?: Cursors; /** * Whether there are more pages to retrieve following the current page. * * + `true`: Another page of results can be retrieved. * + `false`: This is the last page. */ hasNext?: boolean | null; } interface Cursors { /** * Cursor string pointing to the next page in the list of results. * @maxLength 16000 */ next?: string | null; /** * Cursor pointing to the previous page in the list of results. * @maxLength 16000 */ prev?: string | null; } type __PublicMethodMetaInfo = { getUrl: (context: any) => string; httpMethod: K; path: string; pathParams: M; __requestType: T; __originalRequestType: S; __responseType: Q; __originalResponseType: R; }; declare function queryServicesByFilters(): __PublicMethodMetaInfo<'POST', {}, QueryServicesByFiltersRequest$1, QueryServicesByFiltersRequest, QueryServicesByFiltersResponse$1, QueryServicesByFiltersResponse>; export { type AddOnDetails as AddOnDetailsOriginal, type AddOnGroup as AddOnGroupOriginal, AddOnPaymentOptions as AddOnPaymentOptionsOriginal, type AddOnPaymentOptionsWithLiterals as AddOnPaymentOptionsWithLiteralsOriginal, type AddressLocation as AddressLocationOriginal, type Address as AddressOriginal, type AddressStreetOneOf as AddressStreetOneOfOriginal, type Attribute as AttributeOriginal, type AttributeValueOneOf as AttributeValueOneOfOriginal, type AvailabilityConstraints as AvailabilityConstraintsOriginal, type BookAfterStartPolicy as BookAfterStartPolicyOriginal, type BookingPolicy as BookingPolicyOriginal, type BusinessLocationOptions as BusinessLocationOptionsOriginal, type CancellationFeePolicy as CancellationFeePolicyOriginal, type CancellationPolicy as CancellationPolicyOriginal, type CancellationWindowFeeOneOf as CancellationWindowFeeOneOfOriginal, type CancellationWindow as CancellationWindowOriginal, type CatalogSearchResult as CatalogSearchResultOriginal, type Category as CategoryOriginal, CompletionRequirement as CompletionRequirementOriginal, type CompletionRequirementWithLiterals as CompletionRequirementWithLiteralsOriginal, type Conferencing as ConferencingOriginal, type CursorPagingMetadata as CursorPagingMetadataOriginal, type CursorPaging as CursorPagingOriginal, type CursorQuery as CursorQueryOriginal, type CursorQueryPagingMethodOneOf as CursorQueryPagingMethodOneOfOriginal, type Cursors as CursorsOriginal, type CustomLocationOptions as CustomLocationOptionsOriginal, type CustomOptions as CustomOptionsOriginal, type CustomPayment as CustomPaymentOriginal, type DailyConfig as DailyConfigOriginal, type DepositDetails as DepositDetailsOriginal, type DepositDetailsValueOneOf as DepositDetailsValueOneOfOriginal, type DiscountInfo as DiscountInfoOriginal, type Duration as DurationOriginal, type DurationRangeConfigOneOf as DurationRangeConfigOneOfOriginal, type DurationRange as DurationRangeOriginal, type ExtendedFields as ExtendedFieldsOriginal, FirstChargeDateType as FirstChargeDateTypeOriginal, type FirstChargeDateTypeWithLiterals as FirstChargeDateTypeWithLiteralsOriginal, type FixedPayment as FixedPaymentOriginal, type Form as FormOriginal, type FormSettings as FormSettingsOriginal, FrequencyType as FrequencyTypeOriginal, type FrequencyTypeWithLiterals as FrequencyTypeWithLiteralsOriginal, type FullUpfrontPayment as FullUpfrontPaymentOriginal, type HourlyConfig as HourlyConfigOriginal, type Image as ImageOriginal, type IntakeFormPolicy as IntakeFormPolicyOriginal, type Keyword as KeywordOriginal, type LimitEarlyBookingPolicy as LimitEarlyBookingPolicyOriginal, type LimitLateBookingPolicy as LimitLateBookingPolicyOriginal, type LimitRebookingPolicy as LimitRebookingPolicyOriginal, type LocationOptionsOneOf as LocationOptionsOneOfOriginal, type Location as LocationOriginal, LocationType as LocationTypeOriginal, type LocationTypeWithLiterals as LocationTypeWithLiteralsOriginal, type MediaItemItemOneOf as MediaItemItemOneOfOriginal, type MediaItem as MediaItemOriginal, type Media as MediaOriginal, Mode as ModeOriginal, type ModeWithLiterals as ModeWithLiteralsOriginal, type Money as MoneyOriginal, type NumberRange as NumberRangeOriginal, type NumberValues as NumberValuesOriginal, type OnlineBooking as OnlineBookingOriginal, type PageUrlV2 as PageUrlV2Original, type ParticipantsPolicy as ParticipantsPolicyOriginal, type PaymentOptions as PaymentOptionsOriginal, type Payment as PaymentOriginal, type PaymentRateOneOf as PaymentRateOneOfOriginal, type PhoneCall as PhoneCallOriginal, type PolicyDescription as PolicyDescriptionOriginal, type QueryServicesByFiltersRequest as QueryServicesByFiltersRequestOriginal, type QueryServicesByFiltersResponse as QueryServicesByFiltersResponseOriginal, type RankingOptions as RankingOptionsOriginal, RankingOrder as RankingOrderOriginal, type RankingOrderWithLiterals as RankingOrderWithLiteralsOriginal, RateType as RateTypeOriginal, type RateTypeWithLiterals as RateTypeWithLiteralsOriginal, type ReschedulePolicy as ReschedulePolicyOriginal, type ResourceDetails as ResourceDetailsOriginal, type ResourceGroup as ResourceGroupOriginal, type ResourceIds as ResourceIdsOriginal, type ResourceInfo as ResourceInfoOriginal, type ResourceType as ResourceTypeOriginal, type ResourcesPolicy as ResourcesPolicyOriginal, type SaveCreditCardPolicy as SaveCreditCardPolicyOriginal, type Schedule as ScheduleOriginal, type SeoSchema as SeoSchemaOriginal, type ServiceFilters as ServiceFiltersOriginal, type Service as ServiceOriginal, type ServiceResource as ServiceResourceOriginal, type ServiceResourceSelectionOneOf as ServiceResourceSelectionOneOfOriginal, ServiceType as ServiceTypeOriginal, type ServiceTypeWithLiterals as ServiceTypeWithLiteralsOriginal, type ServiceWithAvailability as ServiceWithAvailabilityOriginal, type Settings as SettingsOriginal, type Slug as SlugOriginal, SortOrder as SortOrderOriginal, type SortOrderWithLiterals as SortOrderWithLiteralsOriginal, SortingMethodType as SortingMethodTypeOriginal, type SortingMethodTypeWithLiterals as SortingMethodTypeWithLiteralsOriginal, type Sorting as SortingOriginal, type StaffMediaItemItemOneOf as StaffMediaItemItemOneOfOriginal, type StaffMediaItem as StaffMediaItemOriginal, type StaffMemberDetails as StaffMemberDetailsOriginal, type StaffMember as StaffMemberOriginal, type StaffSortingPolicyOptionsOneOf as StaffSortingPolicyOptionsOneOfOriginal, type StaffSortingPolicy as StaffSortingPolicyOriginal, type StreetAddress as StreetAddressOriginal, type SubscriptionPayment as SubscriptionPaymentOriginal, type Tag as TagOriginal, type TaxableAddress as TaxableAddressOriginal, TaxableAddressType as TaxableAddressTypeOriginal, type TaxableAddressTypeWithLiterals as TaxableAddressTypeWithLiteralsOriginal, Timing as TimingOriginal, type TimingWithLiterals as TimingWithLiteralsOriginal, type URLs as URLsOriginal, UnitType as UnitTypeOriginal, type UnitTypeWithLiterals as UnitTypeWithLiteralsOriginal, type VariedPayment as VariedPaymentOriginal, type WaitlistPolicy as WaitlistPolicyOriginal, type WorkingHoursLocationCoverage as WorkingHoursLocationCoverageOriginal, type WorkingHours as WorkingHoursOriginal, type __PublicMethodMetaInfo, queryServicesByFilters };