App_subscriptions/update webhook subscribed through Shopify CLI doesn't send events

I’m experiencing an issue with webhooks for the app_subscriptions/update topic. My webhook is properly configured in shopify.app.toml and appears correctly in the Partner Dashboard, but my endpoint is not receiving any events when app subscriptions are updated (neither for ACTIVE nor cancelled statuses).

Interestingly, when I subscribe to the exact same webhook topic programmatically via the GraphQL API, everything works perfectly - my endpoint receives all events as expected.

Has anyone else encountered this specific issue with the app_subscriptions/update webhook when configured through the Shopify CLI configuration? Is there a known limitation or workaround for this particular topic?

Any guidance would be appreciated as we need reliable subscription status updates for our app’s billing functionality.

1 Like

Hey @tieu, when you update the webhooks, is that the currently deployed version?

The reason I ask is I ran in to this myself the other day when I was running app dev locally without deploying.

Hi, this happened to me in the deployed version, but i could replicate it in dev as well :confused:

Hey Tieu,

I have a few more things to try:

  • Make sure you are using the latest CLI version
  • Query your webhook subscriptions after deployment to confirm the subscription is active
  • Check your developer dashboard for to see if the events are sending, and any errors.

Once you’ve confirmed the subscription is applied, if they aren’t sending, or you are not receiving, can you update a subscription on your test store. Log the x-request-id from your mutation to update the subscription and if you can, get the x-request-id from the browser console from when you approve the subscription change. I’ll see if I can find anything in the logs to better understand what’s happening here.

thanks for your reply!

  • we updated to the latest version of cli (3.85.5) but it still didn’t work
  • we could only query the webhooks made by the api, not the ones managed by the cli
  • the webhook exists in the developer dashboard, but without any events
  • im not sure about your instruction about the mutation’s x-request-id, because as i mentioned the webhook made by the mutation worked fine, only the one managed by the shopify cli didn’t send any events (im talking specifically about app_subscriptions/update webhook - other webhooks were fine)

Thanks for doing those tests.

Can you share your app toml file details (redact any identifying information)?

The reason I ask is it seems like they aren’t being subscribed at all in this case. For example, this is a different webhook, but the logs should show the events, whether they went through or not. Since nothing is returned, the configuration file may give us some clues on what to check next.

Below is a test on my own app with app scopes subscriptions before and after adding a proper URL. I know this is a different type, but demonstrates the webhooks should be visible there.

