# Products update

> Triggered when a product is updated. Reference for the Shoplazza products/update webhook: request headers and payload fields.

**Webhook** products/update

Triggered when a product is updated.

Requires the `product` [access scope](/docs/app/building-blocks/authentication/access-scopes). Minimum supported version: `202007`.

## Request headers

- `X-Shoplazza-Topic` string

  The event that triggered this delivery, e.g. orders/create

  **Example:** `orders/create`
- `X-Shoplazza-Hmac-Sha256` string

  Base64-encoded HMAC-SHA256 signature of the request body, generated with your app's Client Secret. Use it to verify the request comes from Shoplazza
- `X-Shoplazza-Shop-Domain` string

  The domain of the store that generated the event

  **Example:** `example.myshoplaza.com`
- `X-Shoplazza-Api-Version` string

  The API version used to serialize the payload

  **Example:** `2025-06`
- `X-Shoplazza-Deduplication-ID` string

  Deduplication ID for this delivery. It stays the same across retries of the same event—use it for idempotency

## Request body

**Schema | Example**

- `product` object

  - `brief` string

    Short product summary
  - `created_at` string

    Time when the product was created
  - `description` string

    Product description
  - `handle` string

    Product handle (URL-friendly alias)
  - `has_only_default_variant` boolean

    Whether the product has only the default variant (i.e. no multiple variants)
  - `id` string

    Product ID
  - `image` object

    The product's main image

    - `alt` string

      Image alt text
    - `height` integer

      Image height (in pixels)
    - `path` string

      Image storage path
    - `src` string

      Image URL
    - `watermark_src` string

      Watermarked image URL
    - `watermark_template_id` string

      Watermark template ID
    - `width` integer

      Image width (in pixels)
  - `images` object[]

    List of product images

    *   Array [

    - `alt` string

      Image alt text
    - `height` integer

      Image height (in pixels)
    - `id` string

      Image ID
    - `path` string

      Image storage path
    - `src` string

      Image URL
    - `width` integer

      Image width (in pixels)
    *   ]
  - `inventory_policy` string

    Inventory policy. One of `continue` (keep selling when out of stock), `deny` (stop selling when out of stock), or `auto_unpublished` (auto-unpublish when out of stock); required when `inventory_tracking` is `true`
  - `inventory_quantity` integer

    Inventory quantity
  - `inventory_tracking` boolean

    Whether inventory tracking is enabled
  - `meta_description` string

    SEO description
  - `meta_keyword` string

    SEO keyword list, values separated by commas, e.g. `key1,key2`
  - `meta_title` string

    SEO title
  - `need_variant_image` boolean

    Whether an image must be set for each variant; required when `has_only_default_variant` is `false`
  - `note` string

    Custom note, e.g. "This is a customizable product"
  - `options` object[]

    List of product option attributes (such as color or size)

    *   Array [

    - `id` string

      Option attribute ID
    - `name` string

      Option attribute name, e.g. "color", "size"
    - `position` integer

      Sort position of the option attribute
    - `product_id` string

      ID of the product this option belongs to
    - `values` string[]

      List of available values for the option attribute, e.g. ["red", "black"], ["small", "large"]
    *   ]
  - `published` boolean

    Whether the product is published (listed)
  - `published_at` string

    Time when the product was listed
  - `requires_shipping` boolean

    Whether the product requires shipping
  - `spu` string

    Product SPU (Standard Product Unit)
  - `tags` string

    Product tag list
  - `taxable` boolean

    Whether the product is taxable
  - `title` string

    Product name
  - `updated_at` string

    Time when the product was last updated
  - `variants` object[]

    List of product variants

    *   Array [

    - `barcode` string

      Barcode
    - `compare_at_price` string

      Compare-at price
    - `cost_price` string

      Cost price
    - `created_at` string

      Time when the variant was created
    - `id` string

      Variant ID
    - `image` object

      Variant image

      - `alt` string

        Image alt text
      - `height` integer

        Image height (in pixels)
      - `path` string

        Image storage path
      - `src` string

        Image URL
      - `watermark_src` string

        Watermarked image URL
      - `watermark_template_id` string

        Watermark template ID
      - `width` integer

        Image width (in pixels)
    - `inventory_quantity` integer

      Inventory quantity
    - `note` string

      Variant note
    - `option1` string

      The variant's value for the 1st product option
    - `option2` string

      The variant's value for the 2nd product option
    - `option3` string

      The variant's value for the 3rd product option
    - `position` integer

      Sort position of the variant within the product
    - `price` string

      Variant selling price
    - `product_id` string

      ID of the product this variant belongs to
    - `sku` string

      SKU
    - `title` string

      Variant title
    - `updated_at` string

      Time when the variant was last updated
    - `weight` string

      Weight
    - `weight_unit` string

      Weight unit. One of `kg`, `g`, `lb`, `oz`
    *   ]
  - `vendor` string

    Vendor name
  - `vendor_url` string

    Vendor URL

```json
{
  "product": {
    "brief": "string",
    "created_at": "string",
    "description": "string",
    "handle": "string",
    "has_only_default_variant": true,
    "id": "string",
    "image": {
      "alt": "string",
      "height": 0,
      "path": "string",
      "src": "string",
      "watermark_src": "string",
      "watermark_template_id": "string",
      "width": 0
    },
    "images": [
      {
        "alt": "string",
        "height": 0,
        "id": "string",
        "path": "string",
        "src": "string",
        "width": 0
      }
    ],
    "inventory_policy": "string",
    "inventory_quantity": 0,
    "inventory_tracking": true,
    "meta_description": "string",
    "meta_keyword": "string",
    "meta_title": "string",
    "need_variant_image": true,
    "note": "string",
    "options": [
      {
        "id": "string",
        "name": "string",
        "position": 0,
        "product_id": "string",
        "values": [
          "string"
        ]
      }
    ],
    "published": true,
    "published_at": "string",
    "requires_shipping": true,
    "spu": "string",
    "tags": "string",
    "taxable": true,
    "title": "string",
    "updated_at": "string",
    "variants": [
      {
        "barcode": "string",
        "compare_at_price": "string",
        "cost_price": "string",
        "created_at": "string",
        "id": "string",
        "image": {
          "alt": "string",
          "height": 0,
          "path": "string",
          "src": "string",
          "watermark_src": "string",
          "watermark_template_id": "string",
          "width": 0
        },
        "inventory_quantity": 0,
        "note": "string",
        "option1": "string",
        "option2": "string",
        "option3": "string",
        "position": 0,
        "price": "string",
        "product_id": "string",
        "sku": "string",
        "title": "string",
        "updated_at": "string",
        "weight": "string",
        "weight_unit": "string"
      }
    ],
    "vendor": "string",
    "vendor_url": "string"
  }
}
```
