Is it a UI bug when displaying the billing time, or is it a technical issue?

Our app uses the Billing API, and we want to offer a $1 charge for the first month instead of the full price. From the second month onward, the full price should apply.

When testing the app in the development environment, we noticed that Shopify shows two months charged at $1 instead of only one. We are not sure whether this is a technical issue in Shopify’s system or just a UI display issue.

Hi @ts_team! This is expected behavior for test charges on development stores at the moment - you’re not doing anything wrong.

Test app subscriptions don’t actually go through billing cycles, so things like discount expiration and remainingDurationInIntervals updates can’t be properly simulated. The UI showing “10 months” is essentially a display quirk because there’s no real billing happening to decrement the counter.

This exact scenario was addressed in this thread where the accepted solution confirmed test charges don’t track billing intervals the same way live charges do. The test charges documentation covers how dev store billing works differently from production.

When you go live on a production store with real charges, your durationLimitInIntervals: 1 will work correctly - the discounted price applies for one billing cycle, then full price kicks in from the second cycle onward. The subscription discounts guide has more details on how discount duration limits behave in production.

To verify your implementation is correct, you can query the AppSubscription object and check the lineItems.plan.pricingDetails.discount fields - specifically durationLimitInIntervals should show your configured value, and remainingDurationInIntervals will decrement properly with live charges.

Thanks for your response.

It looks like two links are currently returning 404 errors:

Hey @ts_team, good catch on those broken links - looks like the docs got reorganized since the internal doc I pulled them from was last updated!

Here are the updated URLs:

  • The subscription discounts info is now at offer subscription discounts - this covers how durationLimitInIntervals works and when discounts start/end.

  • The test charges documentation no longer has its own dedicated page. That info has been folded into the Managed App Pricing docs - scroll down to the “Test charges” section for the dev store behavior details.

The core explanation still stands though: your durationLimitInIntervals: 1 setup is correct and will work as expected once you’re on a production store with real billing cycles. If you note that it doesn’t, reply here and I can investigate the specifics!