All articles
Deep dive8 min read

A Family Sharing refund reverses one payment but can leave five other people still using your app, and only your server can cut them off

A Family Sharing refund reverses one payment but can leave up to five family members still on your paid features. Apple sends a REVOKE and expects your server to end the access. Here is how family-shared refunds work and what one costs.

A single paper receipt at the center of a dining table set for six, standing in for how one payment behind a Family Sharing refund can cover six people

Key takeaways

  • Apple tags every family-shared transaction with an inAppOwnershipType of FAMILY_SHARED and every direct purchase with PURCHASED. The field appears only on non-consumable in-app purchases and auto-renewable subscriptions, the two product types Family Sharing supports.
  • A single family-shareable purchase can entitle up to six people, the buyer plus five family members, so one payment can drive six people's worth of the compute, API calls, storage, and payouts your product spends to deliver.
  • When Apple refunds the person who bought a shared purchase, it sends a REVOKE App Store Server Notification, and revoking the access, including every family-shared copy of it, is your server's job. Apple returns the money but does not end your entitlements for you.
  • A FAMILY_SHARED transaction in a REVOKE carries a revocationDate only when the revocation was caused by a refund to the buyer. If a family member simply leaves the group, the same REVOKE arrives with no revocationDate, per Apple's own engineers.
  • Apple delays a new family-shared purchase by about an hour before it reaches family members, on purpose, so the buyer has time to disable sharing before anyone else gets access.
  • Enabling Family Sharing on an in-app purchase in App Store Connect cannot be undone, so once a product is shareable it stays shareable, and your refund handling has to account for FAMILY_SHARED transactions from then on.
  • Consumables are never family-shared, so a family member never triggers a CONSUMPTION_REQUEST or shows up in your consumption reporting. Family Sharing refunds only ever involve non-consumables and auto-renewable subscriptions.

One purchase in a Family Sharing group can hand your app to six people. The person who paid is one of them. The other five never opened their wallet, and Apple still expects your app to work for all of them. That is the deal you opt into the moment you turn on Family Sharing for an in-app purchase. It is also why a Family Sharing refund is a different animal from an ordinary one. When the buyer gets their money back, the sale reverses for one account, but the access you granted to as many as five other people does not switch off on its own. Your server has to do that, and if it was written to watch only the buyer, it will not.

Here is the whole picture in one place. This walks through how Apple marks a shared purchase, the one field that tells the buyer apart from the family, exactly when Apple sends you a REVOKE and how to read it, the quiet detail that separates a refund from someone just leaving the family, and what a shared refund actually costs once you count the compute you already spent on people who never paid you.

What Family Sharing hands out, and to how many people

Turn on Family Sharing for a product and you change who your paying customer is. A family group on Apple can hold up to six people, one organizer and up to five members. When anyone in the group buys a family-shareable product, everyone in the group gets access to it. They do not pay. They do not appear in your revenue. They just show up in your app with a valid entitlement, because Apple issues each of them a transaction that points at the same purchase.

Only two product types are shareable, and consumables are not one of them

Family Sharing covers exactly two kinds of in-app purchase: non-consumables and auto-renewable subscriptions. Consumables, the coins-and-credits products, are never shared, which is why a family member never triggers a CONSUMPTION_REQUEST or shows up in your consumption reporting. If your app sells only consumables, Family Sharing refunds are not your problem. If you sell a lifetime unlock or a recurring plan, they are.

The field that tells a buyer from a beneficiary

Every transaction Apple issues carries an inAppOwnershipType. It has two values. PURCHASED means this account paid for the product and can manage it, including cancel it or request a refund. FAMILY_SHARED means this account is a family member who has access through someone else's purchase. Both entitle the person to use your product. Only one of them paid. The field is on the StoreKit transaction, the receipt, and the App Store Server API, so you can read it wherever you already check entitlements.

inAppOwnershipTypeWho it isCan manage or refund the purchaseDid they pay you
PURCHASEDThe account that bought the productYesYes
FAMILY_SHAREDA family member with shared accessNoNo

How a Family Sharing refund reaches your server

A refund on a shared purchase starts the same way any Apple refund does. The buyer, the only person who can, asks Apple for their money back. Apple decides. If Apple grants it, the buyer's purchase is reversed and Apple sends your server a REVOKE App Store Server Notification. Both V1 and V2 of the notification carry it. The REVOKE is your one signal that the entitlement behind it, and every family-shared copy of it, is now void.

Do not revoke one transaction, re-read the whole history

Apple's guidance on a REVOKE is blunt: do not treat it as a single toggle. When you get one, walk the customer's entire transaction history and rebuild their entitlements from scratch, because a person can hold more than one transaction that grants the same or a different product. Revoke only the transaction named in the notification and you can either strand a refunded family member with live access, or cut off someone who still has a valid second entitlement. Reestablish the full picture every time.

A hand lifting one brass key away from a ring of six identical keys, standing in for revoking a single family member's shared access after a Family Sharing refund

The one detail that separates a refund from a family breakup

