---
title: Product
description: Subscribe to field-level changes on the Product GraphQL Admin API object.
api_version: unstable
source_url:
  html: 'https://shopify.dev/docs/api/events/latest/product'
  md: 'https://shopify.dev/docs/api/events/latest/product.md'
---

# Product

**Requires \`read\_products\` access scope.:**

Subscribe to field-level changes on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) GraphQL Admin API object. You can subscribe to created, deleted, and updated resources, as well as changes to specific fields.

Each topic corresponds to a commerce resource (for example, a product) that can exist independently within its domain. Child entities that depend on a parent within the same domain don't have their own topic. Instead, changes to child entities trigger a delivery on the parent topic. Calculated fields, derived fields, auto-updated timestamps, and cross-domain fields aren't available as triggers.

A subscription can combine multiple triggers. Your custom query can include any data available in the GraphQL Admin API, including fields unrelated to the subscribed topic, so each delivery contains exactly what your app needs.

## shopify.app.toml

```toml
[events]
api_version = "unstable"


[[events.subscription]]
handle = "my_product_events"


topic = "Product"
actions = ["update"]
triggers = [
    "product.variants.price",
    "product.variants.compareAtPrice"
]


uri = "https://your-app.com/events"


query = """
query product_details($productId: ID!, $variantsId: ID!) {
  product(id: $productId) {
    id
    title
    status
  }
  productVariant(id: $variantsId) {
    id
    price
    compareAtPrice
  }
  shop {
    id
  }
}
"""


# Optional
query_filter = "product.status:'ACTIVE'"
```

***

## Supported triggers

Field-level triggers for `Product` subscriptions.

All triggers require the `read_products` access scope, and those triggers that require additional scopes are documented where relevant. Deprecated triggers are listed last.

Subscriptions can be made up of multiple triggers. When a merchant action impacts multiple triggers, the deliveries share the same `shopify-event-id` header. Each individually updated field has a unique composite key in the `shopify-webhook-id` header. Use this value to differentiate duplicate deliveries.

Custom queries aren't limited to [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product). They can query the full GraphQL Admin API.

### product

Fires when events involve the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object, which lets you manage products in a merchant’s store.

The `"create"` and `"delete"` actions are only relevant within the context of this parent topic. Use `fields_changed` to follow or replicate impacted data after a delete event. Define a custom query to retrieve specific fields from create events.

Collect details about changes to the object by subscribing to the trigger along with the `"update"` action, though it's recommended that you narrow your subscription to one of the other triggers below.

**Variables:** `productId`

### product​.bundleComponents

Fires when the [`bundleComponents`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.bundleComponents) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `bundleComponents` field contains a list of components that are associated with a product in a bundle.

**Variables:** `productId`

### product​.bundleComponents​.quantity

Fires when the [`quantity`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductBundleComponent#field-ProductBundleComponent.fields.quantity) field on the [`ProductBundleComponent`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductBundleComponent) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `quantity` field represents the quantity of the component product set for this bundle line.

**Variables:** `productId`

### product​.bundleComponents​.quantityOption

Fires when the [`quantityOption`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductBundleComponent#field-ProductBundleComponent.fields.quantityOption) field on the [`ProductBundleComponent`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductBundleComponent) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `quantityOption` field represents the quantity as option of the component product.

**Variables:** `productId`

### product​.category

Fires when the [`category`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.category) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `category` field represents the category of a product from Shopify's Standard Product Taxonomy.

**Variables:** `productId`

### product​.combinedListing

Fires when the [`combinedListing`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.combinedListing) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `combinedListing` field represents a special product type that combines separate products from a store into a single product listing.

**Variables:** `productId`

### product​.combinedListing​.combinedListingChildren​.parentVariant

Fires when the [`parentVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/CombinedListingChild#field-CombinedListingChild.fields.parentVariant) field on the [`CombinedListingChild`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/CombinedListingChild) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `parentVariant` field represents the parent variant.

**Variables:** `parentVariantId`, `productId`

