Skip to main content
Solved

How do you refund a sandbox one time (non subscription0 purchase?

  • December 11, 2025
  • 2 replies
  • 20 views

Forum|alt.badge.img

I can’t seem to find any way to test the refund flow for simple one time consumable non-subscription purchases (no entitlements).  This is mission critical because my backend needs to deduct tokens from a user’s account if they refund.  

I understand I should expect a CANCELLATION webhook event, but if I call GET /subscribers/{app_user_id} in response to the webhook, what will be the change to their user info object? 

Will the purchase entry be removed from their list of purchases in the non-subscriptions json node?  

Is there really no way to test refunds from the sandbox?

Best answer by chris_perriam

After the refund is processed (i.e. at the time we dispatch the CANCELLATION webhook), we’ll remove the consumable purchase from the non_subscriptions array in the response object for GET /v1/subscribers/{app_user_id}.

You can also query for one-time purchases using their store transaction identifier using our API here: https://www.revenuecat.com/docs/api-v2#tag/Purchase/operation/search-purchases. Refunded transactions will be indicated by “status”: "refunded"

Here’s an App Store guide for testing the handling of refunds for your app: https://developer.apple.com/documentation/storekit/testing-refund-requests

For Google Play, I’d recommend testing refunds by initiating one through the RevenueCat Dashboard

2 replies

chris_perriam
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • Answer
  • December 12, 2025

After the refund is processed (i.e. at the time we dispatch the CANCELLATION webhook), we’ll remove the consumable purchase from the non_subscriptions array in the response object for GET /v1/subscribers/{app_user_id}.

You can also query for one-time purchases using their store transaction identifier using our API here: https://www.revenuecat.com/docs/api-v2#tag/Purchase/operation/search-purchases. Refunded transactions will be indicated by “status”: "refunded"

Here’s an App Store guide for testing the handling of refunds for your app: https://developer.apple.com/documentation/storekit/testing-refund-requests

For Google Play, I’d recommend testing refunds by initiating one through the RevenueCat Dashboard


Forum|alt.badge.img
  • Author
  • New Member
  • December 13, 2025

Got it!

Thank you.

I did notice that if I use storekit, when purchase events come through the webhook, my calls to /GET subscribers/{app user id} return an empty user.  I tried adding the X-Is-Sandbox: true header but it still was empty.  I’m going to try using the full apple sandbox to see if theres a difference.

edit: it worked with the sandbox, just had to do the banking info/paid app agreement stuff on apple’s site and wait 24 hours