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

# Product

**Requires `read_products` access scope.:**

Supported [actions](https://shopify.dev/docs/apps/build/events/subscribe#actions): `create`, `update`, `delete`

Subscribe to field-level changes on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product) GraphQL Admin API object.

Each [topic](https://shopify.dev/docs/api/events/latest#configuration) corresponds to a commerce resource 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.

## shopify.app.toml

```toml
[events]
api_version = "2026-10"


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


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
      }
    }
  }
}
"""
```

***

## Supported triggers

Field-level [triggers](https://shopify.dev/docs/api/events/latest#configuration) for `Product` subscriptions.

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

Subscriptions can include multiple triggers. Use the `shopify-webhook-id` header for deduplication when handling duplicate deliveries.

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

### product​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product)

Fires when events involve the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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.

`product.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

**Variables:** `productId`

### product​.bundleComponents​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.bundleComponents)

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

`product.bundleComponents.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.bundleComponents`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductBundleComponent#field-ProductBundleComponent.fields.quantity)

Fires when the [`quantity`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductBundleComponent#field-ProductBundleComponent.fields.quantity) field on the [`ProductBundleComponent`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductBundleComponent#field-ProductBundleComponent.fields.quantityOption)

Fires when the [`quantityOption`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductBundleComponent#field-ProductBundleComponent.fields.quantityOption) field on the [`ProductBundleComponent`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.category)

Fires when the [`category`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.category) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.combinedListing)

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

`product.combinedListing.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.combinedListing`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListing#field-CombinedListing.fields.combinedListingChildren)

Fires when the [`combinedListingChildren`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListing#field-CombinedListing.fields.combinedListingChildren) field on the [`CombinedListing`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListing) object changes.

`product.combinedListing.combinedListingChildren.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.combinedListing.combinedListingChildren`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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 `combinedListingChildren` field contains a list of child products in the combined listing.

**Variables:** `productId`

### product​.combinedListing​.combinedListingChildren​.parentVariant[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListingChild#field-CombinedListingChild.fields.parentVariant)

Fires when the [`parentVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListingChild#field-CombinedListingChild.fields.parentVariant) field on the [`CombinedListingChild`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListingChild#field-CombinedListingChild.fields.product)

Fires when the [`product`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CombinedListingChild#field-CombinedListingChild.fields.product) field on the [`CombinedListingChild`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.combinedListingRole)

Fires when the [`combinedListingRole`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.combinedListingRole) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.descriptionHtml)

Fires when the [`descriptionHtml`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.descriptionHtml) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.giftCardTemplateSuffix)

Fires when the [`giftCardTemplateSuffix`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.giftCardTemplateSuffix) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.handle)

Fires when the [`handle`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.handle) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.media)

Fires when the [`media`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.media) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.metafield(namespace: String!, key: String!)​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.metafield)

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

`product.metafield(namespace: String!, key: String!).*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.metafield(namespace: String!, key: String!)`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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 `metafield` field represents a custom field, including its `namespace` and `key`, that's associated with a Shopify resource for the purposes of adding and storing additional information.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`

### product​.metafield(namespace: String!)​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.metafield)

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

`product.metafield(namespace: String!).*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.metafield(namespace: String!)`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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`.

This subscription omits the optional argument `metafield.key`.

The `metafield` field represents a custom field, including its `namespace` and `key`, that's associated with a Shopify resource for the purposes of adding and storing additional information.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`

### product​.metafield(namespace: String!, key: String!)​.value[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value)

Fires when the [`value`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value) field on the [`Metafield`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield) 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 `value` field represents the data stored in the metafield.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`

### product​.metafield(namespace: String!)​.value[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value)

Fires when the [`value`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value) field on the [`Metafield`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield) 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`.

This subscription omits the optional argument `metafield.key`.

