Billing Edge Case (Cancel and Renew mid cycle)

Hi Everyone, I wanted to validate what would occur for a billing scenario where a user cancels a subscription mid cycle, then immediately creates a new subscription before the previous cycle ends. More details below:

tried cancelling and recreating. what i can see on my end

  • shopify keeps the current Nov 26-Dec 26 billing cycle active

  • screens suggest after cancelling and reactivating, that there is another test charge that occured

  • can’t view current changes page. it says “This feature isn’t currently available for your store”

so to me it looks like there are 2 billing cycles:

  • Nov 26 - Dec 26

  • Dec 8 - Jan 8

when the Nov 26- Dec 26 cycle ends, the other cycle kicks in
but then it seem s like rather than getting 60 days for $500USD, we get ~45 for $500 USD
the difficulty in validating is that i can’t view the page that says “This feature isn’t currently available for your store” to what else might be happening behind the scenes

Here is what ChatGPT had to say:

This scenario seems like a unique edge case for my teams app that is unlikely to occur, but just wanted to confirm if this is something the billing API handles gracefully.

Thank you very much in advance!

Hi @toyaokeke,

The behaviour of the app subscription when cancelled depends on a number of factors, including how the subscription was cancelled, and what the replacementBehaviour for the subscription was set to when created.


If the subscription was cancelled due to the merchant uninstalling the app, the subscription is cancelled automatically, but the merchant can still re-install the app and the subscription will be valid until the end of the billing cycle.

When an app is uninstalled, Shopify automatically cancels the subscription. A credit isn’t applied to cover the cost of the rest of the billing period. Merchants can reinstall and use the app for the remainder of the billing period.

If they reinstalled the app and subscribed to a new subscription, when the new subscription is activated will depend on the replacementBehavior setting when creating the new subscription.

If the new subscription is activated before the end of the old subscription period, the next invoice will be prorated, with the merchant receiving prorated credits if the new subscription is cheaper, or having prorated charges applied if the new subscription is more expense than the old subscription.


If the subscription was cancelled manually with a appSubscriptionCancel mutation, the cancellation timing also depends on the replacementBehaviour set when the subscription was created.

Cancels an active app subscription, stopping future billing cycles. The cancellation behavior depends on the replacementBehavior setting - it can either disable auto-renewal (allowing the subscription to continue until the end of the current billing period) or immediately cancel with prorated refunds.

If you do cancel the subscription manually, and the replacementBehaviour is set to APPLY_IMMEDIATELY, you can provide the merchant with credits for the unused subscription time by passing prorated: true in the input of the appSubscriptionCancel mutation.

This will ensure your merchants don’t get “~45 days for $500 USD”, and instead get will get a credit for the 15 unused days of the old subscription.


Regarding the this feature isn’t currently available for your store error you’re experiencing.

Is this occurring on a Partner Development Store that was created in the Dev Dashboard, and had the Shopify Plus plan selected when creating it?

If so, this is likely a known issue that our developers are aware of and looking into further (see this thread for context).

If it’s not a Plus Development Store created in the Dev Dashboard from a Partner Account, then I would recommend reaching out to the Shopify Support team via the Shopify Help Center, while logged into the store this occurring on, and we can help you look into this further.

Hi @toyaokeke,

I just wanted to see if this helped answer your questions, or if you needed any further help with this? If you’re good here, we can mark the thread as solved, otherwise let us know any follow up questions you may have and we can help further!

@Kellan-Shopify apologies for the late response. I believe this answers my question, it appears Shopify GraphQL mutations are able to handle this gracefully. when you mention the replacementBehavior, I am using the default for both the create and cancel mutations. From what I understand, the proration still applies in the overlapping billing cycle scenario I mentioned?

Hi @toyaokeke, no need for apologizies :slight_smile:

If you’re using replacementBehavior: STANDARD (which is the default value when not specified) the following behaviour should occur.

Cancels the merchant’s current app subscription immediately and replaces it with the newly created app subscription, with the exception of the following scenarios where replacing the current app subscription will be deferred until the start of the next billing cycle.

  1. The current app subscription is annual and the newly created app subscription is annual, using the same currency, but is of a lesser value.
  2. The current app subscription is annual and the newly created app subscription is monthly and using the same currency.
  3. The current app subscription and the newly created app subscription are identical except for the discount value.

From your initial post it sounds like the subscription was still active until the end of the billing cycle, when it then swapped over to the new subscription.

when the Nov 26- Dec 26 cycle ends, the other cycle kicks in

This would not lead to any prorated credits being applied to the merchant’s invoice/account, since they are continuing with the old subscription until the end of the cycle, when the new subscription is then activated.

If you want the old subscription to be cancelled immediately, with the new subscription imediately active, and have prorated credits applied to the merchant’s invoice if the new subscription is cheaper than the old one, or prorated charges being applied if the new subscription is more expensive, then you should be using replacementBehaviour: APPLY_IMMEDIATELY specifically.

If you have any specific examples of app subscriptions that aren’t behaving as described above, I would recommend reaching out to the Shopify Support Team, via the Shopify Help Center while logged into your partner account, and provide them with details of the actual subscription, and we can help look into it further!