---
title: "Update a product"
method: PUT
path: "/products/{product_id}"
tags: ["Products"]
---

# Update a product

`PUT /products/{product_id}`

Update an existing product.

🔒 Requires: `products:write` scope

## Path parameters

- `product_id` string, uuid, required

## Request body

- ProductUpdate21Request
  - `common` object — Information to update to the product family. For variants, this will update the fields to all variants in the family.
    - `account_code_purchase` string — The code used to attribute the purchase (cost) of the product to a specific account for the Xero integration.
    - `account_code_sale` string — The code used to attribute the sales of the product to a specific account for the Xero integration.
    - `brand_id` string — The brand ID that the product is associated to. To remove the brand from the product, please provide empty value "".
    - `description` string — Product description.
    - `name` string — Product name
    - `product_category_id` string — The product category ID tha the product is associated to. A product can only be associated to the last level (leaf) category. To remove the product category from the product, please provide empty value "". Product category was previously known as product types.
    - `product_suppliers` ProductUpdate21Supplier[] — A full list of suppliers and its details that are associated to the product family. The order of the supplier listed in this list will reflect the supplier's order in the product. The first supplier is the default supplier. If do not wish to override the code and price that may be custom per variant, just provide the id.
      - `code` string — The supplier's code or reference for the product. To remove the code, please provide empty value "".
      - `price` number — The cost of supply for the product. -1 price will delete the price.
      - `supplier_id` string — The supplier ID.
    - `tag_ids` string[] — The full list of tag ids that the product is associated to. To remove all tags, please provide empty list.
    - `track_inventory` boolean — True to enable inventory tracking for product. This will updating of inventory details such as manual adjustments and reorder details.
    - `variant_attributes` object[] — A full list of the variant attributes for the product family. The order of the variant attributes in this list will reflect the order of the attribute on the variant. Maximum three attributes.
      - `attribute_id` string — The ID of attribute represented at the specified position in the list.
  - `details` object — Information to update to the product. For variants, this will update the fields for the individual variant product of this request only.
    - `all_outlets_tax` object — Set the tax on a product for tax inclusive store.
      - `tax_id` string — The selected custom tax ID. Leave blank ("") to use the default tax.
    - `composite_components` object[] — A full list of composite components.
      - `product_id` string, uuid, required — The ID of the component product.
      - `quantity` number, required — The quantity of the component product.
    - `dimensions_unit` 'IN' | 'CM' | 'MM' | 'YD' — The unit for any height, width, or length provided.
    - `height` number — The height of the product. If provided, dimensions_unit for this value must also be provided.
    - `inventory` object[] — A list of inventory outlet information to update.
      - `current_amount` number — Current inventory quantity of the product at the given outlet.
      - `outlet_id` string, required — The outlet ID.
      - `reorder_amount` number — The default of the quantity for auto-filled inventory orders.
      - `reorder_point` number — Quantity below which the product should be included in the auto-filled inventory orders. use -1 to clear the reorder point.
    - `is_active` boolean — True to enable Sell on POS, false to disable.
    - `length` number — The length of the product. If provided, dimensions_unit for this value must also be provided.
    - `loyalty_amount` number — The custom loyalty amount. -1 to use the default loyalty amount.
    - `outlet_taxes` object[] — A list of outlet taxes to update on a product for tax exclusive store.
      - `outlet_id` string — The outlet ID to apply the tax.
      - `tax_id` string — The selected custom tax ID. Leave blank ("") to use the default tax.
    - `packaging` object[] — Packaging this product belongs to.
      - `amount` number
      - `destination_product_id` string, uuid
      - `source_product_id` string, uuid
    - `price_excluding_tax` number — Price exclusive of tax. For tax exclusive store.
    - `price_including_tax` number — Price inclusive of tax. For tax inclusive store.
    - `product_codes` object[] — A full list of product codes for the product. The first product code is used as the default product code.
      - `code` string, required — The product code value.
      - `type` 'CUSTOM' | 'EAN' | 'ISBN' | 'ITF' | 'JAN' | 'UPC'
    - `product_suppliers` ProductUpdate21Supplier[] — A list of suppliers and its details if the supplier needs updating. The supplier referenced by this subset must be a supplier associated to the product family.
      - `code` string — The supplier's code or reference for the product. To remove the code, please provide empty value "".
      - `price` number — The cost of supply for the product. -1 price will delete the price.
      - `supplier_id` string — The supplier ID.
    - `variant_attribute_values` object[] — A list of values for the variant attributes defined for the product. The attributes used here must match the product family.
      - `attribute_id` string, required — The variant attribute id. This variant attribute must be an attribute on the product family.
      - `attribute_value` string, required — The value for the variant attribute.
    - `weight` number — The weight of the product. If provided, weight_unit for this value must also be provided.
    - `weight_unit` 'CT' | 'G' | 'OZ' | 'LB' | 'KG' — The unit for the weight provided.
    - `width` number — The width of the product. If provided, dimensions_unit for this value must also be provided.

## Response `200`

The response if the API call is successful.

- object

## Other responses

- `404` — The response if the product you are attempting to update doesn't exist.
- `422` — The response if the update can't be processed.

---

[API](https://skmtc.net/lightspeedhq/apis/api-2026-07.md) · [All operations](https://skmtc.net/lightspeedhq/apis/api-2026-07/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lightspeedhq/api-2026-07/revisions/72d4ceb46dbb/schema)
