Skip to main content

Product

Requires read_products access scope.

Subscribe to field-level changes on the Product GraphQL Admin API object. You can subscribe to created, deleted, and updated resources, as well as changes to specific fields.

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

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


Field-level triggers for Product subscriptions.

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

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

Custom queries aren't limited to Product. They can query the full GraphQL Admin API.

Anchor to list-of-topics-product
product

Fires when events involve the Product object, which lets you manage products in a merchant’s store.

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

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

Variables: productId

Anchor to list-of-topics-product.bundleComponents
product.bundleComponents

Fires when the bundleComponents field on the Product object changes.

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

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

Variables: productId

Anchor to list-of-topics-product.bundleComponents.quantity
product.bundleComponents.quantity

Fires when the quantity field on the 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

Anchor to list-of-topics-product.bundleComponents.quantityOption
product.bundleComponents.quantityOption

Fires when the quantityOption field on the 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

Anchor to list-of-topics-product.category
product.category

Fires when the category field on the 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

Anchor to list-of-topics-product.combinedListing
product.combinedListing

Fires when the combinedListing field on the Product object changes.

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

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

Variables: productId

Anchor to list-of-topics-product.combinedListing.combinedListingChildren.parentVariant
product.combinedListing.combinedListingChildren.parentVariant

Fires when the parentVariant field on the 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

Anchor to list-of-topics-product.combinedListing.combinedListingChildren.product
product.combinedListing.combinedListingChildren.product

Fires when the product field on the 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

Anchor to list-of-topics-product.combinedListingRole
product.combinedListingRole

Fires when the combinedListingRole field on the 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

Anchor to list-of-topics-product.descriptionHtml
product.descriptionHtml

Fires when the descriptionHtml field on the 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

Anchor to list-of-topics-product.giftCardTemplateSuffix
product.giftCardTemplateSuffix

Fires when the giftCardTemplateSuffix field on the 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

Anchor to list-of-topics-product.handle
product.handle

Fires when the handle field on the 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

Anchor to list-of-topics-product.media
product.media

Fires when the media field on the 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

Anchor to list-of-topics-product.options
product.options

Fires when the options field on the Product object changes.

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

The options field contains a list of product options.

Variables: optionsId, productId

Anchor to list-of-topics-product.options.linkedMetafield.key
product.options.linkedMetafield.key

Fires when the key field on the 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

Anchor to list-of-topics-product.options.linkedMetafield.namespace
product.options.linkedMetafield.namespace

Fires when the namespace field on the 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

Anchor to list-of-topics-product.options.name
product.options.name

Fires when the name field on the 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

Anchor to list-of-topics-product.options.optionValues
product.options.optionValues

Fires when the optionValues field on the ProductOption object changes.

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

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

Variables: optionValuesId, optionsId, productId

Anchor to list-of-topics-product.options.optionValues.linkedMetafieldValue
product.options.optionValues.linkedMetafieldValue

Fires when the linkedMetafieldValue field on the ProductOptionValue object changes.

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

The linkedMetafieldValue field represents the value of the linked metafield.

Variables: optionValuesId, optionsId, productId

Anchor to list-of-topics-product.options.optionValues.name
product.options.optionValues.name

Fires when the name field on the ProductOptionValue object changes.

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

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

Variables: optionValuesId, optionsId, productId

Anchor to list-of-topics-product.options.optionValues.swatch.color
product.options.optionValues.swatch.color

Fires when the color field on the ProductOptionValueSwatch object changes.

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

The color field represents the color representation of the swatch.

Variables: optionValuesId, optionsId, productId

Anchor to list-of-topics-product.options.optionValues.swatch.image
product.options.optionValues.swatch.image

Fires when the image field on the ProductOptionValueSwatch object changes.

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

The image field represents an image representation of the swatch.

Variables: optionValuesId, optionsId, productId

Anchor to list-of-topics-product.options.position
product.options.position

Fires when the position field on the 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

Anchor to list-of-topics-product.productType
product.productType

Fires when the productType field on the 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

Anchor to list-of-topics-product.requiresSellingPlan
product.requiresSellingPlan

Fires when the requiresSellingPlan field on the 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

Anchor to list-of-topics-product.status
product.status

Fires when the status field on the 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

Anchor to list-of-topics-product.tags
product.tags

Fires when the tags field on the 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

Anchor to list-of-topics-product.templateSuffix
product.templateSuffix

Fires when the templateSuffix field on the 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

Anchor to list-of-topics-product.title
product.title

Fires when the title field on the 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

Anchor to list-of-topics-product.variants
product.variants

Fires when the variants field on the Product object changes.

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

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

Variables: productId, variantsId

Anchor to list-of-topics-product.variants.barcode
product.variants.barcode

Fires when the barcode field on the 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

Anchor to list-of-topics-product.variants.compareAtPrice
product.variants.compareAtPrice

Fires when the compareAtPrice field on the 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

Anchor to list-of-topics-product.variants.inventoryPolicy
product.variants.inventoryPolicy

Fires when the inventoryPolicy field on the 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

Anchor to list-of-topics-product.variants.media
product.variants.media

Fires when the media field on the 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

Anchor to list-of-topics-product.variants.position
product.variants.position

Fires when the position field on the 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

Anchor to list-of-topics-product.variants.price
product.variants.price

Fires when the price field on the 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

Anchor to list-of-topics-product.variants.productVariantComponents
product.variants.productVariantComponents

Fires when the productVariantComponents field on the ProductVariant object changes.

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

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

Variables: productId, variantsId

Anchor to list-of-topics-product.variants.productVariantComponents.quantity
product.variants.productVariantComponents.quantity

Fires when the quantity field on the 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

Anchor to list-of-topics-product.variants.requiresComponents
product.variants.requiresComponents

Fires when the requiresComponents field on the 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

Anchor to list-of-topics-product.variants.showUnitPrice
product.variants.showUnitPrice

Fires when the showUnitPrice field on the 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

Anchor to list-of-topics-product.variants.taxable
product.variants.taxable

Fires when the taxable field on the 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

Anchor to list-of-topics-product.vendor
product.vendor

Fires when the vendor field on the 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

Anchor to list-of-topics-product.bodyHtml
product.bodyHtml
Deprecated

Fires when the bodyHtml field on the Product object changes.

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

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

Variables: productId

Anchor to list-of-topics-product.customProductType
product.customProductType
Deprecated

Fires when the customProductType field on the Product object changes.

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

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

Variables: productId

Anchor to list-of-topics-product.images
product.images
Deprecated

Fires when the images field on the Product object changes.

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

The images field represents the images associated with the product.

Variables: imagesId, productId

Anchor to list-of-topics-product.productCategory
product.productCategory
Deprecated

Fires when the productCategory field on the Product object changes.

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

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

Variables: productId

Anchor to list-of-topics-product.standardizedProductType
product.standardizedProductType
Deprecated

Fires when the standardizedProductType field on the Product object changes.

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

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

Variables: productId


Was this page helpful?