A non-consumable refund is the rare one you can actually take back, so a lifetime unlock costs you the price and nothing more
A non-consumable refund, on a lifetime unlock, an ad-removal upgrade, or a permanent pro tier, is the one refund you can genuinely reverse, because you can take the feature back. Here is what it costs on the App Store and Google Play, why Apple never asks you first, and how to make revoke stick.

Key takeaways
- A non-consumable is a one-time purchase the customer keeps forever, an ad removal, a lifetime pro unlock, a permanent feature. Unlike a consumable, nothing is burned at delivery, so a non-consumable refund is the one refund where you can hand back the money and take the feature back at the same time.
- That makes a non-consumable refund the cleanest loss you will face. You lose the sale price and the store reverses its own commission, but there is no compute, no API call, and no delivered output you paid for and cannot recover. The loss is bounded to the price.
- The catch is the price. A lifetime unlock is usually your highest single-priced product, often ten to thirty times a monthly subscription, so one non-consumable refund is a bigger single hit than almost any other refund on your account.
- On the App Store, Apple decides every non-consumable refund alone through reportaproblem.apple.com, and there is no CONSUMPTION_REQUEST for non-consumables. Apple sends that evidence request only for consumables and auto-renewable subscriptions, so on a non-consumable you get no window to argue and no evidence channel at all.
- Apple still tells you it happened. A REFUND App Store Server Notification fires for consumables, non-consumables, and non-renewing subscriptions, and the signed transaction carries a revocationDate and revocationReason. StoreKit also drops the product from Transaction.currentEntitlements, which is your cue to switch the feature off.
- On Google Play you can refund a non-consumable yourself from the Play Console or the orders.refund API, and passing revoke set to true terminates access immediately. Google's own 48-hour self-service refund runs without asking you, and an unacknowledged one-time purchase is auto-refunded and revoked after 3 days.
- The trap is gating access on the client. If a refunded non-consumable is still marked owned in a cached receipt or a client-only flag, the customer keeps the feature after the money is gone, so you lose the price and keep serving the unlock. Verify entitlement on your server against the revocation, every launch.
Sell a lifetime unlock, an ad-removal upgrade, or a permanent pro tier, and you are selling a non-consumable, the one purchase where a refund can genuinely reverse what you gave. A consumable refund takes back money you already spent delivering coins or credits. A subscription refund reverses access you were renting out anyway. A non-consumable refund is different, and in one narrow sense it is the kindest refund you will get: the customer keeps nothing. You give back the price, you take back the feature, and unlike a consumable there is no compute bill left sitting on your side of the ledger. That is the good news. The bad news is that a non-consumable is usually the most expensive single thing you sell, so the one refund you can cleanly reverse is also one of the largest.
What a non-consumable is, and why its refund behaves differently
The store sorts every purchase into a type, and the type decides what a refund can and cannot undo. A non-consumable sits at the opposite end from a consumable.
A non-consumable is bought once and kept forever
A non-consumable in-app purchase is a permanent entitlement. The customer buys it once and owns it for the life of the account: an ad removal, a lifetime pro tier, a full-version unlock, a permanent feature pack. Apple restores it across the customer's devices for free, and Google Play ties it to the account. There is no renewal and no expiry, so the value is not metered out over time and it is not consumed on redemption. It just switches on and stays on.
Nothing is spent at delivery, so a refund can reverse it cleanly
This is the whole reason a non-consumable refund is different. When you deliver a coin pack, the coins get spent and your compute bill is real and gone. When you deliver a non-consumable, you flip a flag. There is no per-use cost tied to the sale, so when the money reverses you can flip the flag back and be almost whole. The store even helps: on both platforms a refunded non-consumable is revoked, the customer loses access, and they cannot buy it again and refund it a second time.
What a non-consumable refund actually costs you
The number that shows up in your reports is the sale price coming back out. On a non-consumable, that number is close to the whole story, which is exactly what makes it different from a consumable, where the sale price is only the start of the loss.
| Cost | When you pay it | Comes back on a refund |
|---|---|---|
| The purchase price | At purchase | No, the full amount reverses to the customer |
| The store's commission on the sale | At purchase | Usually yes, the store reverses its own cut |
| Compute or API calls to deliver the unlock | There is none, you flip a flag | Nothing to recover, nothing lost |
| The feature itself | You granted access | Yes, revoke takes it back |
| A bank chargeback fee, if the dispute goes to the bank | After the charge | No, and on Google Play you now pay it too |
The loss is the price, and the price is the problem
Because there is no fulfillment cost to strand, a non-consumable refund costs you the sale price and little else. The trouble is scale. A monthly subscription refund hands back a few dollars. A lifetime unlock is frequently priced at 30, 60, or 120 dollars precisely because the customer pays once, so a single non-consumable refund can equal a year of subscription revenue from another user. You will see far fewer of them than subscription refunds, but each one lands harder, and a small cluster of lifetime refunds can outweigh a busy month of ordinary churn.