Here is the trap that costs teams a debugging afternoon. A REVOKE can mean two very different things for a FAMILY_SHARED transaction, and the way you tell them apart is a field that is sometimes simply absent. When the buyer gets a refund, the FAMILY_SHARED transaction comes with a revocationDate. When a family member just leaves the group, the same kind of REVOKE arrives with no revocationDate at all. Apple's commerce engineers have said so directly on the developer forums. Either way you pull the access, but only the dated one is a refund, and only the refund is the one that also reversed a payment.

What a shared refund actually costs you

Walk the money, because this is where Family Sharing quietly changes the math. A normal refund reverses one sale. Apple returns the price to the buyer and hands its commission back, so the store side nets close to even. What never comes back is what you already spent delivering the product. With Family Sharing, you did not spend it once. You spent it for as many as six people. The buyer and up to five family members each ran your compute, called your APIs, filled your storage, and pulled any payouts you fund, all on the strength of a single payment.

Now the buyer refunds. The one payment reverses. Every family member's access should end at the same moment, because the thing that justified serving them, one paid purchase, is gone. If your server revokes only the PURCHASED transaction and leaves the FAMILY_SHARED ones live, up to five people keep your paid features for free, and you keep paying to serve them, with nothing left in the system to bill against. That is not a rounding error. It is five times the delivery cost of the sale you just gave back.

What you revoke on a shared refundWho loses accessWhat you keep paying for
The full transaction historyThe buyer and all family membersNothing, access ends for everyone
Only the PURCHASED transactionThe buyer aloneUp to five family members, still on your compute, APIs, storage, and payouts
Nothing, because you missed the REVOKENo oneThe buyer and up to five members, all free

Subscriptions make the leak recurring

For a non-consumable, an unrevoked family member is a one-time loss that runs until you notice. For an auto-renewable subscription it is worse, because the entitlement was already recurring. A refund on the subscription order should end sharing for the whole group, but a family member left live keeps the paid tier every billing period you fail to close them out. The fix is the same, reestablish entitlements from the full history on every REVOKE, but the cost of skipping it compounds.

Getting it right, and testing it before a real refund does

There is nothing exotic to build here. The whole job is to key access off the entitlement, not off the buyer, and to rebuild that access on every REVOKE.

  • Store access against the transaction and its inAppOwnershipType, not against a single buyer account, so a FAMILY_SHARED transaction grants access on its own and can be revoked on its own.
  • On any REVOKE notification, re-read the customer's full transaction history and recompute entitlements, rather than flipping off the one transaction named.
  • Treat a FAMILY_SHARED transaction with a revocationDate as a refund and end that member's access. Treat one without a revocationDate as a family departure and end it too.
  • Do not rush a brand-new shared purchase into service. Apple holds it for about an hour so the buyer can back out, so honor the transaction Apple actually issues rather than granting on the buy tap.
  • Rehearse it. Apple's Testing Family Sharing tooling lets you simulate a shared transaction, and a sandbox refund fires the same REVOKE your production server will get.

Do that and a Family Sharing refund becomes a non-event. The buyer gets their money, the whole group loses access in the same beat, and you stop paying to serve people who were never paying you.

Frequently asked questions

What is inAppOwnershipType and what are its values?
inAppOwnershipType is a field Apple puts on every in-app purchase transaction, with two values: PURCHASED for the account that bought the product, and FAMILY_SHARED for a family member who has access through someone else's purchase. It appears only on non-consumables and auto-renewable subscriptions, the product types Family Sharing supports.
Does Apple revoke family members' access automatically when the buyer gets a refund?
No. Apple reverses the buyer's payment and sends your server a REVOKE App Store Server Notification, but revoking the entitlement, including every family-shared copy of it, is your server's job. If you do not act on the REVOKE, family members keep access after the refund.
How do I tell a Family Sharing refund apart from a family member leaving the group?
Check for a revocationDate on the FAMILY_SHARED transaction. When the revocation is caused by a refund to the buyer, the transaction carries a revocationDate. When a family member simply leaves the group, the REVOKE arrives with no revocationDate. Both cases end the entitlement, but only the dated one reversed a payment.
How many people can use one family-shared purchase?
Up to six, the organizer plus as many as five family members. One payment can therefore entitle six people to your product, which is why a shared refund can strand up to five people on your paid features if you revoke only the buyer's transaction.
Can I turn off Family Sharing for an in-app purchase after enabling it?
No. Enabling Family Sharing on an in-app purchase in App Store Connect cannot be undone. Once a product is shareable it stays shareable, so your refund handling has to account for FAMILY_SHARED transactions from that point on.
Do consumable purchases get shared with the family?
No. Family Sharing covers only non-consumables and auto-renewable subscriptions. Consumables are never shared, so a family member never triggers a CONSUMPTION_REQUEST or appears in your consumption reporting.

Sources and further reading

RefundHalt

The refund autopilot for the App Store and Google Play

Keep reading

The next refund request is already on its way.

Set up RefundHalt in the time it takes to read another support email about a refund you didn't get to contest.