How does the new EXPIRATION event handle grace periods?

  • 11 October 2021
  • 7 replies

Badge +5


I am using a web hook to track user subscription status on my server. The new EXPIRATION event seems like a good way to tell if the user should be downgraded or not. This raises a couple of questions though:

If a grace period is defined in the App Store for billing issues, when does the EXPIRATION event get fired (assuming the billing issue is not resolved): before the grace period or after?
Another question we have is: if a subscription is paused (possible only on Google Play), is this event (EXPIRATION) fired?


Yariv from the Bizillion team


Best answer by Jens 5 November 2021, 13:58

View original

7 replies

Userlevel 5
Badge +7

Hi @Bizillion, that’s a great question. Let me clarify the exact conditions with the engineering team and get back to you.

Userlevel 5
Badge +7

Hi @Bizillion, thanks for your patience. We checked this and we seem to have some inconsistencies there currently in how grace periods are handled. What should be the case is that the EXPIRATION event fires after the grace period ends. In other words, you should be able to rely on the EXPIRATION event to revoke access to premium entitlements. We will work on fixing the inconsistent behavior. 

For paused subscriptions, you can rely on the SUBSCRIPTION_PAUSED event.

Badge +5

Hi Jens,

Thanks for your reply. It would be greatly appreciated if you could post here when any inconsistencies have been fixed.

As for paused subscriptions, I understand that the SUBSCRIPTION_PAUSED event indicates that - but I would still like to know if the EXPIRATION event will also be fired when the subscription is paused (as that is also an instance when premium entitlements should be revoked).

I think it’s a great idea to have one event that correctly signals revoking premium entitlements - I’m just trying to make sure EXPIRATION is that event.

Thanks again!

Userlevel 5
Badge +7

Hi Bizillion, apologies for the delay  – I was OOO first and then sick. I am still investigating the second part of the question and will get back to you once I know the answer.

Badge +1

Hey @Bizillion,


I just checked our implementation and we currently do not send an EXPIRATION event when a Play subscription is paused. So if you want to revoke access, you’ll need listen for both EXPIRATION and SUBSCRIPTION_PAUSED.


I agree that one event would be nice - I’ll start a discussion on what kind of changes would be required to support this.

Userlevel 5
Badge +7

Hi @Bizillion, we’ve got another update here.

  • We changed the implementation so that we also send an EXPIRATION event (with expiration reason SUBSCRIPTION_PAUSED) when a subscription is paused. You can therefore rely exclusively on the EXPIRATION event to revoke access to subscription privileges.
  • We’ve made the CANCELLATION and EXPIRATION events more consistent in the case of billing issues and grace periods. The CANCELLATION event with cancellation reason BILLING_ERROR is fired as soon as the billing issue has been detected. The EXPIRATION event with expiration reason BILLING_ERROR is fired if the grace period (if set up) has ended without recovering the payment, and the customer should lose access to the subscription. 

In summary, you will now be able to rely on the EXPIRATION event to be fired whenever the customer should lose access to their subscription, including in the event of a paused subscription or a billing issue resulting in a grace period. 

Badge +5

Hi Jens,

That’s great news, thanks! We appreciate the response and willingness to implement improvements based on customer feedback!