Topics covering webhook creation & management, event handling, Pub/Sub, and Eventbridge, in Shopify apps.
I am trying to register an app/uninstalled webhook on my app in two separate backend services: the nodejs backend that comes with the sample app, as well as a separate C# backend I am developing. When I register the webhook in the C# backend, I am able to verify that the registration was successful by making a call to the /admin/api/2022-07/webhooks.json REST api. However, when I continue execution and the nodejs app creates its webhook registration for the same topic, a subsequent call to the /webhooks.json REST api shows the webhook for the C# backend has been replaced with the webhook for the nodejs backend.
Below are the two REST calls: the first is done immediately after the C# backend creates its webhook (on a breakpoint), the second is done after execution is allowed to proceed and the nodejs backend creates its webhook.
ethan@BEASTMODE:~$ curl -X GET "https://chungis-store.myshopify.com/admin/api/2022-07/webhooks.json" -H "X-Shopify-Access-Token: {redacted}"
{"webhooks":[{"id":1154898559217,"address":"https:\/\/6842-xx-xx-xx-xx.ngrok.io\/v1\/uninstall?shop=chungis-store.myshopify.com","topic":"app\/uninstalled","created_at":"2022-08-08T09:56:44-07:00","updated_at":"2022-08-08T09:56:44-07:00","format":"json","fields":[],"metafield_namespaces":[],"api_version":"2022-07","private_metafield_namespaces":[]}]}
ethan@BEASTMODE:~$ curl -X GET "https://chungis-store.myshopify.com/admin/api/2022-07/webhooks.json" -H "X-Shopify-Access-Token: {redacted}"
{"webhooks":[{"id":1154898559217,"address":"https:\/\/1021-xx-xx-xx-xx.ngrok.io\/webhooks","topic":"app\/uninstalled","created_at":"2022-08-08T09:56:44-07:00","updated_at":"2022-08-08T09:57:40-07:00","format":"json","fields":[],"metafield_namespaces":[],"api_version":"2022-07","private_metafield_namespaces":[]}]}
Am I correct in assuming that I can only have one app/uninstalled webhook registered per store per app? If so, does this limitation extend to any webhook topic? And, finally, is this limitation called out in documentation anywhere?