Skip to main content

Hello!

Background
We’ve noticed that we now typically receive a BILLING_ISSUE webhook followed by a CANCELLATION webhook with a reason of BILLING_ERROR when a customer encounters billing problems in the App Store/Play Store.

The webhook documentation does not really tell me what the practical difference is between these two:

BILLING_ISSUE:
There has been a problem trying to charge the subscriber. This does not mean the subscription has expired.

CANCELLATION w/ BILLING_ERROR:
Apple, Amazon, or Google could not charge the subscriber using their payment method.

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.

From the descriptions here, it kind of seems like they are interchangeable. Neither signify that the subscription has expired, so we shouldn’t revoke access when we get them.

My Questions:
- Can I always expect to receive both?
- Is CANCELLATION w/ BILLING_ERROR a replacement for BILLING_ISSUE?
- What’s the difference in terms of how I should treat the customer’s subscription, if any?

Hi @Eric DH , you are right, these two should always come together, so for all intents and purposes, you only have to handle one of them. There isn’t really a GREAT reason for this other than that you perhaps want to trigger a workflow that covers only billing issues and could listen only to the BILLING_ISSUE event. CANCELLATION w/ BILLING_ERROR isn’t really a “replacement” for BILLING_ISSUE per se, we will continue sending both. In terms of treating the customer subscription: Neither of these should really affect the status of the subscription, because depending on store configuration, there might be a grace period during which the customer retains access. You should listen to the EXPIRATION event in order to switch a subscription from active to inactive.


Reply