Hi everyone,
I am facing a major roadblock with the Shopify API and the first-party “Shopify Subscriptions” app. I’ve spent days troubleshooting and have ruled out every “beginner” mistake, but the system simply refuses to communicate.
The Goal:
Automatically remove access to an external platform when a subscription is cancelled via the free “Shopify Subscriptions” app.
The Problem:
The webhook for subscription_contracts/update never fires, and GraphQL queries for subscription contracts return empty edges [], even though active/cancelled contracts exist.
What I have done to ensure this is not a configuration error:
-
Scopes & App Permissions:
-
My custom app has read_own_subscription_contracts and write_own_subscription_contracts.
-
I have reinstalled/updated the app multiple times after changing scopes to ensure they are active.
-
-
Webhook Registration:
-
I successfully registered the SUBSCRIPTION_CONTRACTS_UPDATE webhook via Postman/GraphQL.
-
A query of webhookSubscriptions confirms it exists with the correct callbackUrl.
-
-
Proof of Connectivity:
-
I registered a test webhook for products/create. This works perfectly.
-
This proves: My endpoint is reachable, the Access Token is valid, and the webhook infrastructure is generally working.
-
-
Data Inaccessibility:
-
Running a GraphQL query for subscriptionContracts(query: “status:cancelled”) returns {“edges”: []}.
-
Even triggering a customers/update webhook (which fires successfully on cancellation) and then trying to fetch the customer’s subscriptionContracts returns an empty list.
-
The Logic Flaw:
It seems that a Custom App, even with the correct scopes, cannot “see” or “hear” events from the first-party “Shopify Subscriptions” app. This makes it impossible to automate any post-cancellation logic.
Has anyone found a workaround for this? Is there a hidden scope or a specific API version requirement to allow Custom Apps to read data from the official Subscriptions app?