> 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 # UpdateProduct # Package: catalogV3 # Namespace: CatalogApi # Method link: https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/update-product.md ## Permission Scopes: Product write in v3 catalog: SCOPE.STORES.PRODUCT_WRITE ## Introduction Updates a product. Each time the product is updated, `revision` increments by 1. The current `revision` must be passed when updating the product. This ensures you're working with the latest product and prevents unintended overwrites. >**Notes:** > + To update array fields like `options`, `modifiers`, `variantsInfo.variants`, and any others, you must pass the entire existing array. Passing only the changed item overwrites the entire array, not just merge the single change. > + To update `variantsInfo.variants` you must also pass `options` and vice versa. This is because variants and options are mutually dependent and must be aligned. > + To update existing `variantsInfo.variants`, make sure to provide `variantsInfo.variants.id`. If no ID is passed, a variant is created with a new ID. > + Updating media per variant isn't supported. Instead, assign media items to product option choices using the `linkedMedia` field. You must use preexisting product media. --- ## REST API ### Schema ``` Method: updateProduct Description: Updates a product. Each time the product is updated, `revision` increments by 1. The current `revision` must be passed when updating the product. This ensures you're working with the latest product and prevents unintended overwrites. >**Notes:** > + To update array fields like `options`, `modifiers`, `variantsInfo.variants`, and any others, you must pass the entire existing array. Passing only the changed item overwrites the entire array, not just merge the single change. > + To update `variantsInfo.variants` you must also pass `options` and vice versa. This is because variants and options are mutually dependent and must be aligned. > + To update existing `variantsInfo.variants`, make sure to provide `variantsInfo.variants.id`. If no GUID is passed, a variant is created with a new GUID. > + Updating media per variant isn't supported. Instead, assign media items to product option choices using the `linkedMedia` field. You must use preexisting product media. URL: https://www.wixapis.com/stores/v3/products/{product.id} Method: PATCH # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: product, product.id, product.revision, product.variantsInfo.variants.price, product.variantsInfo.variants.price.actualPrice, product.variantsInfo.variants.physicalProperties.pricePerUnit.settings.measurementUnit, product.variantsInfo.variants.physicalProperties.productDimensions.unit, product.variantsInfo.variants.physicalProperties.packageDimensions.unit, product.variantsInfo.variants.digitalProperties.digitalFile, product.variantsInfo.variants.digitalProperties.digitalFile.id, product.variantsInfo.variants.choices.optionChoiceIds.optionId, product.variantsInfo.variants.choices.optionChoiceIds.choiceId, product.physicalProperties.pricePerUnit.measurementUnit, product.subscriptionDetails.subscriptions.title, product.subscriptionDetails.subscriptions.frequency, product.subscriptionDetails.subscriptions.type Method parameters: param name: fields | type: array | description: Fields to include in the response. - enum: - URL: The product's public storefront URL, including both relative path and full URL with base domain. - CURRENCY: Currency information including the currency code and formatted price amounts for storefront display. - INFO_SECTION: Returns basic info section metadata including IDs, unique names, and titles. Use with `INFO_SECTION_DESCRIPTION` or `INFO_SECTION_PLAIN_DESCRIPTION` to include content. - MERCHANT_DATA: Returns merchant-related financial data including cost ranges and variant revenue details like cost, profit, and profit margin. Requires the `SCOPE.STORES.PRODUCT_READ_ADMIN` permission scope. - PLAIN_DESCRIPTION: Provides product description as plain HTML text. - INFO_SECTION_PLAIN_DESCRIPTION: Returns info section descriptions as HTML content. Use with `INFO_SECTION` for complete metadata. - SUBSCRIPTION_PRICES_INFO: Details subscription pricing options, empty for non-subscription products. - BREADCRUMBS_INFO: Returns the category breadcrumb navigation path from root categories down to the product's main category, including category IDs, names, and slugs. - WEIGHT_MEASUREMENT_UNIT_INFO: Returns the weight measurement unit (KG, LB) for the product. - VARIANT_OPTION_CHOICE_NAMES: Enriches variant choices with human-readable option and choice names alongside render types. - MEDIA_ITEMS_INFO: Returns all media items associated with the product, including detailed metadata (URLs, alt-text, dimensions, filenames, file sizes). - DESCRIPTION: Returns the product description as rich content with complete node structure, metadata, and styling information. - DIRECT_CATEGORIES_INFO: Provides the IDs and indexes of categories the product is directly assigned to. - ALL_CATEGORIES_INFO: Provides IDs and indexes for all categories including inherited parent categories. - INFO_SECTION_DESCRIPTION: Returns info section descriptions as rich content with complete node structure, metadata, and styling information. Use with `INFO_SECTION` for complete metadata. - THUMBNAIL: Returns an optimized thumbnail image with standard dimensions, suitable for listings or previews. - PRODUCT_CHOICES_MEDIA_REFERENCES: Returns media references associated with product option and modifier choices instead of the deprecated `linked_media` field. When requested, choice objects will populate `media_references` with lightweight `MediaReference` objects containing only media IDs, while the `linked_media` field will be returned empty to avoid duplication and reduce response payload size. To get full media metadata (dimensions, alt text, filenames, etc.), request `MEDIA_ITEMS_INFO` on the product and correlate by media ID. > **Note:** The `media_references` field is available on `ConnectedOptionChoice` and `ConnectedModifierChoice` objects. - PRODUCT_CHOICES_DISPLAY_IMAGE: Returns display images for product option and modifier choices. When requested, choice objects will populate `display_image` with a lightweight image containing only ID, URL, and alt text. param name: product | type: Product | description: A product in a Wix Stores catalog. Products can be physical goods that require shipping, or digital content that customers download. Each product has at least one variant, which represents a specific purchasable version with its own pricing, SKU, and inventory. Products with options (like size or color) have multiple variants. Products can be associated with brands and ribbons, enhanced with info sections and extended fields, and organized into categories. | required: true - name: physicalProperties | type: PhysicalProperties | description: Physical properties. Required when `productType: PHYSICAL`. - name: pricePerUnit | type: PricePerUnitSettings | description: Price per unit settings. > **Note:** Use this field only when relevant. For example, for products that are sold by weight, volume, or length. - name: quantity | type: number | description: Quantity. For example, to define price per per 100 grams, set this field to `100`. - name: measurementUnit | type: MeasurementUnit | description: Measurement unit. For example, to define price per 100 grams, set this field to "G". | required: true - enum: UNSPECIFIED, ML, CL, L, CBM, MG, G, KG, MM, CM, M, SQM, OZ, LB, FLOZ, PT, QT, GAL, IN, FT, YD, SQFT - name: fulfillerId | type: string | description: Fulfiller GUID. - name: deliveryProfileId | type: string | description: Delivery profile GUID. - name: id | type: string | description: Product GUID. | required: true - name: revision | type: string | description: Revision number, which increments by 1 each time the product is updated. To prevent conflicting changes, the current revision must be passed when updating the product. Ignored when creating a product. | required: true - name: name | type: string | description: Product name. Translatable. - name: slug | type: string | description: Product slug. If not provided, the slug is autogenerated based on the product name. - name: description | type: RichContent | description: Product description using rich content. > **Note:** Returned only when you pass `"DESCRIPTION"` to the `fields` array in Products API requests. See.md Ricos document reference - name: nodes | type: array | description: Node objects representing a rich content document. - ONE-OF: - name: buttonData | type: ButtonData | description: Data for a button node. - name: containerData | type: PluginContainerData | description: Styling for the button's container. - name: width | type: Width | description: The width of the node when it's displayed. - ONE-OF: - name: size | type: Type | description: One of the following predefined width options: `CONTENT`: The width of the container matches the content width. `SMALL`: A small width. `ORIGINAL`: For `imageData` containers only. The width of the container matches the original image width. `FULL_WIDTH`: For `imageData` containers only. The image container takes up the full width of the screen. - enum: - CONTENT: Width matches the content width - SMALL: Small Width - ORIGINAL: Width will match the original asset width - FULL_WIDTH: coast-to-coast display - name: custom | type: string | description: A custom width value in pixels. - name: alignment | type: Alignment | description: The node's alignment within its container. - enum: - CENTER: Center Alignment - LEFT: Left Alignment - RIGHT: Right Alignment - name: spoiler | type: Spoiler | description: Spoiler cover settings for the node. - name: enabled | type: boolean | description: Sets whether the spoiler cover is enabled for this node. Defaults to `false`. - name: description | type: string | description: The description displayed on top of the spoiler cover. - name: buttonText | type: string | description: The text for the button used to remove the spoiler cover. - name: height | type: Height | description: The height of the node when it's displayed. - name: custom | type: string | description: A custom height value in pixels. - name: textWrap | type: boolean | description: Sets whether text should wrap around this node when it's displayed. If `textWrap` is `false`, the node takes up the width of its container. Defaults to `true` for all node types except 'DIVIVDER' where it defaults to `false`. - name: type | type: Type | description: The button type. - enum: - LINK: Regular link button - ACTION: Triggers custom action that is defined in plugin configuration by the consumer - name: styles | type: Styles | description: Styling for the button. - name: borderWidth | type: integer | description: Border width in pixels. - name: borderRadius | type: integer | description: Border radius in pixels. - name: borderColor | type: string | description: Border color as a hexadecimal value. - name: borderColorHover | type: string | description: Border color as a hexadecimal value (hover state). - name: textColor | type: string | description: Text color as a hexadecimal value. - name: textColorHover | type: string | description: Text color as a hexadecimal value (hover state). - name: buttonSize | type: string | description: Button size option, one of `SMALL`, `MEDIUM` or `LARGE`. Defaults to `MEDIUM`. - name: background | type: Background | description: Background styling (color or gradient). - name: type | type: Type | description: Background type. - enum: - COLOR: Solid color background - GRADIENT: Gradient background - name: color | type: string | description: Background color as a hexadecimal value. - name: gradient | type: Gradient | description: Gradient configuration. - name: type | type: Type | description: Gradient type. - enum: - LINEAR: Linear gradient. - RADIAL: Radial gradient. - name: stops | type: array | description: Color stops for the gradient. - name: color | type: string | description: Stop color as hex value. - name: position | type: number | description: Stop position (0-1). - name: angle | type: integer | description: Angle in degrees for linear gradient (0-360). - name: centerX | type: number | description: Horizontal center position for radial gradient (0-100). - name: centerY | type: number | description: Vertical center position for radial gradient (0-100). - name: backgroundHover | type: Background | description: Background styling for hover state (color or gradient). - name: text | type: string | description: The text to display on the button. - name: link | type: Link | description: Button link details. - ONE-OF: - name: url | type: string | description: The absolute URL for the linked document. - name: anchor | type: string | description: The target node's GUID. Used for linking to another node in this object. - name: target | type: Target | description: he HTML `target` attribute value for the link. This property defines where the linked document opens as follows: `SELF` - Default. Opens the linked document in the same frame as the link. `BLANK` - Opens the linked document in a new browser tab or window. `PARENT` - Opens the linked document in the link's parent frame. `TOP` - Opens the linked document in the full body of the link's browser tab or window. - enum: - SELF: Opens the linked document in the same frame as it was clicked (this is default) - BLANK: Opens the linked document in a new window or tab - PARENT: Opens the linked document in the parent frame - TOP: Opens the linked document in the full body of the window - name: rel | type: Rel | description: The HTML `rel` attribute value for the link. This object specifies the relationship between the current document and the linked document. - name: nofollow | type: boolean | description: Indicates to search engine crawlers not to follow the link. Defaults to `false`. - name: sponsored | type: boolean | description: Indicates to search engine crawlers that the link is a paid placement such as sponsored content or an advertisement. Defaults to `false`. - name: ugc | type: boolean | description: Indicates that this link is user-generated content and isn't necessarily trusted or endorsed by the page’s author. For example, a link in a fourm post. Defaults to `false`. - name: noreferrer | type: boolean | description: Indicates that this link protect referral information from being passed to the target website. - name: customData | type: string | description: A serialized object used for a custom or external link panel. - name: codeBlockData | type: CodeBlockData | description: Data for a code block node. - name: textStyle | type: TextStyle | description: Styling for the code block's text. - name: textAlignment | type: TextAlignment | description: Text alignment. Defaults to `AUTO`. - enum: - AUTO: browser default, eqivalent to `initial` - LEFT: Left align - RIGHT: Right align - CENTER: Center align - JUSTIFY: Text is spaced to line up its left and right edges to the left and right edges of the line box, except for the last line - name: lineHeight | type: string | description: A CSS `line-height` value for the text expressed as a ratio relative to the font size. For example, if the font size is 20px, a `lineHeight` value of `'1.5'`` results in a line height of 30px. - name: dividerData | type: DividerData | description: Data for a divider node. - name: containerData | type: PluginContainerData | description: Styling for the divider's container. - name: lineStyle | type: LineStyle | description: Divider line style. - enum: - SINGLE: Single Line - DOUBLE: Double Line - DASHED: Dashed Line - DOTTED: Dotted Line - name: width | type: Width | description: Divider width. - enum: - LARGE: Large line - MEDIUM: Medium line - SMALL: Small line - name: alignment | type: Alignment | description: Divider alignment. - enum: - CENTER: Center alignment - LEFT: Left alignment - RIGHT: Right alignment - name: fileData | type: FileData | description: Data for a file node. - name: containerData | type: PluginContainerData | description: Styling for the file's container. - name: src | type: FileSource | description: The source for the file's data. - ONE-OF: - name: url | type: string | description: The absolute URL for the file's source. - name: id | type: string | description: An GUID that's resolved to a URL by a resolver function. - name: private | type: boolean | description: Indicates whether the file's source is private. Defaults to `false`. - name: name | type: string | description: File name. - name: type | type: string | description: File type. - name: pdfSettings | type: PDFSettings | description: Settings for PDF files. - name: viewMode | type: ViewMode | description: PDF view mode. One of the following: `NONE` : The PDF isn't displayed. `FULL` : A full page view of the PDF is displayed. `MINI` : A mini view of the PDF is displayed. - enum: - NONE: No PDF view - FULL: Full PDF view - MINI: Mini PDF view - name: disableDownload | type: boolean | description: Sets whether the PDF download button is disabled. Defaults to `false`. - name: disablePrint | type: boolean | description: Sets whether the PDF print button is disabled. Defaults to `false`. - name: mimeType | type: string | description: File MIME type. - name: path | type: string | description: File path. - name: sizeInKb | type: string | description: File size in KB. - name: galleryData | type: GalleryData | description: Data for a gallery node. - name: containerData | type: PluginContainerData | description: Styling for the gallery's container. - name: items | type: array | description: The items in the gallery. - ONE-OF: - name: image | type: Image | description: An image item. - name: media | type: Media | description: Image file details. - name: src | type: FileSource | description: The source for the media's data. - name: width | type: integer | description: Media width in pixels. - name: height | type: integer | description: Media height in pixels. - name: duration | type: number | description: Media duration in seconds. Only relevant for audio and video files. - name: link | type: Link | description: Link details for images that are links. - name: video | type: Video | description: A video item. - name: media | type: Media | description: Video file details. - name: thumbnail | type: Media | description: Video thumbnail file details. - name: title | type: string | description: Item title. - name: altText | type: string | description: Item's alternative text. - name: options | type: GalleryOptions | description: Options for defining the gallery's appearance. - name: layout | type: Layout | description: Gallery layout. - name: type | type: Type | description: Gallery layout type. - enum: - COLLAGE: Collage type - MASONRY: Masonry type - GRID: Grid type - THUMBNAIL: Thumbnail type - SLIDER: Slider type - SLIDESHOW: Slideshow type - PANORAMA: Panorama type - COLUMN: Column type - MAGIC: Magic type - FULLSIZE: Fullsize images type - name: horizontalScroll | type: boolean | description: Sets whether horizontal scroll is enabled. Defaults to `true` unless the layout `type` is set to `GRID` or `COLLAGE`. - name: orientation | type: Orientation | description: Gallery orientation. - enum: - ROWS: Rows Orientation - COLUMNS: Columns Orientation - name: numberOfColumns | type: integer | description: The number of columns to display on full size screens. - name: mobileNumberOfColumns | type: integer | description: The number of columns to display on mobile screens. - name: item | type: ItemStyle | description: Styling for gallery items. - name: targetSize | type: integer | description: Desirable dimension for each item in pixels (behvaior changes according to gallery type) - name: ratio | type: number | description: Item ratio - name: crop | type: Crop | description: Sets how item images are cropped. - enum: - FILL: Crop to fill - FIT: Crop to fit - name: spacing | type: integer | description: The spacing between items in pixels. - name: thumbnails | type: Thumbnails | description: Styling for gallery thumbnail images. - name: placement | type: Alignment | description: Thumbnail alignment. - enum: - TOP: Top alignment - RIGHT: Right alignment - BOTTOM: Bottom alignment - LEFT: Left alignment - NONE: No thumbnail - name: spacing | type: integer | description: Spacing between thumbnails in pixels. - name: disableExpand | type: boolean | description: Sets whether the gallery's expand button is disabled. Defaults to `false`. - name: disableDownload | type: boolean | description: Sets whether the gallery's download button is disabled. Defaults to `false`. - name: gifData | type: GIFData | description: Data for a GIF node. - name: containerData | type: PluginContainerData | description: Styling for the GIF's container. - name: original | type: GIF | description: The source of the full size GIF. - name: gif | type: string | description: GIF format URL. - name: mp4 | type: string | description: MP4 format URL. - name: still | type: string | description: Thumbnail URL. - name: downsized | type: GIF | description: The source of the downsized GIF. - name: height | type: integer | description: Height in pixels. - name: width | type: integer | description: Width in pixels. - name: gifType | type: GIFType | description: Type of GIF (Sticker or NORMAL). Defaults to `NORMAL`. - enum: NORMAL, STICKER - name: headingData | type: HeadingData | description: Data for a heading node. - name: level | type: integer | description: Heading level from 1-6. - name: textStyle | type: TextStyle | description: Styling for the heading text. - name: indentation | type: integer | description: Indentation level from 1-4. - name: renderedLevel | type: integer | description: Rendered heading level for SEO/accessibility, overrides the HTML tag when set. - name: htmlData | type: HTMLData | description: Data for an embedded HTML node. - ONE-OF: - name: url | type: string | description: The URL for the HTML code for the node. - name: html | type: string | description: The HTML code for the node. - name: widgetId | type: string | description: The WixelWidget GUID for AI_WIDGET source nodes. - name: containerData | type: PluginContainerData | description: Styling for the HTML node's container. Height property is irrelevant for HTML embeds when autoHeight is set to `true`. - name: source | type: Source | description: The type of HTML code. - enum: HTML, ADSENSE, AI, AI_WIDGET - name: autoHeight | type: boolean | description: If container height is aligned with its content height. Defaults to `true`. - name: imageData | type: ImageData | description: Data for an image node. - name: containerData | type: PluginContainerData | description: Styling for the image's container. - name: image | type: Media | description: Image file details. - name: link | type: Link | description: Link details for images that are links. - name: disableExpand | type: boolean | description: Sets whether the image expands to full screen when clicked. Defaults to `false`. - name: altText | type: string | description: Image's alternative text. - name: disableDownload | type: boolean | description: Sets whether the image's download button is disabled. Defaults to `false`. - name: decorative | type: boolean | description: Sets whether the image is decorative and does not need an explanation. Defaults to `false`. - name: styles | type: Styles | description: Styling for the image. - name: border | type: Border | description: Border attributes. - name: width | type: integer | description: Border width in pixels. - name: color | type: string | description: Border color as a hexadecimal value. - name: radius | type: integer | description: Border radius in pixels. - name: linkPreviewData | type: LinkPreviewData | description: Data for a link preview node. - name: containerData | type: PluginContainerData | description: Styling for the link preview's container. - name: link | type: Link | description: Link details. - name: title | type: string | description: Preview title. - name: thumbnailUrl | type: string | description: Preview thumbnail URL. - name: description | type: string | description: Preview description. - name: html | type: string | description: The preview content as HTML. - name: styles | type: Styles | description: Styling for the link preview. - name: backgroundColor | type: string | description: Background color as a hexadecimal value. - name: titleColor | type: string | description: Title color as a hexadecimal value. - name: subtitleColor | type: string | description: Subtitle color as a hexadecimal value. - name: linkColor | type: string | description: Link color as a hexadecimal value. - name: borderWidth | type: integer | description: Border width in pixels. - name: borderRadius | type: integer | description: Border radius in pixels. - name: borderColor | type: string | description: Border color as a hexadecimal value. - name: thumbnailPosition | type: Position | description: Position of thumbnail. Defaults to `START`. - enum: - START: Thumbnail positioned at the start (left in LTR layouts, right in RTL layouts) - END: Thumbnail positioned at the end (right in LTR layouts, left in RTL layouts) - TOP: Thumbnail positioned at the top - HIDDEN: Thumbnail hidden and not displayed - name: paragraphData | type: ParagraphData | description: Data for a paragraph node. - name: textStyle | type: TextStyle | description: Styling for the paragraph text. - name: indentation | type: integer | description: Indentation level from 1-4. - name: level | type: integer | description: Paragraph level - name: pollData | type: PollData | description: Data for a poll node. - name: containerData | type: PluginContainerData | description: Styling for the poll's container. - name: poll | type: Poll | description: Poll data. - name: id | type: string | description: Poll GUID. - name: title | type: string | description: Poll title. - name: creatorId | type: string | description: Poll creator GUID. - name: image | type: Media | description: Main poll image. - name: options | type: array