The App Store side, where Apple never asks you first
On the App Store you have no refund switch, and for a non-consumable you have no evidence channel either. Both of those are worth being precise about, because the second one surprises developers who assumed the consumption flow covered everything.
There is no CONSUMPTION_REQUEST for a non-consumable
Apple decides every refund itself, one request at a time, through reportaproblem.apple.com. For a consumable, and since 2024 for an auto-renewable subscription, Apple sends your server a CONSUMPTION_REQUEST and gives you 12 hours to send back consumption information. A non-consumable gets none of that. There is no consumption request, no 12-hour window, and no field to fill in, because Apple treats a permanent unlock as either owned or not, with nothing to measure. On a non-consumable refund you do not get a say. You get a notice.
The REFUND notification is how you learn it happened
What you do get is a REFUND App Store Server Notification. Apple sends it for consumables, non-consumables, and non-renewing subscriptions, and the signed transaction inside carries a revocationDate, the timestamp of the refund, and a revocationReason. StoreKit surfaces the same fact on device: the refunded product drops out of Transaction.currentEntitlements, and StoreKit calls your revoke-entitlements handler so the app can turn the feature off. Treat the notification as the trigger and the entitlement check as the source of truth. When revocationDate is set, the unlock is over.
The Google Play side, where you can refund but the fast path skips you
Google Play hands the developer more direct control than Apple does, though the refunds that hurt most still happen without you.
You can refund and revoke a non-consumable yourself
You can issue a non-consumable refund from the Play Console, or with the orders.refund method in the Play Developer API, on any order less than three years old. That call takes a revoke parameter, and setting it to true terminates access to the in-app item immediately. Google Play then treats the customer as no longer owning the product, uninstalls a refunded app, and blocks a repurchase-and-refund loop on the same item. This is the one place you have a clean lever: refund plus revoke actually takes a permanent unlock back.
The 48-hour and 3-day paths run without you
Two Google Play refunds on a non-consumable happen with no input from you. Within 48 hours of purchase, a customer can get a self-service refund straight from the store, and you are not asked. Separately, if your server never acknowledges the purchase within 3 days, Google Play automatically refunds it and revokes it, on the assumption that the customer paid and never received the goods. Both of these are decided before you weigh in, and the Voided Purchases API is how you find out after the fact so you can drop the entitlement.
What it means in money when a non-consumable becomes a chargeback
A refund is the cheap version of losing a non-consumable sale. A chargeback is the expensive version, and on a lifetime price the gap is wide.
The dispute path costs more and returns less
When a customer goes to their bank instead of the store, the sale comes back as a chargeback, and a chargeback is final. On the App Store you have no consumption window to defend a non-consumable, so there is nothing to submit. On Google Play, from August 3, 2026, a chargeback moves the purchase price less Play's service fee, plus the bank's chargeback fee, onto the developer, while Google keeps covering its own service fee. On a 90-dollar lifetime unlock, that turns a clean refund you could have absorbed into a larger, final loss with a bank fee stapled to it.
Keep the unhappy customer in the refund lane
The lesson is the same one every store nudges you toward: a refund reverses the sale and usually returns the commission, a chargeback does neither and adds a fee. A customer who can get a straightforward refund rarely calls the bank. On Google Play you can respond to a chargeback review through orders.reviewrefund within 24 hours, and Google offers a Review Refund API to share transaction details so it can challenge fraudulent disputes on your behalf. Use it, but do not rely on it. The cheaper move is to make the honest refund easy before the dispute ever starts.
How to lose less on non-consumable refunds
You cannot stop a store from refunding a permanent unlock. You can make sure that when it does, you actually take the feature back and you can see the pattern.
Verify entitlement on the server, every launch
Decide access from a server check against the current transaction state, not a cached receipt or a client flag written once at purchase. When a REFUND notification arrives, or the entitlement disappears, or revoke is set on Google Play, flip the feature off on your side. A refunded non-consumable that still works is the one case where the cleanest refund becomes a pure loss.
Watch lifetime and one-time products as their own cohort
Because non-consumable refunds are rare but large, they vanish inside a blended refund rate. Track them on their own, by product. A cluster on one lifetime tier usually points at something specific: a price that outran the value, a feature that broke after an update, or a store listing that promised more than the unlock delivers. Read non-consumable refunds against non-consumable sales and the cause is usually easy to name.
Acknowledge fast, and honor legitimate refunds cleanly
Acknowledge every purchase on time so you never trigger a 3-day auto-refund by accident, and when a refund is genuine, take the feature back without friction rather than leaving a soured customer to escalate to their bank. The refund is the smaller loss. The chargeback is the one that carries the fee.
The short version
A non-consumable refund is the rare refund you can actually reverse, because a permanent unlock costs you nothing to deliver and can be taken straight back. You lose the price, the store reverses its cut, and there is no stranded compute bill the way there is on a consumable. The complication is that a lifetime unlock is usually your priciest product, so each refund is a large single hit, Apple decides it alone with no consumption request to answer, and Google Play will refund it without you inside 48 hours or at the 3-day acknowledgement mark. Verify entitlement on your server, revoke cleanly, acknowledge fast, and keep the unhappy customer in the refund lane instead of the chargeback lane.
Frequently asked questions
- Can I refund a non-consumable in-app purchase myself?
- On Google Play, yes. You can refund a non-consumable from the Play Console or the orders.refund API on any order under three years old, and setting the revoke parameter to true terminates access immediately. On the App Store, no. Apple decides every refund through reportaproblem.apple.com, and for a non-consumable there is no CONSUMPTION_REQUEST, so you get no evidence window at all.
- Does Apple send a CONSUMPTION_REQUEST for a non-consumable refund?
- No. Apple sends a CONSUMPTION_REQUEST only for consumables and, since 2024, auto-renewable subscriptions. A non-consumable gets no consumption request and no 12-hour window, because Apple treats a permanent unlock as simply owned or not. You learn about the refund through the REFUND App Store Server Notification and the revocationDate on the transaction, not through a request to respond to.
- How do I know a customer's non-consumable was refunded?
- On the App Store, a REFUND notification fires and the signed transaction carries a revocationDate and revocationReason, while StoreKit drops the product from Transaction.currentEntitlements. On Google Play, the Voided Purchases API reports it and real-time notifications flag the cancellation. In both cases, check entitlement on your server and turn the feature off when the purchase is revoked.
- Do I get my money back cleanly on a non-consumable refund?
- More cleanly than any other refund type. The purchase price reverses to the customer and the store usually returns its commission, but because a non-consumable costs nothing to deliver, there is no compute or API bill stranded on your side the way there is with a consumable. Your loss is essentially the sale price, provided you actually revoke the feature.
- What happens if I do not acknowledge a non-consumable purchase on Google Play?
- Google Play automatically refunds and revokes the purchase if you do not acknowledge it within 3 days, on the assumption that the customer paid and never received the item. Call purchases.products.acknowledge from your server as soon as you verify the purchase so you never trigger a refund you did not intend.
Sources and further reading
- Apple Developer: notificationType (App Store Server Notifications V2)
- Apple Developer: Handling refund notifications
- Apple: Request a refund at reportaproblem.apple.com
- Android Developers: One-time product lifecycle (acknowledge, 3-day auto-refund)
- Google Play Developer API: Method orders.refund (revoke parameter)
- Google Play Help: Apps, games, and in-app purchase refund policies
- Google Play Developer: Voided Purchases API
- Google Play Console Help: Updates to refund protection and chargeback cost responsibility (August 3, 2026)
RefundHalt
The refund autopilot for the App Store and Google Play
Keep reading
Unauthorized in-app purchases by children get refunded to the parent almost every time, and you carry the cost
When a child buys a coin pack on a parent's phone, both Apple and Google refund it and neither one asks you first. Regulators built it that way. Here is how these unauthorized in-app purchase refunds work on each store, the 15-minute window where the money goes, and what one actually costs you.
You never owned the app refund tax, so a refund costs you your share, not the total on the receipt
Refund an in-app purchase and the receipt shows the price plus tax going back. The tax was never your money. Apple and Google collect and remit it as the merchant of record, then reverse it on a refund without touching your share. Here is what a refund actually costs, and the one setup where the tax becomes yours.