The `value` field represents the data stored in the metafield.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`

### product​.options​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.options)

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

`product.options.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.options`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOption#field-ProductOption.fields.linkedMetafield)

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

`product.options.linkedMetafield.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.options.linkedMetafield`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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 `linkedMetafield` field represents the metafield identifier linked to this option.

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

### product​.options​.linkedMetafield​.key[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/LinkedMetafield#field-LinkedMetafield.fields.key)

Fires when the [`key`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/LinkedMetafield#field-LinkedMetafield.fields.key) field on the [`LinkedMetafield`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/LinkedMetafield#field-LinkedMetafield.fields.namespace)

Fires when the [`namespace`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/LinkedMetafield#field-LinkedMetafield.fields.namespace) field on the [`LinkedMetafield`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOption#field-ProductOption.fields.name)

Fires when the [`name`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOption#field-ProductOption.fields.name) field on the [`ProductOption`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOption#field-ProductOption.fields.optionValues)

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

`product.options.optionValues.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.options.optionValues`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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:** `optionsId`, `optionValuesId`, `productId`

### product​.options​.optionValues​.linkedMetafieldValue[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValue#field-ProductOptionValue.fields.linkedMetafieldValue)

Fires when the [`linkedMetafieldValue`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValue#field-ProductOptionValue.fields.linkedMetafieldValue) field on the [`ProductOptionValue`](https://shopify.dev/docs/api/admin-graphql/2026-10/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:** `optionsId`, `optionValuesId`, `productId`

### product​.options​.optionValues​.name[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValue#field-ProductOptionValue.fields.name)

Fires when the [`name`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValue#field-ProductOptionValue.fields.name) field on the [`ProductOptionValue`](https://shopify.dev/docs/api/admin-graphql/2026-10/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:** `optionsId`, `optionValuesId`, `productId`

### product​.options​.optionValues​.swatch​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValue#field-ProductOptionValue.fields.swatch)

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

`product.options.optionValues.swatch.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.options.optionValues.swatch`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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 `swatch` field represents the swatch associated with the product option value.

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

### product​.options​.optionValues​.swatch​.color[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValueSwatch#field-ProductOptionValueSwatch.fields.color)

Fires when the [`color`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValueSwatch#field-ProductOptionValueSwatch.fields.color) field on the [`ProductOptionValueSwatch`](https://shopify.dev/docs/api/admin-graphql/2026-10/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:** `optionsId`, `optionValuesId`, `productId`

### product​.options​.optionValues​.swatch​.image[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValueSwatch#field-ProductOptionValueSwatch.fields.image)

Fires when the [`image`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOptionValueSwatch#field-ProductOptionValueSwatch.fields.image) field on the [`ProductOptionValueSwatch`](https://shopify.dev/docs/api/admin-graphql/2026-10/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:** `optionsId`, `optionValuesId`, `productId`

### product​.options​.position[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOption#field-ProductOption.fields.position)

Fires when the [`position`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductOption#field-ProductOption.fields.position) field on the [`ProductOption`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.productType)

Fires when the [`productType`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.productType) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.requiresSellingPlan)

Fires when the [`requiresSellingPlan`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.requiresSellingPlan) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.status)

Fires when the [`status`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.status) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.tags)

Fires when the [`tags`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.tags) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.templateSuffix)

Fires when the [`templateSuffix`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.templateSuffix) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.title)

Fires when the [`title`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.title) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.variants)

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

`product.variants.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.variants`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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​.barcodes[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.barcodes)

Fires when the [`barcodes`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.barcodes) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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 `barcodes` field represents the barcodes associated with the product variant.

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

### product​.variants​.compareAtPrice[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.compareAtPrice)

Fires when the [`compareAtPrice`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.compareAtPrice) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.inventoryPolicy)

Fires when the [`inventoryPolicy`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.inventoryPolicy) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.media)

Fires when the [`media`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.media) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.metafield(namespace: String!, key: String!)​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.metafield)

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

`product.variants.metafield(namespace: String!, key: String!).*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.variants.metafield(namespace: String!, key: String!)`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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 `metafield` field represents a custom field, including its `namespace` and `key`, that's associated with a Shopify resource for the purposes of adding and storing additional information.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`, `variantsId`

### product​.variants​.metafield(namespace: String!)​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.metafield)

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

