It seems that the product update webhook is not triggered when only a variant metafield is updated. Based on expected behavior, I believe the webhook should be triggered even when changes are made solely to variant-level metafields.
Currently, the webhook is triggered for general product or variant updates, but not when only a metafield on a variant is changed.
Please refer to the attached image for reference.
Could you please confirm if this is the expected behaviour, or if it’s a bug?
1 Like
Hi @Viral_Mandaliya
It seems that modifying the product matefield will not trigger the webhook
Hi @Viral_Mandaliya,
You are correct, the products/update webhook does not trigger when a variant metafield is updated. It does trigger on product fields, product metafields, and regular variant fields but not variant metafields. (But if you update a variant metafield the next products/update webhook you receive, from another update, will contain those updated metafields as well.)
I don’t see any mention of this in the documentation though and it was kind of a surprise when we noticed it. We asked Shopify support and they confirmed that:
To clarify, it is expected that webhooks are triggered when the main product metafields are updated, but not when the variant metafields are, as you are experiencing.
There’s also an old forum post where they seem to confirm that it’s intentional.
My guess is that, with the move to 2048 variants, this is even less likely to get changed which is unfortunate.
Best,
Daniel
Hey @Viral_Mandaliya,
I was just testing here and subscribed to the PRODUCTS_UPDATE webhook making sure to include the metafield namespace in my mutation. I then updated just the metafield on a variant, and the webhook was triggered.
I subscribed using version 2025-04 in my mutation. Also my webhook settings are set as 2025-04.
This is the mutation:
mutation {
webhookSubscriptionCreate(
topic: PRODUCTS_UPDATE,
webhookSubscription: {
callbackUrl: "YOUR.URL.HERE",
format: JSON,
metafieldNamespaces: ["custom"]
}
) {
webhookSubscription {
id
topic
metafieldNamespaces
endpoint {
__typename
... on WebhookHttpEndpoint {
callbackUrl
}
}
format
}
userErrors {
field
message
}
}
}
Then updating only the variant metafield
The webhook was triggered:
"variants": [
{
"admin_graphql_api_id": "gid://shopify/ProductVariant/52999604633622",
...
"metafields": [
{
"id": 147786870816790,
"namespace": "custom",
"key": "variantmetafield",
"value": "3",
...
}
]
},
Can you test again, making sure you’re using the most recent API versions for your webhooks?
3 Likes
Hello @KyleG-Shopify
Thanks for your reply. We have tried this & its working fine even in 2025-01.
I have one more query here. We have to send namespace when we subscribe webhook. Can we get all metafield data in webhook payload without mentioning namespace while subscribing webhook ?
Thanks
Hey @Viral_Mandaliya, you will need to specify the metafields and metafieldNamespaces you want returned in the input WebhookSubscriptionInput - GraphQL Admin
1 Like
On our development store, we’re receiving product/update webhooks when changing a variant metafield that we’ve registered for.
We deployed the same feature to our production app, but no production stores are sending product/update webhooks when the variant metafield is updated.
All updates in testing and production are done in the Admin, not via API calls.
@KyleG-Shopify Is there a known inconsistency in this behaviour?
Reading the above and this thread, it certainly seems like there is confusion around whether or not variant metafield updates trigger product/update webhooks.
Hey Anthony,
Thanks for sharing that. I’ve checked with Alan who was digging in to this on that other thread and he confirmed that we do have an issue to look in to when an update to a product variants metafield doesn’t trigger the product update webhook.
That’s interesting that it is working for you in testing, but not production.
Are you using the same webhook version for both? Can you let me know what that is so I can test and replicate.
Are the webhooks configured identically between both production and your development store?
Hi @KyleG-Shopify, thanks for your reply.
Same API and webhook versions on both apps (2025-04), exact same webhook registrations on both apps.
The variant metafield is not an app owned namespace so has no access permissions tied to it in either environment
Dev app is listening to a development store, Production app is listening to many production stores.
Their tomls are the exact same, and both still using the old method of registering webhooks (not via the toml). Everything is at parity.
That’s really interesting. Are access scopes identical on both apps?
we had this issue with shopify flow - updating a variant metafield not triggering the product/update webhook. editing the variant metafield directly in the shopify admin does trigger the webhook.
so we just added an update to a product metafield to the flow (added a updated at metafield to the product). so we just change the date in that metafield each time the variant metafield is updated and that triggered the product/update webhook for us.
1 Like
Hi @KyleG-Shopify
Should this also work in case webhook’s endpoint is AWS Event Bridge ARN?
We subscribed to PRODUCTS_UPDATE topic using GraphQL with API 2025-04 in URL. Webhook setting in app is also set to 2025-04.
And we do not receive event in event bus when only variant metafield is updated, but receive event when any other update is done, including product metafields.
Hey @Sergei_Kachaniuk, EventBridge should support all the same features as HTTP webhooks.
Can you share more on how the variant metafields are being updated? Is it through an API call, Flow (like mentioned by Kele above) or through the admin directly? Do you see any difference between the two?
I can look in to this. Would be able to share the x-request-id of the update that you would expect to trigger the webhook? You can get that from the API response headers, or in the browser network tab if using the admin.
Hi @KyleG-Shopify
Thanks for getting back to me. We’re updating using Shopify Admin.
If you could check request 2d52c743-cab7-4e16-a13e-76f0021d9738-1761664152 that would be much appreciated.
Thanks for sharing that @Sergei_Kachaniuk. From what I can see on that request, it’s not picking up any webhook subscriptions.
Can you share an example of the mutation you are making to subscribe? Are you including the metafields that you’re expecting returned? Does your app own the variant metafields?
We may need to have you reach out to our support teams to look in to that specific shop/app configuration, but for the sake of the others following this thread seeing similar issues it may help to do as much as we can here first!
Hi @KyleG-Shopify
Mutation that is used to subscribe is below:
mutation eventBridgeWebhookSubscriptionCreate($topic: WebhookSubscriptionTopic!, $webhookSubscription: EventBridgeWebhookSubscriptionInput!) {
eventBridgeWebhookSubscriptionCreate(topic: $topic, webhookSubscription: $webhookSubscription) {
webhookSubscription {
id
topic
metafieldNamespaces
format
endpoint {
__typename
... on WebhookEventBridgeEndpoint {
arn
}
}
}
userErrors {
field
message
}
}
}
With variables set to
{
"topic": "PRODUCTS_UPDATE",
"webhookSubscription": {
"arn": "arn:aws:events:us-east-1::event-source/aws.partner/shopify.com/xxxx/yyyy",
"format": "JSON",
"metafieldNamespaces": "custom", "services", "pre-order"
}
}
So as you can see we include metafield namespaces into subscription and we do receive them when webhook is fired on any other attribute update on product or variant, including metafields on product itself.
Meatfields are not owned by the app in which webhooks are created. But same is true for product metafields and we receive webhook update when they’re updated.
Also, here is how webhook subscription looks like when queried back:
{
"id": "gid://shopify/WebhookSubscription/nnnnnnnnnnnn",
"topic": "PRODUCTS_UPDATE",
"metafieldNamespaces": [
"custom",
"services",
"pre-order"
],
"format": "JSON",
"apiVersion": {
"handle": "2025-04",
"supported": true
},
"endpoint": {
"__typename": "WebhookEventBridgeEndpoint",
"arn": "arn:aws:events:us-east-1::event-source/aws.partner/shopify.com/xxxx/yyyy"
}
}
Hi @KyleG-Shopify
I played with this a little more and I think I found why it is not triggering in our case: we have 7 variant metafields and they’re not all visible on variant view right away.
So to see all metafilds, I need to click on “View all” link, which opens new view with only metafields.
And when I update variant metafield on this view, it does not trigger webhook.
But, when I pinned metafield that I need to update so that it is visible from variant view itself and updated it on that view, webhook was triggered!
There is a diffrence in requests made from these 2 views when metafild is updated:
- when updating from variant view I see 2 mutation requests:
- ?operation=MetafieldsSet&type=mutation
- ?operation=ProductVariantUpdate&type=mutation
- when updating from “View all” view I see only one mutation
- ?operation=SetTheseMetafields&type=mutation
Hope this helps to identify the issue and fix second view
2 Likes
Awesome work @Sergei_Kachaniuk. Thanks for sharing that. I’ll attempt to replicate that on my end and dig in to if this is expected or not. I’ll follow up here with what I find.
2 Likes
Thanks @KyleG-Shopify
While you’re on it, could you also please check behavior when metafield value is removed completely, for me in this case webhook is not triggered when this is done in any of the views (variant or variant metafields view)
1 Like
Hey all. I’ve done some digging in here and I can confirm that currently, it’s not expected for variant metafields to trigger product update webhooks.
Alan previously investigated this here as well: Webhooks and variant metafields - #4 by Alan_G
It is on the radar of our product teams, but no concrete plans at this time on when/if this will be supported.
1 Like