Next Generation Events are now available in developer preview, with field-level control over when events fire, what data they carry, and what triggered each delivery.
- Subscribe to exactly what you care about. Field-level
triggerspre-qualify deliveries before they reach your endpoint. A subscription scoped toproduct.variants.pricewon't fire on title edits, tag updates, or status changes. Only when the price changes. - Get the payload your app needs, not a fixed schema. You define the delivery payload with a standard Admin GraphQL query. No over-fetching fields you'll discard. No extra API call to get the data you actually wanted after the webhook lands.
- Know what fired for each delivery. Every delivery includes
fields_changed: an explicit list of the fields that triggered the event, with full entity paths and IDs. That means you don't need to infer, or diff against prior state. - Filter on current state.
query_filternarrows deliveries based on the current state of your query output. Use it to skip events that don't meet your conditions, like only delivering for active products. - Configure in code. Subscriptions live in
shopify.app.tomlalongside your other app configuration. Version-controlled, reviewable, and deployable.
As a developer preview, Events are available in the unstable API version and APIs may change. Product and Customer topics are live today.
Configuration and payload
[events]
api_version = "unstable"
[[events.subscription]]
handle = "price_sync"
topic = "Product"
actions = ["update"]
triggers = ["product.variants.price", "product.variants.compareAtPrice"]
uri = "/api/events"
query = """
query priceSync($productId: ID!, $variantsId: ID!) {
productVariant(id: $variantsId) {
id
price
compareAtPrice
sku
}
product(id: $productId) {
id
title
status
}
}
"""
query_filter = "product.status:'ACTIVE'"
Every delivery includes fields_changed, data from your query, and query_variables used to fetch it:
{
"topic": "Product",
"action": "update",
"handle": "price_sync",
"data": {
"productVariant": {
"id": "gid://shopify/ProductVariant/456",
"price": "24.99",
"compareAtPrice": "34.99",
"sku": "SIGNAL-NOT-NOISE"
},
"product": {
"id": "gid://shopify/Product/123",
"title": "Peace & Quiet Tee",
"status": "ACTIVE"
}
},
"fields_changed": [
"product[id: 'gid://shopify/Product/123'].variants[id: 'gid://shopify/ProductVariant/456'].price"
],
"query_variables": {
"productId": "gid://shopify/Product/123",
"variantsId": "gid://shopify/ProductVariant/456"
}
}
Learn more
Learn more about how Events relate to Webhooks: https://shopify.dev/docs/apps/build/events-webhooks Get started by Creating an Events subscription.