`product.variants.metafield(namespace: String!).*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.variants.metafield(namespace: String!)`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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`.

This subscription omits the optional argument `metafield.key`.

The `metafield` field represents a custom field, including its `namespace` and `key`, that's associated with a Shopify resource for the purposes of adding and storing additional information.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`, `variantsId`

### product​.variants​.metafield(namespace: String!, key: String!)​.value[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value)

Fires when the [`value`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value) field on the [`Metafield`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield) 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 `value` field represents the data stored in the metafield.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`, `variantsId`

### product​.variants​.metafield(namespace: String!)​.value[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value)

Fires when the [`value`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield#field-Metafield.fields.value) field on the [`Metafield`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Metafield) 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`.

This subscription omits the optional argument `metafield.key`.

The `value` field represents the data stored in the metafield.

**Variables:** `metafieldKey`, `metafieldNamespace`, `productId`, `variantsId`

### product​.variants​.position[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.position)

Fires when the [`position`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.position) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.price)

Fires when the [`price`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.price) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.\*[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.productVariantComponents)

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

`product.variants.productVariantComponents.*` is a parent trigger. Subscribing with the `"update"` action receives events for all supported triggers under `product.variants.productVariantComponents`, including nested triggers. Use a more specific trigger to limit events to the fields you need.

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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariantComponent#field-ProductVariantComponent.fields.quantity)

Fires when the [`quantity`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariantComponent#field-ProductVariantComponent.fields.quantity) field on the [`ProductVariantComponent`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.requiresComponents)

Fires when the [`requiresComponents`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.requiresComponents) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.showUnitPrice)

Fires when the [`showUnitPrice`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.showUnitPrice) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.taxable)

Fires when the [`taxable`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.taxable) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.variants​.title[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.title)

Fires when the [`title`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.title) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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 `title` field represents the title of the product variant.

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

### product​.vendor[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.vendor)

