> 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 # Package: suppliersHub # Namespace: products # Webhook link: https://dev.wix.com/docs/api-reference/business-solutions/suppliers-hub/products/product-updated.md ## Introduction Triggered when a product is updated. --- ## REST API ### Schema ``` Webhook: Product Updated Description: Triggered when a product is updated. Event body: - name: id | type: string | description: Unique event ID. Allows clients to ignore duplicate events. - name: entityFqdn | type: string | description: Fully qualified domain name of the entity associated with the event. - name: slug | type: string | description: Event name. - name: entityId | type: string | description: ID of the entity associated with the event. - name: eventTime | type: string (date-time) | description: Event timestamp. - name: triggeredByAnonymizeRequest | type: boolean | description: Whether the event was triggered as a result of a privacy regulation application such as GDPR. - name: originatedFrom | type: string | description: If present, indicates the action that triggered the event. - name: updatedEvent | type: object | description: Updated event details. - name: currentEntity | type: Product | description: The entity after the update. - name: id | type: string | description: Product GUID. - name: createdDate | type: string | description: Date and time the product was created. - name: updatedDate | type: string | description: Date and time the product was updated. - name: providerInfo | type: ProviderInfo | description: Information about the business partner providing this product. - name: appId | type: string | description: Provider application GUID. - name: productId | type: string | description: Unique product identifier on the provider's platform. This field serves as the external system's primary key for synchronization and prevents duplicate products from being created. Once set, you can't change this field. - name: productCreatedDate | type: string | description: Date and time the product was created on the provider's platform. This field helps maintain the connection to the original product source. Once set, you can't change this field. - name: url | type: string | description: Product URL on the provider's platform. - name: name | type: string | description: Product name. - name: description | type: string | description: Product description. - name: visible | type: boolean | description: Whether the product is visible in the Marketplace. Default: `true` - name: media | type: Media | description: Product media. - name: main | type: Image | description: Primary product image, automatically set from the first item in the `items` array. - name: id | type: string | description: WixMedia image GUID. - name: url | type: string | description: Image URL. - name: height | type: integer | description: Original image height. - name: width | type: integer | description: Original image width. - name: altText | type: string | description: Image alt text. - name: filename | type: string | description: Image filename. - name: items | type: array | description: Product images. The first image becomes the main image. - name: types | type: array | description: Business model types this product supports. - enum: - DROPSHIPPING: Product is fulfilled by the supplier without inventory management by the store owner. - WHOLESALE: Product is sold in bulk quantities with tiered pricing. - PRINT_ON_DEMAND: Product is manufactured after purchase; no pre‑held inventory. - name: options | type: array | description: Product options that customers can choose from. Options display available product variations like size and color to help buyers make purchase decisions. Currently, options are informational only and don't create separate inventory items or variants. There are 2 predefined option types you can use: - `color`: Color choices for the product. Values should be standard color names. For example, `"Black"`, `"White"`, `"Yellow"`. - `size`: Size choices for the product. Values should be standard size labels. For example, `"S"`, `"M"`, `"L"`, `"XL"`. - name: name | type: string | description: Option name. There are 2 predefined options you can use: - `color`: Represents color choices for the product. Values should be standard color names. For example, `"Black"`, `"White"`, `"Yellow"`. - `size`: Represents size choices for the product. Values should be standard size labels. For example, `"S"`, `"M"`, `"L"`, `"XL"`. - name: description | type: string | description: Optional description explaining the option. - name: values | type: array | description: Available values for this option. - ONE-OF: - name: color | type: ColorOption | description: Color option with name, hex code, and sort order. - name: name | type: string | description: Color name. For example, `"Black"` or `"Navy Blue"`. Use 'Multicolor' for mixed colors. When using 'Multicolor', do not provide a hex value. - name: hex | type: string | description: Hex color code. For example, `"#000000"` for black. Omit for 'Multicolor'. - name: ribbonName | type: string | description: Promotional ribbon text displayed on the product. For example, `"New Arrival"` or `"Bestseller"`. - name: brand | type: string | description: Brand name. - name: orderProcessingTime | type: TimeInterval | description: Time required to process orders before shipping. - name: min | type: TimeValue | description: Minimum time in the range. - name: value | type: integer | description: Numeric time value. For example, `2` for "2 days". - name: unit | type: TimeUnit | description: Time unit for the value. - enum: - DAY: Days. - WEEK: Weeks. - MONTH: Months. - name: max | type: TimeValue | description: Maximum time in the range. - name: shippingDestinations | type: array | description: Countries and regions where this product can be shipped, with location-specific pricing and timing. - ONE-OF: - name: specificCountrySelections | type: Countries | description: Specific countries. Used when `countrySelections` is `SPECIFIC_COUNTRY`. - name: countries | type: array | description: Country codes, in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1) format. - name: countrySelections | type: CountrySelections | description: Indicates if shipping applies to selected countries or to all other regions. - enum: - REST_OF_THE_WORLD: All countries not specifically listed elsewhere. - SPECIFIC_COUNTRY: Specific countries listed in the `countries` field. - name: minimumShippingCost | type: string | description: Minimum shipping cost to this destination in USD. - name: shippingTime | type: TimeInterval | description: Expected shipping time to this destination. - name: minimumProductCost | type: string | description: Minimum Product Cost to the Shipping Location - name: minimumPrice | type: string | description: Minimum price, in USD. - name: productOrigin | type: string | description: Country where the product is manufactured or originates from, in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format. - name: directCategories | type: array | description: List of categories that directly contain this product. Each category's namespace must match at least one of the product's types. For example, if a product has type `DROPSHIPPING`, its categories must use `DROPSHIPPING_NAMESPACE`. Products with both `DROPSHIPPING` and `WHOLESALE` types can have categories from both namespaces. - name: id | type: string | description: Category GUID. - name: index | type: integer | description: Product's position within this category. - name: namespace | type: CategoryNamespace | description: The namespace of the category tree this assignment belongs to. - enum: - DROPSHIPPING_NAMESPACE: Namespace for the dropshipping category tree. - WHOLESALE_NAMESPACE: Namespace for the wholesale category tree. - PRINT_ON_DEMAND_NAMESPACE: Namespace for the print on demand category tree. - name: allCategories | type: array | description: List of categories that directly contain this product, as well as their parent categories. - name: wholesaleOptions | type: WholesaleOptions | description: Wholesale-specific configuration including tiered pricing and minimum order quantities. Required when `types` includes `WHOLESALE`. - name: priceTiers | type: array | description: Tiered pricing based on order quantity ranges. Price tiers must be continuous with no gaps in quantity ranges. For example, if tier 1 covers quantities 1-100, tier 2 must start at 101. The system validates tier continuity when creating or updating products. - name: priceFrom | type: string | description: Minimum price for this quantity tier in USD. If `priceTo` isn't specified, this price applies to all quantities in the tier. - name: priceTo | type: string | description: Maximum price for this quantity tier in USD. Optional for fixed-price tiers. - name: countFrom | type: integer | description: Minimum quantity for this price tier, inclusive. - name: countTo | type: integer | description: Maximum quantity for this price tier, inclusive. If not specified, this tier applies to all quantities greater or equal to `countFrom`. - name: minimumOrderQuantity | type: integer | description: Minimum quantity required for wholesale orders. - name: supplierInfo | type: SupplierInfo | description: Information about the supplier including name, rating, and trust status. - name: id | type: string | description: Supplier GUID. When provided, references a supplier in the Marketplace Supplier service. The system automatically retrieves and populates the supplier's name, rating, and verification status. - name: name | type: string | description: Supplier name. Automatically populated from the Supplier service when `id` is provided. - name: rating | type: string | description: Supplier rating from 1.00 to 5.00. Automatically populated from the Supplier service when `id` is provided. - name: verified | type: boolean | description: Whether the supplier has been verified by the Marketplace. Verified suppliers have completed the Marketplace verification process. Automatically populated from the Supplier service when `id` is provided. Default: `false` - name: printOnDemandOptions | type: PrintOnDemandOptions | description: Print-on-demand-specific configuration including supported print technologies and mockup assets. Required when `types` include `PRINT_ON_DEMAND`. - name: printTechnologies | type: array | description: Set of possible print technologies for the Product - enum: - DIRECT_TO_FILM: Transfers printed on film and heat-pressed onto fabric. - DIRECT_TO_GARMENT: Ink directly onto garment. - CUT_SEW_SUBLIMATION: Panels are printed first, then sewn. All‑over coverage with precise placements. - DIGITAL_PRINTING: Non‑DTG digital methods (e.g., roll‑to‑roll). - EMBROIDERY: Stitched threads, premium look. - SUBLIMATION: Dye infused into polyester/poly‑coated substrates. - UV_PRINTING: Cures ink with UV light on rigid or treated surfaces. - KNITWEAR: Pattern/design is knitted, not printed. - DIRECT_TO_FABRIC: Designs are printed directly onto rolls of fabric, which are then cut and sewn into the final product. - name: mockupImage | type: Image | description: Mockup image of the product with 'Your Image Here' text. - name: sizeGuides | type: array | description: Information about the product sizing - name: measurementUnit | type: MeasurementUnit | description: Sizes units (inches or cm) - enum: CM, INCHES - name: description | type: string | description: Text description of the size guide - name: imageUrl | type: string | description: Image for the size guide - name: imageDescription | type: string | description: Text description of the image content - name: specifications | type: array | description: Sizes specifications - name: category | type: string | description: What is measured, e.g. chest, waist, sleeve - name: measurements | type: array | description: Measurements for different sizes - ONE-OF: - name: singleValue | type: string | description: The value of the size in case of single value - name: range | type: MeasurementValueRange | description: The value of the size in case of range (min/max) - name: minimum | type: string | description: Minimum value - name: maximum | type: string | description: Maximum value - name: sizeLabel | type: string | description: Product size, e.g. S, M, L - name: tags | type: Tags | description: Product tags for organization and filtering. - name: privateTags | type: TagList | description: Tags that require an additional permission in order to access them, normally not given to site members or visitors. - name: tagIds | type: array | description: List of tag GUIDs. - name: publicTags | type: TagList | description: Tags that are exposed to anyone who has access to the labeled entity itself, including site members and visitors. - name: modifiedFields | type: Map | description: Fields that were updated and their values before the update. ``` --- ## JavaScript SDK ### Schema ``` Webhook: onProductUpdated Description: Triggered when a product is updated. Payload: ProductUpdatedEnvelope - name: entity | type: Product | description: none - name: _id | type: string | description: Product GUID. - name: _createdDate | type: Date | description: Date and time the product was created. - name: _updatedDate | type: Date | description: Date and time the product was updated. - name: providerInfo | type: ProviderInfo | description: Information about the business partner providing this product. - name: appId | type: string | description: Provider application GUID. - name: productId | type: string | description: Unique product identifier on the provider's platform. This field serves as the external system's primary key for synchronization and prevents duplicate products from being created. Once set, you can't change this field. - name: productCreatedDate | type: Date | description: Date and time the product was created on the provider's platform. This field helps maintain the connection to the original product source. Once set, you can't change this field. - name: url | type: string | description: Product URL on the provider's platform. - name: name | type: string | description: Product name. - name: description | type: string | description: Product description. - name: visible | type: boolean | description: Whether the product is visible in the Marketplace. Default: `true` - name: media | type: Media | description: Product media. - name: main | type: string | description: Primary product image, automatically set from the first item in the `items` array. - name: items | type: array | description: Product images. The first image becomes the main image. - name: types | type: array | description: Business model types this product supports. - enum: - DROPSHIPPING: Product is fulfilled by the supplier without inventory management by the store owner. - WHOLESALE: Product is sold in bulk quantities with tiered pricing. - PRINT_ON_DEMAND: Product is manufactured after purchase; no pre‑held inventory. - name: options | type: array | description: Product options that customers can choose from. Options display available product variations like size and color to help buyers make purchase decisions. Currently, options are informational only and don't create separate inventory items or variants. There are 2 predefined option types you can use: - `color`: Color choices for the product. Values should be standard color names. For example, `"Black"`, `"White"`, `"Yellow"`. - `size`: Size choices for the product. Values should be standard size labels. For example, `"S"`, `"M"`, `"L"`, `"XL"`. - name: name | type: string | description: Option name. There are 2 predefined options you can use: - `color`: Represents color choices for the product. Values should be standard color names. For example, `"Black"`, `"White"`, `"Yellow"`. - `size`: Represents size choices for the product. Values should be standard size labels. For example, `"S"`, `"M"`, `"L"`, `"XL"`. - name: description | type: string | description: Optional description explaining the option. - name: values | type: array | description: Available values for this option. - ONE-OF: - name: color | type: ColorOption | description: Color option with name, hex code, and sort order. - name: name | type: string | description: Color name. For example, `"Black"` or `"Navy Blue"`. Use 'Multicolor' for mixed colors. When using 'Multicolor', do not provide a hex value. - name: hex | type: string | description: Hex color code. For example, `"#000000"` for black. Omit for 'Multicolor'. - name: ribbonName | type: string | description: Promotional ribbon text displayed on the product. For example, `"New Arrival"` or `"Bestseller"`. - name: brand | type: string | description: Brand name. - name: orderProcessingTime | type: TimeInterval | description: Time required to process orders before shipping. - name: min | type: TimeValue | description: Minimum time in the range. - name: value | type: integer | description: Numeric time value. For example, `2` for "2 days". - name: unit | type: TimeUnit | description: Time unit for the value. - enum: - DAY: Days. - WEEK: Weeks. - MONTH: Months. - name: max | type: TimeValue | description: Maximum time in the range. - name: shippingDestinations | type: array | description: Countries and regions where this product can be shipped, with location-specific pricing and timing. - ONE-OF: - name: specificCountrySelections | type: Countries | description: Specific countries. Used when `countrySelections` is `SPECIFIC_COUNTRY`. - name: countries | type: array | description: Country codes, in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1) format. - name: countrySelections | type: CountrySelections | description: Indicates if shipping applies to selected countries or to all other regions. - enum: - REST_OF_THE_WORLD: All countries not specifically listed elsewhere. - SPECIFIC_COUNTRY: Specific countries listed in the `countries` field. - name: minimumShippingCost | type: string | description: Minimum shipping cost to this destination in USD. - name: shippingTime | type: TimeInterval | description: Expected shipping time to this destination. - name: minimumProductCost | type: string | description: Minimum Product Cost to the Shipping Location - name: minimumPrice | type: string | description: Minimum price, in USD. - name: productOrigin | type: string | description: Country where the product is manufactured or originates from, in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format. - name: directCategories | type: array | description: List of categories that directly contain this product. Each category's namespace must match at least one of the product's types. For example, if a product has type `DROPSHIPPING`, its categories must use `DROPSHIPPING_NAMESPACE`. Products with both `DROPSHIPPING` and `WHOLESALE` types can have categories from both namespaces. - name: _id | type: string | description: Category GUID. - name: index | type: integer | description: Product's position within this category. - name: namespace | type: CategoryNamespace | description: The namespace of the category tree this assignment belongs to. - enum: - DROPSHIPPING_NAMESPACE: Namespace for the dropshipping category tree. - WHOLESALE_NAMESPACE: Namespace for the wholesale category tree. - PRINT_ON_DEMAND_NAMESPACE: Namespace for the print on demand category tree. - name: allCategories | type: array | description: List of categories that directly contain this product, as well as their parent categories. - name: wholesaleOptions | type: WholesaleOptions | description: Wholesale-specific configuration including tiered pricing and minimum order quantities. Required when `types` includes `WHOLESALE`. - name: priceTiers | type: array | description: Tiered pricing based on order quantity ranges. Price tiers must be continuous with no gaps in quantity ranges. For example, if tier 1 covers quantities 1-100, tier 2 must start at 101. The system validates tier continuity when creating or updating products. - name: priceFrom | type: string | description: Minimum price for this quantity tier in USD. If `priceTo` isn't specified, this price applies to all quantities in the tier. - name: priceTo | type: string | description: Maximum price for this quantity tier in USD. Optional for fixed-price tiers. - name: countFrom | type: integer | description: Minimum quantity for this price tier, inclusive. - name: countTo | type: integer | description: Maximum quantity for this price tier, inclusive. If not specified, this tier applies to all quantities greater or equal to `countFrom`. - name: minimumOrderQuantity | type: integer | description: Minimum quantity required for wholesale orders. - name: supplierInfo | type: SupplierInfo | description: Information about the supplier including name, rating, and trust status. - name: _id | type: string | description: Supplier GUID. When provided, references a supplier in the Marketplace Supplier service. The system automatically retrieves and populates the supplier's name, rating, and verification status. - name: name | type: string | description: Supplier name. Automatically populated from the Supplier service when `id` is provided. - name: rating | type: string | description: Supplier rating from 1.00 to 5.00. Automatically populated from the Supplier service when `id` is provided. - name: verified | type: boolean | description: Whether the supplier has been verified by the Marketplace. Verified suppliers have completed the Marketplace verification process. Automatically populated from the Supplier service when `id` is provided. Default: `false` - name: printOnDemandOptions | type: PrintOnDemandOptions | description: Print-on-demand-specific configuration including supported print technologies and mockup assets. Required when `types` include `PRINT_ON_DEMAND`. - name: printTechnologies | type: array | description: Set of possible print technologies for the Product - enum: - DIRECT_TO_FILM: Transfers printed on film and heat-pressed onto fabric. - DIRECT_TO_GARMENT: Ink directly onto garment. - CUT_SEW_SUBLIMATION: Panels are printed first, then sewn. All‑over coverage with precise placements. - DIGITAL_PRINTING: Non‑DTG digital methods (e.g., roll‑to‑roll). - EMBROIDERY: Stitched threads, premium look. - SUBLIMATION: Dye infused into polyester/poly‑coated substrates. - UV_PRINTING: Cures ink with UV light on rigid or treated surfaces. - KNITWEAR: Pattern/design is knitted, not printed. - DIRECT_TO_FABRIC: Designs are printed directly onto rolls of fabric, which are then cut and sewn into the final product. - name: mockupImage | type: string | description: Mockup image of the product with 'Your Image Here' text. - name: sizeGuides | type: array | description: Information about the product sizing - name: measurementUnit | type: MeasurementUnit | description: Sizes units (inches or cm) - enum: CM, INCHES - name: description | type: string | description: Text description of the size guide - name: imageUrl | type: string | description: Image for the size guide - name: imageDescription | type: string | description: Text description of the image content - name: specifications | type: array | description: Sizes specifications - name: category | type: string | description: What is measured, e.g. chest, waist, sleeve - name: measurements | type: array | description: Measurements for different sizes - ONE-OF: - name: singleValue | type: string | description: The value of the size in case of single value - name: range | type: MeasurementValueRange | description: The value of the size in case of range (min/max) - name: minimum | type: string | description: Minimum value - name: maximum | type: string | description: Maximum value - name: sizeLabel | type: string | description: Product size, e.g. S, M, L - name: tags | type: Tags | description: Product tags for organization and filtering. - name: privateTags | type: TagList | description: Tags that require an additional permission in order to access them, normally not given to site members or visitors. - name: tagIds | type: array | description: List of tag GUIDs. - name: publicTags | type: TagList | description: Tags that are exposed to anyone who has access to the labeled entity itself, including site members and visitors. - name: modifiedFields | type: Map | description: Fields that were updated and their values before the update. - ONE-OF: - name: nullValue | type: | description: - name: numberValue | type: number | description: - name: stringValue | type: string | description: - name: boolValue | type: boolean | description: - name: structValue | type: object | description: - name: listValue | type: ListValue | description: - name: values | type: array | description: - name: metadata | type: EventMetadata | description: none - name: instanceId | type: string | description: App instance GUID. - name: eventType | type: string | description: Event type. - name: identity | type: IdentificationData | description: The identification type and identity data. - ONE-OF: - name: anonymousVisitorId | type: string | description: GUID of a site visitor that has not logged in to the site. - name: memberId | type: string | description: GUID of a site visitor that has logged in to the site. - name: wixUserId | type: string | description: GUID of a Wix user (site owner, contributor, etc.). - name: appId | type: string | description: GUID of an app. - name: identityType | type: WebhookIdentityType | description: - enum: UNKNOWN, ANONYMOUS_VISITOR, MEMBER, WIX_USER, APP - name: accountInfo | type: AccountInfo | description: Details related to the account - name: accountId | type: string | description: GUID of the Wix account associated with the event. - name: parentAccountId | type: string | description: GUID of the parent Wix account. Only included when accountId belongs to a child account. - name: siteId | type: string | description: GUID of the Wix site associated with the event. Only included when the event is tied to a specific site. - name: _id | type: string | description: Event GUID. With this GUID you can easily spot duplicated events and ignore them. - name: entityFqdn | type: string | description: Fully Qualified Domain Name of an entity. This is a unique identifier assigned to the API main business entities. For example, `wix.stores.catalog.product`, `wix.bookings.session`, `wix.payments.transaction`. - name: slug | type: string | description: Event action name, placed at the top level to make it easier for users to dispatch messages. For example: `created`/`updated`/`deleted`/`started`/`completed`/`email_opened`. - name: entityId | type: string | description: GUID of the entity associated with the event. - name: eventTime | type: Date | description: Event timestamp in [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) format and UTC time. For example, `2020-04-26T13:57:50.699Z`. - name: triggeredByAnonymizeRequest | type: boolean | description: Whether the event was triggered as a result of a privacy regulation application (for example, GDPR). - name: originatedFrom | type: string | description: If present, indicates the action that triggered the event. - name: entityEventSequence | type: string | description: A sequence number that indicates the order of updates to an entity. For example, if an entity was updated at 16:00 and then again at 16:01, the second update will always have a higher sequence number. You can use this number to make sure you're handling updates in the right order. Just save the latest sequence number on your end and compare it to the one in each new message. If the new message has an older (lower) number, you can safely ignore it. ``` ### Examples ```javascript import { products } from '@wix/suppliers-hub'; products.onProductUpdated((event) => { // handle your event here }); ``` ```javascript import { createClient, AppStrategy } from '@wix/sdk'; import { products } from '@wix/suppliers-hub'; const wixClient = createClient({ auth: AppStrategy({ appId: 'MY-APP-ID', publicKey: 'YOUR_APP_PUBLIC_KEY', }), modules: { products, }, }); wixClient.products.onProductUpdated((event) => { // handle your event here }); ``` ---