Unexpected notificationType in App Store Server Notifications V2 when free trial ends

In my app’s IAP products, before enabling free trials, the App Store Server Notifications V2 callbacks all returned the correct notificationType. For auto-renewable subscriptions, when they were about to expire, the notificationType was either DID_RENEW or EXPIRED. A small number of cases(DID_FAIL_TO_RENEW) failed to renew due to billing issues, which was expected.

However, after I enabled a 7-day free trial for the auto-renewable products, I noticed that in the App Store Server Notifications V2 callbacks, almost all users (except those who manually turned off auto-renewal) received notificationType = DID_FAIL_TO_RENEW. According to the documentation, DID_FAIL_TO_RENEW indicates a billing issue renewal failure, but in this case it seems like all renewals are being marked as failed.

I’ve observed that for users who cancel during the free trial, the callbacks look normal: first a DID_CHANGE_RENEWAL_STATUS notification, then an EXPIRED notification when the trial ends. That flow seems correct.

However, for users who do not cancel the trial, almost all callbacks show DID_FAIL_TO_RENEW. Does this mean every remaining user has a billing issue?

I also noticed on the Developer Forums that other developers have reported the same issue — receiving a large number of DID_FAIL_TO_RENEW notifications specifically when free trials convert to paid subscriptions: https://developer.apple.com/forums/search?q=DID_FAIL_TO_RENEW

Could someone clarify: under normal circumstances, when a free trial transitions to a paid subscription and fails, should the App Store Server Notifications V2 notificationType indeed be DID_FAIL_TO_RENEW, or should it be a different type(e.g. EXPIRED)?

And is it expected behavior that almost all free trial conversions return DID_FAIL_TO_RENEW?

Additional details:

I did not enable a grace period in ASC. For the callbacks where notificationType = DID_FAIL_TO_RENEW, the subtype is empty, and the renewalInfo.expirationIntent is 2. According to the documentation (https://developer.apple.com/documentation/appstoreservernotifications/expirationintent), value 2 indicates a billing error.

After 7 days free trial, about 45% of my auto-renewable users remained, but almost all of them are showing DID_FAIL_TO_RENEW.

I’m very confused — why would all the remaining users who still have auto-renew turned on be flagged as billing issues?

Is this a bug or expected behavior?

I have also submitted a report through Feedback Assistant: FB20103897

FB20103897 selected a wrong categroy, I have resubmitted a report: FB20123714

Unexpected notificationType in App Store Server Notifications V2 when free trial ends
 
 
Q