> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # CloneServiceOptionsAndVariants # Package: services # Namespace: ServiceOptionsAndVariantsService # Method link: https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/service-options-and-variants/clone-service-options-and-variants.md ## Permission Scopes: Manage Bookings Services and Settings: SCOPE.BOOKINGS.CONFIGURATION ## Introduction Clones a `serviceOptionsAndVariants` object and connects it to a [service](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/introduction.md). The call fails if the service already has a connected `serviceOptionsAndVariants` object. The cloned `serviceOptionsAndVariants` object gets a new, unique option ID. The option ID of the existing `serviceOptionsAndVariants` object isn't reused. For example, you may call this method after [cloning a service](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/clone-service.md). --- ## REST API ### Schema ``` Method: cloneServiceOptionsAndVariants Description: Clones a `serviceOptionsAndVariants` object and connects it to a [service](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/introduction.md). The call fails if the service already has a connected `serviceOptionsAndVariants` object. The cloned `serviceOptionsAndVariants` object gets a new, unique option GUID. The option GUID of the existing `serviceOptionsAndVariants` object isn't reused. For example, you may call this method after [cloning a service](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/clone-service.md). URL: https://www.wixapis.com/bookings/v1/serviceOptionsAndVariants/{cloneFromId}/clone Method: POST # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: targetServiceId Method parameters: param name: targetServiceId | type: targetServiceId | description: GUID of the service to which the cloned `serviceOptionsAndVariants` are connected. | required: true Return type: CloneServiceOptionsAndVariantsResponse - name: serviceOptionsAndVariants | type: ServiceOptionsAndVariants | description: Cloned `serviceOptionsAndVariants` object. - name: id | type: string | description: GUID of the `serviceOptionsAndVariants` object. - name: serviceId | type: string | description: GUID of the service related to these options and variants. - name: options | type: ServiceOptions | description: Service options. Note that currently only a single option is supported per service. - name: values | type: array | description: Values of the service options. Max: 1 service option - ONE-OF: - name: customData | type: CustomServiceOption | description: Details about the custom option. Available only for `CUSTOM` options. - name: name | type: string | description: Name of the service option. For example, `Age group`, `Location`, `Equipment`, or `Time`. - name: choices | type: array | description: Available choices for the service option. For example, `child`, `student`, `adult`, and `senior` for a service option named `Age group`. Each value must be unique. The value's case is ignored, meaning `Child` and `child` are considered to be identical. Currently, only a single choice is supported because a service can have only a single option. Max: 1 choice - name: durationData | type: DurationServiceOption | description: - name: name | type: string | description: Optional name of the duration option. For example, `Short Class`, or `Extended Class`. - name: id | type: string | description: GUID of the service option. - name: type | type: ServiceOptionType | description: Type of the service option. - enum: - UNKNOWN: There is no information about the option type. - CUSTOM: The service option is based on a custom parameter. For example, age group, booked equipment, or appointment timing. - STAFF_MEMBER: It's a [staff member](https://dev.wix.com/docs/rest/business-solutions/bookings/staff-members/introduction.md) based option. - DURATION: It's a duration-based option. - name: variants | type: ServiceVariants | description: Information about the service's variants. - name: values | type: array | description: Values of the service variants. - name: choices | type: array | description: Choices for the service option. Currently, only a single choice is supported because a service can have only a single option. Max: 1 choice - ONE-OF: - name: custom | type: string | description: Name of the custom choice. - name: staffMemberId | type: string | description: GUID of the [resource](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resources-v2/introduction.md) associated with the [staff member](https://dev.wix.com/docs/api-reference/business-solutions/bookings/staff-members/introduction.md) providing the service. - name: duration | type: Duration | description: Information about the option's duration. - name: minutes | type: integer | description: Duration of the service in minutes. Min: `1` minute Max: `44639` minutes (30 days, 23 hours, and 59 minutes) - name: name | type: string | description: Name of the duration option. Default: Human-readable text of `minutes`. For example, `1 hr 30 min`. - name: optionId | type: string | description: GUID of the service option. - name: price | type: Money | description: Information about the service variant's price. - name: value | type: string | description: Monetary amount. Decimal string with a period as a decimal separator (e.g., 3.99). Optionally, a single (-), to indicate that the amount is negative. - name: currency | type: string | description: Currency code. Must be valid ISO 4217 currency code (e.g., USD). - name: formattedValue | type: string | description: Monetary amount. Decimal string in local format (e.g., 1 000,30). Optionally, a single (-), to indicate that the amount is negative. - name: minPrice | type: Money | description: Price of the cheapest service variant. - name: maxPrice | type: Money | description: Price of the most expensive service variant. - name: revision | type: string | description: Revision number, which increments by 1 each time the `serviceOptionsAndVariants` object is updated. To prevent conflicting changes, the current revision must be passed when updating and deleting the `serviceOptionsAndVariants` object. Ignored when creating a `serviceOptionsAndVariants` object. - name: extendedFields | type: ExtendedFields | description: Extensions enabling users to save custom data related to service options and variants. - name: namespaces | type: object | description: 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.md). ``` ### Examples ### Clone options and variants for a service ```curl curl -X POST \ 'https://wixapis.com/bookings/v1/serviceOptionsAndVariants/0cf0c708-58f0-408b-a10f-a6d9b6e2a6de/clone' \ -H 'Authorization: ' \ -d '{ "targetServiceId": "cea2bc29-9f05-4523-a4d7-cd52983b43dc" }' ``` --- ## JavaScript SDK ### Schema ``` Method: wixClientAdmin.services.ServiceOptionsAndVariantsService.cloneServiceOptionsAndVariants(cloneFromId, targetServiceId) Description: Clones a `serviceOptionsAndVariants` object and connects it to a [service](https://dev.wix.com/docs/rest/business-solutions/bookings/services/services-v2/introduction.md). The call fails if the service already has a connected `serviceOptionsAndVariants` object. The cloned `serviceOptionsAndVariants` object gets a new, unique option GUID. The option GUID of the existing `serviceOptionsAndVariants` object isn't reused. For example, you may call this method after [cloning a service](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/clone-service.md). # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: cloneFromId, targetServiceId Method parameters: param name: cloneFromId | type: string | description: GUID of the `serviceOptionsAndVariants` object to clone. | required: true param name: targetServiceId | type: string | description: GUID of the service to which the cloned `serviceOptionsAndVariants` are connected. | required: true Return type: PROMISE - name: serviceOptionsAndVariants | type: ServiceOptionsAndVariants | description: Cloned `serviceOptionsAndVariants` object. - name: _id | type: string | description: GUID of the `serviceOptionsAndVariants` object. - name: serviceId | type: string | description: GUID of the service related to these options and variants. - name: options | type: ServiceOptions | description: Service options. Note that currently only a single option is supported per service. - name: values | type: array | description: Values of the service options. Max: 1 service option - ONE-OF: - name: customData | type: CustomServiceOption | description: Details about the custom option. Available only for `CUSTOM` options. - name: name | type: string | description: Name of the service option. For example, `Age group`, `Location`, `Equipment`, or `Time`. - name: choices | type: array | description: Available choices for the service option. For example, `child`, `student`, `adult`, and `senior` for a service option named `Age group`. Each value must be unique. The value's case is ignored, meaning `Child` and `child` are considered to be identical. Currently, only a single choice is supported because a service can have only a single option. Max: 1 choice - name: durationData | type: DurationServiceOption | description: - name: name | type: string | description: Optional name of the duration option. For example, `Short Class`, or `Extended Class`. - name: _id | type: string | description: GUID of the service option. - name: type | type: ServiceOptionType | description: Type of the service option. - enum: - UNKNOWN: There is no information about the option type. - CUSTOM: The service option is based on a custom parameter. For example, age group, booked equipment, or appointment timing. - STAFF_MEMBER: It's a [staff member](https://dev.wix.com/docs/rest/business-solutions/bookings/staff-members/introduction.md) based option. - DURATION: It's a duration-based option. - name: variants | type: ServiceVariants | description: Information about the service's variants. - name: values | type: array | description: Values of the service variants. - name: choices | type: array | description: Choices for the service option. Currently, only a single choice is supported because a service can have only a single option. Max: 1 choice - ONE-OF: - name: custom | type: string | description: Name of the custom choice. - name: staffMemberId | type: string | description: GUID of the [resource](https://dev.wix.com/docs/api-reference/business-solutions/bookings/resources/resources-v2/introduction.md) associated with the [staff member](https://dev.wix.com/docs/api-reference/business-solutions/bookings/staff-members/introduction.md) providing the service. - name: duration | type: Duration | description: Information about the option's duration. - name: minutes | type: integer | description: Duration of the service in minutes. Min: `1` minute Max: `44639` minutes (30 days, 23 hours, and 59 minutes) - name: name | type: string | description: Name of the duration option. Default: Human-readable text of `minutes`. For example, `1 hr 30 min`. - name: optionId | type: string | description: GUID of the service option. - name: price | type: Money | description: Information about the service variant's price. - name: value | type: string | description: Monetary amount. Decimal string with a period as a decimal separator (e.g., 3.99). Optionally, a single (-), to indicate that the amount is negative. - name: currency | type: string | description: Currency code. Must be valid ISO 4217 currency code (e.g., USD). - name: formattedValue | type: string | description: Monetary amount. Decimal string in local format (e.g., 1 000,30). Optionally, a single (-), to indicate that the amount is negative. - name: minPrice | type: Money | description: Price of the cheapest service variant. - name: maxPrice | type: Money | description: Price of the most expensive service variant. - name: revision | type: string | description: Revision number, which increments by 1 each time the `serviceOptionsAndVariants` object is updated. To prevent conflicting changes, the current revision must be passed when updating and deleting the `serviceOptionsAndVariants` object. Ignored when creating a `serviceOptionsAndVariants` object. - name: extendedFields | type: ExtendedFields | description: Extensions enabling users to save custom data related to service options and variants. - name: namespaces | type: object | description: 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.md). ``` ### Examples ### cloneServiceOptionsAndVariants ```javascript import { serviceOptionsAndVariants } from '@wix/bookings'; async function cloneServiceOptionsAndVariants(cloneFromId,targetServiceId) { const response = await serviceOptionsAndVariants.cloneServiceOptionsAndVariants(cloneFromId,targetServiceId); }; ``` ### cloneServiceOptionsAndVariants (with elevated permissions) ```javascript import { serviceOptionsAndVariants } from '@wix/bookings'; import { auth } from '@wix/essentials'; async function myCloneServiceOptionsAndVariantsMethod(cloneFromId,targetServiceId) { const elevatedCloneServiceOptionsAndVariants = auth.elevate(serviceOptionsAndVariants.cloneServiceOptionsAndVariants); const response = await elevatedCloneServiceOptionsAndVariants(cloneFromId,targetServiceId); } ``` ### cloneServiceOptionsAndVariants (self-hosted) Self-hosted SDK calls require you to [create a client](https://dev.wix.com/docs/sdk/articles/work-with-the-sdk/about-the-wix-client.md). ```javascript import { createClient } from '@wix/sdk'; import { serviceOptionsAndVariants } from '@wix/bookings'; // Import the auth strategy for the relevant access type // Import the relevant host module if needed const myWixClient = createClient ({ modules: { serviceOptionsAndVariants }, // Include the auth strategy and host as relevant }); async function cloneServiceOptionsAndVariants(cloneFromId,targetServiceId) { const response = await myWixClient.serviceOptionsAndVariants.cloneServiceOptionsAndVariants(cloneFromId,targetServiceId); }; ``` ---