How to let merchants downgrade to a free plan without deleting the app or contacting support. The key question: create a $0 recurring charge or programmatically cancel the existing paid subscription (a $0 charge returns “price must be greater than zero”).
Practical approaches shared:
Default new installs to the free plan; provide a “cancel subscription” flow triggered by a webhook (server callback on events).
If the free tier might involve overage/usage fees, consider keeping a usage-based subscription and crediting as needed; if no charges are possible, simply cancel the paid plan.
Use the Admin GraphQL mutation appSubscriptionCancel to end the current subscription; ensure you store the charge/subscription ID from the post-approval callback to support later upgrades/downgrades.
For upgrades, merchants must explicitly accept new pricing and are redirected back to the app via redirect_url after confirmation.
Outcome: No support for $0 recurring app charges; the prevailing guidance is to cancel the paid subscription and treat the merchant as on the free plan. The discussion provides implementation pointers but no official Shopify confirmation; the thread remains informational/ongoing.
From Shopify app requirements:
“If your app has multiple pricing plans, then merchants must be able to upgrade and downgrade their plan without having to delete the app or contact support.”
The app has 4 plans: a free plan and 3 recurring paid ones.
And I have a question. What do we need to do to choose the free plan? Do we need to create a recurring charge with a price of 0.00? Or do we just need to cancel programmatically the current non-free subscription?
If we need to create recurring charges with a price of 0.00, what is the correct way to do it? We get the error “the price must be greater than zero”
At last, we started giving free plans by default when the customer is installing the app through shopify and also added a cancel subscription by using webhook.
I Hope, this way you can offer free plan to your users
Good question. If I had to answer I’d say it depends. If with the free plan there is the possibility that the merchant has to pay for a surplus or an extra or something else, you could manage it with a subscription to use and credit the merchant if necessary. If there is no possibility that the merchant has to pay something then you can simply cancel the plan.
One of the negatives about the documentation is the lack of python support, but it isn’t much different than ruby. You will just create a request query, establish the variables and header, then submit the request.
You will need to have the charge ID, so make sure you are catching that in the callback authorization and storing it for the user so you can call it back to upgrade/downgrade. This is the only call that you have to do through GraphQL when dealing with subscriptions, the rest will be done with Shopify’s admin api as it requires a confirmation from the user by them clicking accept to the new pricing and then they will be redirected back to your app’s redirect_url you set.