Reported details
What happened
Shopify is changing Events payloads so fields_changed becomes an object with added, updated, and removed arrays instead of a flat array.
Parent triggers now require a terminal wildcard, such as product.variants.*. Existing subscriptions continue to work, but parent-trigger syntax must be updated the next time shopify.app.toml is deployed.
Events deliveries no longer include the shopify-event-id or shopify-resource-id headers. Shopify advises updating API packages to their latest versions.
Classic Webhook subscriptions are unaffected by this update, which applies to Events payloads, trigger syntax, and delivery headers globally.
Business relevance
Why it matters
An integration that still treats fields_changed as a flat list may not correctly distinguish added, updated, and removed paths.
A parent trigger can keep its matching behavior and event volume after the syntax change, but its configuration needs the explicit .* form at the next deployment.
Code that validates or identifies deliveries through the two removed headers may fail unless that dependency is removed or replaced.
Editorial perspective
Analysis & judgment
The most immediate risk is not a change in event volume; it is a compatibility gap between the new payload shape and parsers written for the previous array format.
The trigger change creates a useful deployment checkpoint: teams can audit parent paths in shopify.app.toml without assuming that leaf triggers such as product.variants.price need the same change.
Because Shopify says the removed headers are redundant, updating the relevant API packages is the lower-effort first step, followed by a check for any custom header validation.
Applicability
Seller impact
Merchants with apps or internal workflows consuming Events may see incorrect change classification if their handlers do not read fields_changed.added, fields_changed.updated, and fields_changed.removed.
Teams deploying configuration changes should include parent-trigger syntax in their release checklist, while Classic Webhook users do not need to change subscriptions for this update.
Operational monitoring should check delivery validation and event parsing after the next Events-related deployment, especially where custom code reads Shopify delivery headers.
Action plan
What to do now
- 1
Find legacy Events assumptions
nowSearch Event handlers for flat fields_changed parsing and for shopify-event-id or shopify-resource-id dependencies. If either is present, update the code path before relying on the next deployment.
- 2
Review parent triggers
this-weekInspect shopify.app.toml for parent triggers and convert supported parent paths to the terminal .* syntax, such as product.variants.*. Leave leaf triggers unchanged unless your own review finds another reason to modify them.
- 3
Verify the next Events release
monitorAfter deploying, monitor payload classification and delivery validation for Events integrations. Treat Classic Webhook subscriptions as out of scope for this specific update.
What not to do yet
- Do not apply the Events payload or trigger changes to Classic Webhook subscriptions; the supplied update says those subscriptions are unaffected.
- Do not assume every trigger needs a wildcard rewrite: the stated syntax change applies to parent triggers, while leaf triggers remain unchanged.
Sources & context
Evidence and sources
A source may provide only a headline or summary. Read the evidence scope below. Links and workflow checks are not independent fact verification. Internal confidence values are workflow signals, not probabilities of factual correctness.
- 01Source link
Starting today, we're updating Events payloads, trigger syntax, and delivery headers. Classic Webhook subscriptions are unaffected. What's changed fields_changed now describes how each path changed The flat array becomes an object containing three arrays: added, updated, and removed. Developers can distinguish a resource or relationship being added, a value being updated, or a resource or relationship being removed without querying just to infer what happened. Update payload handling to read fields_changed.added, fields_changed.updated, and fields_changed.removed. Adding a variant to a Product, for example, keeps the Product's action as update and places the variant path in fields_changed.added. Before: { "topic": "Product", "action": "update", "fields_changed": [ "product[id: 'gid://shopify/Product/123'].variants[id: 'gid://shopify/ProductVariant/456']" ] } After: { "topic": "Product", "action": "update", "fields_changed": { "added": [ "product[id: 'gid://shopify/Product/123'].variants[id: 'gid://shopify/ProductVariant/456']" ], "updated": [], "removed": [] } } Parent triggers use an explicit wildcard To subscribe to all supported fields below a parent path, use a terminal .*, suc
Shopify Developer Changelog · Workflow status: single-source
Retrieved: September 16, 2026 at 06:07 p.m. UTC
Claim is bounded to the ingested title or summary; no source body or quotation is retained.