[webhooks]
api_version = "2025-04"

  [[webhooks.subscriptions]]
  uri = "/webhooks/customers/data_request"
  compliance_topics = [ "customers/data_request" ]

  [[webhooks.subscriptions]]
  uri = "/webhooks/customers/redact"
  compliance_topics = [ "customers/redact" ]

  [[webhooks.subscriptions]]
  uri = "/webhooks/shops/redact"
  compliance_topics = [ "shop/redact" ]

  [[webhooks.subscriptions]]
  topics = ["app_subscriptions/update"]
  uri = "/webhooks/app_subscriptions/update"

  [[webhooks.subscriptions]]
  topics = [ "app/uninstalled" ]
  uri = "/webhooks/app/uninstalled"

  [[webhooks.subscriptions]]
  topics = [ "bulk_operations/finish" ]
  uri = "/webhooks/bulk_operations/finish"

  [[webhooks.subscriptions]]
  topics = [ "collections/delete" ]
  uri = "/webhooks/collections/delete"

  [[webhooks.subscriptions]]
  topics = ["customers/create"]
  uri = "/webhooks/customers/create"
  include_fields = [
    "default_address.name",
    "email",
    "first_name",
    "id",
    "last_name",
    "note",
    "state"
  ]

  [[webhooks.subscriptions]]
  topics = [ "customers/delete" ]
  uri = "/webhooks/customers/delete"
  include_fields = [ "id" ]

  [[webhooks.subscriptions]]
  topics = ["customers/merge"]
  uri = "/webhooks/customers/merge"

  [[webhooks.subscriptions]]
  topics = [ "customers_email_marketing_consent/update" ]
  uri = "/webhooks/customers/email_marketing_consent_update"
  include_fields = [ "customer_id", "email_marketing_consent.state" ]

  [[webhooks.subscriptions]]
  topics = ["customers/enable"]
  uri = "/webhooks/customers/enable"
  include_fields = [
    "id",
    "state"
  ]

  [[webhooks.subscriptions]]
  topics = ["customers/update"]
  uri = "/webhooks/customers/update"
  include_fields = [
    "default_address.name",
    "email",
    "first_name",
    "id",
    "last_name",
    "note",
    "state"
  ]

  [[webhooks.subscriptions]]
  topics = [ "fulfillments/create" ]
  uri = "/webhooks/fulfillments/create"
  include_fields = [
    "id",
    "order_id",
    "line_items.id",
    "line_items.quantity",
    "updated_at"
  ]

  [[webhooks.subscriptions]]
  topics = [ "fulfillments/update" ]
  uri = "/webhooks/fulfillments/update"
  include_fields = [
    "id",
    "order_id",
    "line_items.id",
    "line_items.quantity",
    "updated_at"
  ]

  [[webhooks.subscriptions]]
  topics = [ "orders/cancelled" ]
  uri = "/webhooks/orders/cancelled"
  include_fields = [
    "id",
    "customer.email",
    "created_at",
    "updated_at"
  ]

  [[webhooks.subscriptions]]
  topics = [ "orders/create" ]
  uri = "/webhooks/orders/create"
  include_fields = [
  "id",
  "source_name",
  "landing_site",
  "customer.default_address",
  "customer.email",
  "customer.first_name",
  "customer.id",
  "customer.last_name",
  "customer.note",
  "customer.state",
  "customer.verified_email",
  "note",
  "note_attributes",
  "line_items.discount_allocations",
  "line_items.fulfillable_quantity",
  "line_items.fulfillment_status",
  "line_items.gift_card",
  "line_items.id",
  "line_items.name",
  "line_items.price",
  "line_items.product_id",
  "line_items.quantity",
  "line_items.tax_lines",
  "line_items.taxable",
  "line_items.title",
  "line_items.total_discount",
  "created_at",
  "currency",
  "shipping_lines.code",
  "shipping_lines.discount_allocations",
  "shipping_lines.discounted_price",
  "shipping_lines.id",
  "shipping_lines.price",
  "subtotal_price",
  "taxes_included",
  "tags",
  "processed_at",
  "total_discounts",
  "discount_codes.amount",
  "discount_codes.code",
  "fulfillments.created_at",
  "fulfillments.id",
  "fulfillments.line_items",
  "fulfillments.order_id",
  "fulfillment_status",
  "updated_at"
]

  [[webhooks.subscriptions]]
  topics = [ "orders/delete" ]
  uri = "/webhooks/orders/delete"
  include_fields = ["id"]

  [[webhooks.subscriptions]]
  topics = [ "orders/paid" ]
  uri = "/webhooks/orders/paid"
  include_fields = [
    "id",
    "customer.email",
    "created_at",
    "updated_at"
  ]

  [[webhooks.subscriptions]]
  topics = [ "orders/updated" ]
  uri = "/webhooks/orders/updated"
  include_fields = [
    "id",
    "customer.email",
    "discount_codes",
    "financial_status",
  ]

  [[webhooks.subscriptions]]
  topics = [ "products/delete" ]
  uri = "/webhooks/products/delete"

  [[webhooks.subscriptions]]
  topics = [ "refunds/create" ]
  uri = "/webhooks/refunds/create"

  [[webhooks.subscriptions]]
  topics = [ "shop/update" ]
  uri = "/webhooks/shop/update"
  filter = "plan_name:cancelled OR plan_name:frozen OR plan_name:fraudulent"

  [[webhooks.subscriptions]]
  topics = [ "themes/publish" ]
  uri = "/webhooks/themes/publish"

  [[webhooks.subscriptions]]
  topics = [ "themes/update" ]
  uri = "/webhooks/themes/update"

[access.admin]
direct_api_mode = "online"
embedded_app_direct_api_access = true

[access_scopes]
# Learn more at https://shopify.dev/docs/apps/tools/cli/configuration#access_scopes
scopes = "read_all_orders,read_customers,read_discounts,read_fulfillments,read_order_edits,read_orders,read_products,read_themes,write_customers,write_discounts,write_order_edits,write_products,read_customer_merge"

[auth]
redirect_urls = [
  ...
]

[app_proxy]
...

[pos]
embedded = true

[build]
include_config_on_deploy = true


my toml includes other webhook subscriptions and they all worked fine, this one doesnt send any events despite being listed in the dashboard (and we’re sure there were updates to app subscriptions in the last 7 days)

I’ve run into a similar issue before with the app_subscriptions/update webhook when using the CLI configuration. It seems like sometimes the webhook setup via shopify.app.toml doesn’t trigger updates properly, even though everything looks fine on the Partner Dashboard.

that’s pretty oof then :pensive_face: maybe we’ll just go back to use the api for webhook subscription…

Hey @tieu, I want to look in to this further. Since you were receiving the API subscribed webhooks, can you share the webhook id and the request id from the API subscribed webhook that did receive the event while the app configuration file didn’t? I should be able to see with that if there’s anything in our logs to point to the event not sending in your case. If there isn’t anything conclusive though, we may need to ask you to reach out to our support team directly so we can dig further.

thanks for looking more into this, i just made another test webhook for you to check: gid://shopify/WebhookSubscription/1454255997113 not sure what you mean by the “request id“? i hope this event-id 6ff47cba-ea32-433b-96b0-5d6e53c08004 is enough to check the webhook subscription on your side :eyes:?

Hey, I’m going to need a few more details. I’ll send a DM.

1 Like