Fires when the [`vendor`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Product#field-Product.fields.vendor) field on the [`Product`](https://shopify.dev/docs/api/admin-graphql/2026-10/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​.variants​.barcode[](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.barcode)

**Deprecated:**

Fires when the [`barcode`](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariant#field-ProductVariant.fields.barcode) field on the [`ProductVariant`](https://shopify.dev/docs/api/admin-graphql/2026-10/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`

### Examples

* #### Subscribe via app configuration

  ##### shopify.app.toml

  ```toml
  [events]
  api_version = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["create","update","delete"]
  triggers = ["product.*"]

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

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

  ##### Payload (added)

  ```json
  {
    "topic": "Product",
    "action": "create",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (updated)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].bundleComponents.quantity"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "delete",
    "handle": "product-event",
    "data": {
      "product": null
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573']"
      ]
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update # or create, delete
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "bundleComponents": {
          "nodes": [
            {
              "__typename": "ProductBundleComponent"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].bundleComponents"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "bundleComponents": {
          "nodes": [
            {
              "quantity": "…"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].bundleComponents.quantity"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "bundleComponents": {
          "nodes": [
            {
              "quantityOption": {
                "__typename": "ProductBundleComponentQuantityOption"
              }
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].bundleComponents.quantityOption"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "category": {
          "id": "gid://shopify/TaxonomyCategory/111"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].category"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "__typename": "CombinedListing"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].combinedListing"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

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

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

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

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

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "combinedListingChildren": {
            "nodes": [
              {
                "__typename": "CombinedListingChild"
              }
            ]
          }
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].combinedListing.combinedListingChildren.parentVariant[id: 'gid://shopify/ProductVariant/2877704828091']"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "combinedListingChildren": {
            "nodes": [
              {
                "parentVariant": {
                  "id": "gid://shopify/ProductVariant/2877704828091"
                }
              }
            ]
          }
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].combinedListing.combinedListingChildren.parentVariant[id: 'gid://shopify/ProductVariant/2877704828091']"
      ],
      "removed": []
    },
    "query_variables": {
      "parentVariantId": "gid://shopify/ProductVariant/2877704828091",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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 (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "combinedListingChildren": {
            "nodes": [
              {
                "product": {
                  "id": "gid://shopify/Product/5572698727253"
                }
              }
            ]
          }
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].combinedListing.combinedListingChildren.product[id: 'gid://shopify/Product/5572698727253']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "combinedListingChildrenProductId": "gid://shopify/Product/5572698727253",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListing": {
          "combinedListingChildren": {
            "nodes": [
              {
                "product": {
                  "id": "gid://shopify/Product/5572698727253"
                }
              }
            ]
          }
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].combinedListing.combinedListingChildren.product[id: 'gid://shopify/Product/5572698727253']"
      ]
    },
    "query_variables": {
      "combinedListingChildrenProductId": "gid://shopify/Product/5572698727253",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "combinedListingRole": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].combinedListingRole"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "descriptionHtml": "<p>Example</p>"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].descriptionHtml"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "giftCardTemplateSuffix": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].giftCardTemplateSuffix"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "handle": "example-product"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].handle"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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 (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "media": {
          "nodes": [
            {
              "id": "gid://shopify/MediaImage/1301774391739"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].media[id: 'gid://shopify/MediaImage/1301774391739']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "mediaId": "gid://shopify/MediaImage/1301774391739",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "media": {
          "nodes": [
            {
              "id": "gid://shopify/Media/111"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].media[id: 'gid://shopify/MediaImage/1301774391739']"
      ]
    },
    "query_variables": {
      "mediaId": "gid://shopify/MediaImage/1301774391739",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.metafield(namespace: 'custom', key: 'rating').*"]

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

  query = """
  query product_event_payload($productId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].metafield[namespace: 'custom', key: 'rating']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].metafield[namespace: 'custom', key: 'rating']"
      ]
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.metafield(namespace: 'custom').*"]

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

  query = """
  query product_event_payload($productId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].metafield[namespace: 'custom', key: 'rating']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].metafield[namespace: 'custom', key: 'rating']"
      ]
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.metafield(namespace: 'custom', key: 'rating').value"]

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

  query = """
  query product_event_payload($productId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].metafield[namespace: 'custom', key: 'rating'].value"
      ],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.metafield(namespace: 'custom').value"]

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

  query = """
  query product_event_payload($productId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].metafield[namespace: 'custom', key: 'rating'].value"
      ],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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 (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "id": "gid://shopify/ProductOption/1676551540187"
          }
        ]
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "id": "gid://shopify/ProductOption/111"
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187']"
      ]
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

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

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

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

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

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "linkedMetafield": {
              "__typename": "LinkedMetafield"
            }
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].linkedMetafield.key"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "linkedMetafield": {
              "key": "…"
            }
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].linkedMetafield.key"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "linkedMetafield": {
              "namespace": "…"
            }
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].linkedMetafield.namespace"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "name": "…"
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].name"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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 (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "id": "gid://shopify/ProductOptionValue/2630093189501"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "id": "gid://shopify/ProductOptionValue/111"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501']"
      ]
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "linkedMetafieldValue": "…"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501'].linkedMetafieldValue"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "name": "…"
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501'].name"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

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

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

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

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

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "swatch": {
                  "__typename": "ProductOptionValueSwatch"
                }
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501'].swatch.color"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "swatch": {
                  "color": "…"
                }
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501'].swatch.color"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "optionValues": [
              {
                "swatch": {
                  "image": {
                    "id": "gid://shopify/MediaImage/111"
                  }
                }
              }
            ]
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].optionValues[id: 'gid://shopify/ProductOptionValue/2630093189501'].swatch.image"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "optionValuesId": "gid://shopify/ProductOptionValue/2630093189501",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "options": [
          {
            "position": "…"
          }
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].options[id: 'gid://shopify/ProductOption/1676551540187'].position"
      ],
      "removed": []
    },
    "query_variables": {
      "optionsId": "gid://shopify/ProductOption/1676551540187",
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "productType": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].productType"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "requiresSellingPlan": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].requiresSellingPlan"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].status"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "tags": [
          "…"
        ]
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].tags"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "templateSuffix": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].templateSuffix"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].title"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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 (added)

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

  ##### Payload (removed)

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

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

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

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

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

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

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "barcodes": {
          "nodes": [
            {
              "__typename": "ProductVariantBarcode"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].barcodes"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "compareAtPrice": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].compareAtPrice"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "inventoryPolicy": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].inventoryPolicy"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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 (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "media": {
          "nodes": [
            {
              "id": "gid://shopify/MediaImage/1301774391739"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].media[id: 'gid://shopify/MediaImage/1301774391739']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "mediaId": "gid://shopify/MediaImage/1301774391739",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "media": {
          "nodes": [
            {
              "id": "gid://shopify/Media/111"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].media[id: 'gid://shopify/MediaImage/1301774391739']"
      ]
    },
    "query_variables": {
      "mediaId": "gid://shopify/MediaImage/1301774391739",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.metafield(namespace: 'custom', key: 'rating').*"]

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

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].metafield[namespace: 'custom', key: 'rating']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].metafield[namespace: 'custom', key: 'rating']"
      ]
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.metafield(namespace: 'custom').*"]

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

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload (added)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].metafield[namespace: 'custom', key: 'rating']"
      ],
      "updated": [],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Payload (removed)

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [],
      "removed": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].metafield[namespace: 'custom', key: 'rating']"
      ]
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.metafield(namespace: 'custom', key: 'rating').value"]

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

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].metafield[namespace: 'custom', key: 'rating'].value"
      ],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  topic = "Product"
  actions = ["update"]
  triggers = ["product.variants.metafield(namespace: 'custom').value"]

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

  query = """
  query product_event_payload($productId: ID!, $variantsId: ID!, $metafieldNamespace: String!, $metafieldKey: String!) {
    product(id: $productId) {
      id
      title
      status
    }
    productVariant(id: $variantsId) {
      metafield(namespace: $metafieldNamespace, key: $metafieldKey) {
        namespace
        key
        value
        type
      }
    }
  }
  """
  ```

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "metafield": {
          "namespace": "custom",
          "key": "rating",
          "value": "Cotton",
          "type": "single_line_text_field"
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].metafield[namespace: 'custom', key: 'rating'].value"
      ],
      "removed": []
    },
    "query_variables": {
      "metafieldKey": "rating",
      "metafieldNamespace": "custom",
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "position": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].position"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "price": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].price"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "productVariantComponents": {
          "nodes": [
            {
              "id": "gid://shopify/ProductVariantComponent/111"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].productVariantComponents"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "productVariantComponents": {
          "nodes": [
            {
              "quantity": "…"
            }
          ]
        }
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].productVariantComponents.quantity"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "requiresComponents": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].requiresComponents"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "showUnitPrice": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].showUnitPrice"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "taxable": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].taxable"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

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

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

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

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

  ##### Payload

  ```json
  {
    "topic": "Product",
    "action": "update",
    "handle": "product-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "title": "Example product"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].title"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE",
        "vendor": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].vendor"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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 = "2026-10"

  [[events.subscription]]
  handle = "product-event"

  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-event",
    "data": {
      "product": {
        "id": "gid://shopify/Product/3924265179573",
        "title": "Example product",
        "status": "ACTIVE"
      },
      "productVariant": {
        "barcode": "…"
      }
    },
    "fields_changed": {
      "added": [],
      "updated": [
        "product[id: 'gid://shopify/Product/3924265179573'].variants[id: 'gid://shopify/ProductVariant/3458726856733'].barcode"
      ],
      "removed": []
    },
    "query_variables": {
      "productId": "gid://shopify/Product/3924265179573",
      "variantsId": "gid://shopify/ProductVariant/3458726856733"
    }
  }
  ```

  ##### Headers

  ```bash
  shopify-action: update
  shopify-api-version: 2026-10
  shopify-handle: product-event
  shopify-hmac-sha256: 61lWIGuA2nXdHRjhMU/+EDw2y3Eg0mPKJ+RhR7dKKIM=
  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
  ```

***
