Our app is free with optional credit purchases via appPurchaseOneTimeCreate. We cannot use Shopify App Pricing because it blocks appPurchaseOneTimeCreate — we get “Managed Pricing Apps cannot use the Billing API”. We also cannot create a $0/month recurring subscription via appSubscriptionCreate — we get “Price must be greater than zero”. How can we implement a free plan that shows correctly on the manage-app screen while keeping one-time credit purchases working? What is the recommended approach for this pricing model?
Those two errors are the same rule seen from opposite ends, so there is no combination of the two that gets you through.
Shopify App Pricing and the Billing API are mutually exclusive for new charges. The managed pricing doc says plainly that “Shopify App Pricing doesn’t support one-time purchases”, and that once you opt in “you can’t create new recurring application charges using the Billing API”. So the moment you are on managed pricing, appPurchaseOneTimeCreate is gone by design rather than by oversight.
The zero price rejection is that same rule from the other side. In the Billing API a free tier is not a subscription priced at zero, it is the absence of a subscription. There is nothing to create, so there is nothing for the manage app screen to render. That is why manufacturing one keeps failing.
If what you actually want is a plan visible on that screen while credits still work, there is one route left. Stay off managed pricing, and create a subscription whose line item carries only appUsagePricingDetails with no recurring pricing details on it at all. Usage only subscriptions are supported and the mutation reference has a worked example of one. You get a real subscription object at zero recurring, the merchant sees and approves it with a capped amount, and you bill credits through appUsageRecordCreate against that cap.
The catch is that it changes when the money arrives. Usage records settle on the app billing cycle against a cap the merchant approved in advance, so it is metered post pay rather than a prepaid credit pack. If your buyers need to purchase 500 credits up front and have them sit in the account, that does not model it and you are better off staying on appPurchaseOneTimeCreate, accepting there is no plan card, and showing the balance inside your own UI.
Which shape is it for you, are the credits bought up front or consumed first and billed afterwards?
bought up front — merchants pay for credits in advance via appPurchaseOneTimeCreate, then use them. We don’t use appUsageRecordCreate at all.
You are running into a real constraint, not a config mistake, so it helps to name it clearly: Shopify App Pricing (the new name for Managed Pricing since May) only supports recurring subscriptions and usage-based charges. It does not support one-time or prepaid charges at all. The moment your app is on App Pricing, the legacy Billing API is blocked, which is why appPurchaseOneTimeCreate stops working.
That is also why lumine’s usage-based suggestion does not fit you. Usage billing is post-pay metered, and your model is prepaid credits bought upfront. Those are different things, and App Pricing has no prepaid mode.
So the two goals fight each other under one pricing mode. App Pricing gives you the plan card but kills your one-time credit purchases. Manual pricing keeps your prepaid credits working through the Billing API but does not give you the native App Pricing plan card.
For a free app whose only real charge is prepaid credits, staying on Manual pricing is the path that actually works. Your “free plan” is just the state of not having bought credits yet. The manage-app screen still shows the app as installed and usable without you needing an App Pricing plan card to make that happen. You show the credit balance and a buy-more button inside your own UI, and the purchase runs through appPurchaseOneTimeCreate as it does now.
One warning if you switch back to Manual: a few people report still getting the “cannot use the Billing API” error right after toggling. Two things to check. Remove the App Pricing plans you created, not just switch the mode, since a lingering App Pricing plan can keep the app flagged. And give it time to propagate, it is not always instant per store. Test the one-time charge again on a dev store after that.
If Shopify ever adds native prepaid support to App Pricing you could move over, but as of now prepaid one-time is Manual pricing plus the Billing API, and that is the only combination that does what you described.
Hey, @awaisshafi
Hope you are doing great!
If your app is free with optional one-time credits, I’d avoid Managed Pricing and keep billing handled through the Billing API. You can make the app itself free and use appurchaseonetimecreate only when merchants choose to buy credits. For the Manage Apps screen, Shopify’s pricing/plan display may not support a true $0 recurring plan through appsubscriptioncreate, so this is more of a Shopify billing limitation than something you can solve with a $0 subscription