### product​.combinedListing​.combinedListingChildren​.product

Fires when the [`product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/CombinedListingChild#field-CombinedListingChild.fields.product) field on the [`CombinedListingChild`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/CombinedListingChild) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `product` field represents the child product.

**Variables:** `combinedListingChildrenProductId`, `productId`

### product​.combinedListingRole

Fires when the [`combinedListingRole`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.combinedListingRole) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `combinedListingRole` field represents the role of the product in a combined listing.

**Variables:** `productId`

### product​.descriptionHtml

Fires when the [`descriptionHtml`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.descriptionHtml) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `descriptionHtml` field represents the description of the product, with HTML tags.

**Variables:** `productId`

### product​.giftCardTemplateSuffix

Fires when the [`giftCardTemplateSuffix`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.giftCardTemplateSuffix) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `giftCardTemplateSuffix` field represents the theme template that's used when customers view the gift card in a store.

**Variables:** `productId`

### product​.handle

Fires when the [`handle`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.handle) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `handle` field represents a unique, human-readable string of the product's title.

**Variables:** `productId`

### product​.media

Fires when the [`media`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.media) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `media` field represents the media associated with the product.

**Variables:** `mediaId`, `productId`

### product​.options

Fires when the [`options`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.options) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `options` field contains a list of product options.

**Variables:** `optionsId`, `productId`

### product​.options​.linkedMetafield​.key

Fires when the [`key`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/LinkedMetafield#field-LinkedMetafield.fields.key) field on the [`LinkedMetafield`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/LinkedMetafield) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

Key of the metafield the option is linked to.

**Variables:** `optionsId`, `productId`

### product​.options​.linkedMetafield​.namespace

Fires when the [`namespace`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/LinkedMetafield#field-LinkedMetafield.fields.namespace) field on the [`LinkedMetafield`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/LinkedMetafield) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

Namespace of the metafield the option is linked to.

**Variables:** `optionsId`, `productId`

### product​.options​.name

Fires when the [`name`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOption#field-ProductOption.fields.name) field on the [`ProductOption`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOption) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `name` field represents the product option’s name.

**Variables:** `optionsId`, `productId`

### product​.options​.optionValues

Fires when the [`optionValues`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOption#field-ProductOption.fields.optionValues) field on the [`ProductOption`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOption) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

Similar to values, option\_values returns all the corresponding option value objects to the product option, including values not assigned to any variants.

**Variables:** `optionValuesId`, `optionsId`, `productId`

### product​.options​.optionValues​.linkedMetafieldValue

Fires when the [`linkedMetafieldValue`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValue#field-ProductOptionValue.fields.linkedMetafieldValue) field on the [`ProductOptionValue`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValue) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `linkedMetafieldValue` field represents the value of the linked metafield.

**Variables:** `optionValuesId`, `optionsId`, `productId`

### product​.options​.optionValues​.name

Fires when the [`name`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValue#field-ProductOptionValue.fields.name) field on the [`ProductOptionValue`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValue) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `name` field represents the name of the product option value.

**Variables:** `optionValuesId`, `optionsId`, `productId`

### product​.options​.optionValues​.swatch​.color

Fires when the [`color`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValueSwatch#field-ProductOptionValueSwatch.fields.color) field on the [`ProductOptionValueSwatch`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValueSwatch) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `color` field represents the color representation of the swatch.

**Variables:** `optionValuesId`, `optionsId`, `productId`

### product​.options​.optionValues​.swatch​.image

Fires when the [`image`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValueSwatch#field-ProductOptionValueSwatch.fields.image) field on the [`ProductOptionValueSwatch`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOptionValueSwatch) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `image` field represents an image representation of the swatch.

**Variables:** `optionValuesId`, `optionsId`, `productId`

### product​.options​.position

Fires when the [`position`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOption#field-ProductOption.fields.position) field on the [`ProductOption`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductOption) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `position` field represents the product option's position.

**Variables:** `optionsId`, `productId`

### product​.productType

Fires when the [`productType`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.productType) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `productType` field represents the product type that merchants define.

**Variables:** `productId`

### product​.requiresSellingPlan

Fires when the [`requiresSellingPlan`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.requiresSellingPlan) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `requiresSellingPlan` field indicates whether the product can only be purchased with a selling plan.

**Variables:** `productId`

### product​.status

Fires when the [`status`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.status) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `status` field represents the product status, which controls visibility across all sales channels.

**Variables:** `productId`

### product​.tags

Fires when the [`tags`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.tags) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `tags` field represents a comma-separated list of searchable keywords that are associated with the product.

**Variables:** `productId`

### product​.templateSuffix

Fires when the [`templateSuffix`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.templateSuffix) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `templateSuffix` field represents the theme template that's used when customers view the product in a store.

**Variables:** `productId`

### product​.title

Fires when the [`title`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.title) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `title` field represents the name for the product that displays to customers.

**Variables:** `productId`

### product​.variants

Fires when the [`variants`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.variants) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `variants` field contains a list of variants associated with the product.

**Variables:** `productId`, `variantsId`

### product​.variants​.barcode

Fires when the [`barcode`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.barcode) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `barcode` field represents the value of the barcode associated with the product.

**Variables:** `productId`, `variantsId`

### product​.variants​.compareAtPrice

Fires when the [`compareAtPrice`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.compareAtPrice) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `compareAtPrice` field represents the compare-at price of the variant in the default shop currency.

**Variables:** `productId`, `variantsId`

### product​.variants​.inventoryPolicy

Fires when the [`inventoryPolicy`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.inventoryPolicy) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `inventoryPolicy` field indicates whether customers are allowed to place an order for the product variant when it's out of stock.

**Variables:** `productId`, `variantsId`

### product​.variants​.media

Fires when the [`media`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.media) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `media` field represents the media associated with the product variant.

**Variables:** `mediaId`, `productId`, `variantsId`

### product​.variants​.position

Fires when the [`position`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.position) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `position` field represents the order of the product variant in the list of product variants.

**Variables:** `productId`, `variantsId`

### product​.variants​.price

Fires when the [`price`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.price) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `price` field represents the price of the product variant in the default shop currency.

**Variables:** `productId`, `variantsId`

### product​.variants​.productVariantComponents

Fires when the [`productVariantComponents`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.productVariantComponents) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `productVariantComponents` field contains a list of the product variant components.

**Variables:** `productId`, `variantsId`

### product​.variants​.productVariantComponents​.quantity

Fires when the [`quantity`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariantComponent#field-ProductVariantComponent.fields.quantity) field on the [`ProductVariantComponent`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariantComponent) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `quantity` field represents the required quantity of the component.

**Variables:** `productId`, `variantsId`

### product​.variants​.requiresComponents

Fires when the [`requiresComponents`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.requiresComponents) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `requiresComponents` field indicates whether a product variant requires components.

**Variables:** `productId`, `variantsId`

### product​.variants​.showUnitPrice

Fires when the [`showUnitPrice`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.showUnitPrice) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `showUnitPrice` field indicates whether to show the unit price for this product variant.

**Variables:** `productId`, `variantsId`

### product​.variants​.taxable

Fires when the [`taxable`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant#field-ProductVariant.fields.taxable) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `taxable` field indicates whether a tax is charged when the product variant is sold.

**Variables:** `productId`, `variantsId`

### product​.vendor

Fires when the [`vendor`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.vendor) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `vendor` field represents the name of the product's vendor.

**Variables:** `productId`

### product​.bodyHtml

**Deprecated:**

Fires when the [`bodyHtml`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.bodyHtml) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `bodyHtml` field represents the description of the product, with HTML tags.

**Variables:** `productId`

### product​.customProductType

**Deprecated:**

Fires when the [`customProductType`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.customProductType) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `customProductType` field represents the custom product type specified by the merchant.

**Variables:** `productId`

### product​.images

**Deprecated:**

Fires when the [`images`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.images) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `images` field represents the images associated with the product.

**Variables:** `imagesId`, `productId`

### product​.productCategory

**Deprecated:**

Fires when the [`productCategory`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.productCategory) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `productCategory` field represents the product category specified by the merchant.

**Variables:** `productId`

### product​.standardizedProductType

**Deprecated:**

Fires when the [`standardizedProductType`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product#field-Product.fields.standardizedProductType) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) object changes.

Subscribe to this trigger with the `"update"` action and include the field in a custom `query` to retrieve updated data from the payload. You can trace the field in subsequent requests using `fields_changed`.

The `standardizedProductType` field represents the standardized product type in the Shopify product taxonomy.

**Variables:** `productId`

### Examples

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_tuhjam"

  topic = "Product"
  actions = ["create"]
  triggers = ["product"]

  uri = "https://your-app.com/events"

  query = """
  query product_details($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "create",
    "handle": "product_evt_tuhjam",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123']"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: create
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_tuhjam
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1ni60o8"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.bundleComponents"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      bundleComponents(first: 10) {
        nodes {
          __typename
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1ni60o8",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "bundleComponents": {
          "nodes": [
            {
              "__typename": "ProductBundleComponent"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].bundleComponents"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1ni60o8
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1j3wdct"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.bundleComponents.quantity"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      bundleComponents(first: 10) {
        nodes {
          quantity
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1j3wdct",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "bundleComponents": {
          "nodes": [
            {
              "quantity": "…"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].bundleComponents.quantity"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1j3wdct
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_k79rge"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.bundleComponents.quantityOption"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      bundleComponents(first: 10) {
        nodes {
          quantityOption {
            __typename
          }
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_k79rge",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "bundleComponents": {
          "nodes": [
            {
              "quantityOption": {
                "__typename": "ProductBundleComponentQuantityOption"
              }
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].bundleComponents.quantityOption"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_k79rge
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_oglq6o"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.category"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      category {
        id
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_oglq6o",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "category": {
          "id": "gid://shopify/TaxonomyCategory/111"
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].category"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_oglq6o
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_qhlefb"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.combinedListing"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      combinedListing {
        __typename
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_qhlefb",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "__typename": "CombinedListing"
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].combinedListing"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_qhlefb
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_13t8wm0"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.combinedListing.combinedListingChildren.parentVariant"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      combinedListing {
        combinedListingChildren(first: 10) {
          nodes {
            parentVariant {
              id
            }
          }
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_13t8wm0",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "combinedListingChildren": {
            "nodes": [
              {
                "parentVariant": {
                  "id": "gid://shopify/ProductVariant/111"
                }
              }
            ]
          }
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].combinedListing.combinedListingChildren.parentVariant"
    ],
    "query_variables": {
      "parentVariantId": "gid://shopify/Resource/982",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_13t8wm0
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_100z448"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.combinedListing.combinedListingChildren.product"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      combinedListing {
        combinedListingChildren(first: 10) {
          nodes {
            product {
              id
            }
          }
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_100z448",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "combinedListingChildren": {
            "nodes": [
              {
                "product": {
                  "id": "gid://shopify/Product/111"
                }
              }
            ]
          }
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].combinedListing.combinedListingChildren.product"
    ],
    "query_variables": {
      "combinedListingChildrenProductId": "gid://shopify/Resource/112",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_100z448
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1ltubqr"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.combinedListingRole"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      combinedListingRole
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1ltubqr",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListingRole": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].combinedListingRole"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1ltubqr
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_e8z4mz"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.descriptionHtml"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      descriptionHtml
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_e8z4mz",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "descriptionHtml": "<p>Example</p>"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].descriptionHtml"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_e8z4mz
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_17koy7"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.giftCardTemplateSuffix"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      giftCardTemplateSuffix
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_17koy7",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "giftCardTemplateSuffix": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].giftCardTemplateSuffix"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_17koy7
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_la6vyi"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.handle"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      handle
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_la6vyi",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "handle": "example-product"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].handle"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_la6vyi
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1tfaq1w"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.media"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      media(first: 10) {
        nodes {
          id
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1tfaq1w",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "media": {
          "nodes": [
            {
              "id": "gid://shopify/Media/111"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].media"
    ],
    "query_variables": {
      "mediaId": "gid://shopify/MediaImage/222",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1tfaq1w
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1fgxzdc"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        id
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1fgxzdc",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "id": "gid://shopify/ProductOption/111"
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1fgxzdc
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_2dq9ix"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.linkedMetafield.key"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        linkedMetafield {
          key
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_2dq9ix",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "linkedMetafield": {
              "key": "…"
            }
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.linkedMetafield.key"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_2dq9ix
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1p2u3zh"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.linkedMetafield.namespace"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        linkedMetafield {
          namespace
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1p2u3zh",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "linkedMetafield": {
              "namespace": "…"
            }
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.linkedMetafield.namespace"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1p2u3zh
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_h7fqhl"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.name"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        name
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_h7fqhl",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "name": "…"
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.name"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_h7fqhl
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1snqdyd"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.optionValues"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        optionValues {
          id
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1snqdyd",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "id": "gid://shopify/ProductOptionValue/111"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.optionValues"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "optionValuesId": "gid://shopify/ProductOptionValue/555",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1snqdyd
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1fhtb6m"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.optionValues.linkedMetafieldValue"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        optionValues {
          linkedMetafieldValue
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1fhtb6m",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "linkedMetafieldValue": "…"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.optionValues.linkedMetafieldValue"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "optionValuesId": "gid://shopify/ProductOptionValue/555",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1fhtb6m
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_16njoy4"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.optionValues.name"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        optionValues {
          name
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_16njoy4",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "name": "…"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.optionValues.name"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "optionValuesId": "gid://shopify/ProductOptionValue/555",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_16njoy4
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_6dvyf6"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.optionValues.swatch.color"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        optionValues {
          swatch {
            color
          }
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_6dvyf6",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "swatch": {
                  "color": "…"
                }
              }
            ]
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.optionValues.swatch.color"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "optionValuesId": "gid://shopify/ProductOptionValue/555",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_6dvyf6
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_67aae0"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.optionValues.swatch.image"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        optionValues {
          swatch {
            image {
              id
            }
          }
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_67aae0",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "swatch": {
                  "image": {
                    "id": "gid://shopify/MediaImage/111"
                  }
                }
              }
            ]
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.optionValues.swatch.image"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "optionValuesId": "gid://shopify/ProductOptionValue/555",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_67aae0
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_awjkvb"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.options.position"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      options(first: 10) {
        position
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_awjkvb",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "position": "…"
          }
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].options.position"
    ],
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/444",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_awjkvb
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_116iv5f"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.productType"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      productType
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_116iv5f",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "productType": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].productType"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_116iv5f
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_et3hwb"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.requiresSellingPlan"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      requiresSellingPlan
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_et3hwb",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "requiresSellingPlan": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].requiresSellingPlan"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_et3hwb
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_tfwkok"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.status"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_tfwkok",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].status"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_tfwkok
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_lcsqxt"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.tags"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      tags
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_lcsqxt",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "tags": [
          "…"
        ]
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].tags"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_lcsqxt
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1372wuf"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.templateSuffix"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      templateSuffix
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1372wuf",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "templateSuffix": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].templateSuffix"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1372wuf
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1tghu80"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.title"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1tghu80",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].title"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1tghu80
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_11nefl0"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      id
      title
      sku
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_11nefl0",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "id": "gid://shopify/ProductVariant/789",
        "title": "Example variant",
        "sku": "SKU-001"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_11nefl0
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_10696wm"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.barcode"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      barcode
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_10696wm",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "barcode": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.barcode"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_10696wm
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_157aut1"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.compareAtPrice"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      compareAtPrice
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_157aut1",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "compareAtPrice": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.compareAtPrice"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_157aut1
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_ni56io"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.inventoryPolicy"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      inventoryPolicy
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_ni56io",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "inventoryPolicy": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.inventoryPolicy"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_ni56io
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_6w6vvy"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.media"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      media(first: 10) {
        nodes {
          id
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_6w6vvy",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "media": {
          "nodes": [
            {
              "id": "gid://shopify/Media/111"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.media"
    ],
    "query_variables": {
      "mediaId": "gid://shopify/MediaImage/222",
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_6w6vvy
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_186l4nn"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.position"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      position
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_186l4nn",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "position": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.position"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_186l4nn
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_7aqcg7"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.price"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      price
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_7aqcg7",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "price": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.price"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_7aqcg7
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_qa70cq"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.productVariantComponents"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      productVariantComponents(first: 10) {
        nodes {
          id
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_qa70cq",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "productVariantComponents": {
          "nodes": [
            {
              "id": "gid://shopify/ProductVariantComponent/111"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.productVariantComponents"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_qa70cq
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1xupku7"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.productVariantComponents.quantity"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      productVariantComponents(first: 10) {
        nodes {
          quantity
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1xupku7",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "productVariantComponents": {
          "nodes": [
            {
              "quantity": "…"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.productVariantComponents.quantity"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1xupku7
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1s5eojs"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.requiresComponents"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      requiresComponents
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1s5eojs",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "requiresComponents": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.requiresComponents"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1s5eojs
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_ccoqle"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.showUnitPrice"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      showUnitPrice
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_ccoqle",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "showUnitPrice": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.showUnitPrice"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_ccoqle
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_ju6zfx"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.taxable"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      taxable
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_ju6zfx",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "taxable": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].variants.taxable"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123",
      "variantsId": "gid://shopify/ProductVariant/789"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_ju6zfx
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_ws4bfo"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.vendor"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      vendor
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_ws4bfo",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "vendor": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].vendor"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_ws4bfo
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_5b0cb1"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.bodyHtml"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      bodyHtml
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_5b0cb1",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "bodyHtml": "<p>Example</p>"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].bodyHtml"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_5b0cb1
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_1u6ur40"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.customProductType"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      customProductType
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_1u6ur40",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "customProductType": "…"
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].customProductType"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_1u6ur40
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_pi5ar8"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.images"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      images(first: 10) {
        nodes {
          id
        }
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_pi5ar8",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "images": {
          "nodes": [
            {
              "id": "gid://shopify/Image/111"
            }
          ]
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].images"
    ],
    "query_variables": {
      "imagesId": "gid://shopify/Image/333",
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_pi5ar8
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_xcsigr"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.productCategory"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      productCategory {
        __typename
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_xcsigr",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "productCategory": {
          "__typename": "ProductCategory"
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].productCategory"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_xcsigr
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "unstable"

  [[events.subscription]]
  handle = "product_evt_8q9eey"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.standardizedProductType"]

  uri = "https://your-app.com/events"

  query = """
  query product_event_payload($productId: ID!) {
    product(id: $productId) {
      id
      title
      status
      standardizedProductType {
        __typename
      }
    }
  }
  """

  # Optional
  query_filter = "product.status:'ACTIVE'"
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product_evt_8q9eey",
    "data": {
      "product": {
        "id": "gid://shopify/Product/123",
        "title": "Example product",
        "status": "ACTIVE",
        "standardizedProductType": {
          "__typename": "StandardizedProductType"
        }
      }
    },
    "fields_changed": [
      "product[id: 'gid://shopify/Product/123'].standardizedProductType"
    ],
    "query_variables": {
      "productId": "gid://shopify/Product/123"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: unstable
  shopify-event-id: 44444444-4444-4444-4444-444444444444
  shopify-handle: product_evt_8q9eey
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  shopify-resource-id: gid://shopify/Product/123
  shopify-shop-domain: your-shop.myshopify.com
  shopify-topic: Product
  shopify-triggered-at: 2026-03-23T16:24:35.267Z
  shopify-webhook-id: 7613956a-18a5-332d-b71e-e164bbcacdba
  ```

***
