refund

Learn about the REFUND App Store Server Notification V2. Fired when Apple refunds an in-app purchase or subscription transaction.

App Store Server Notifications V2Refunds
refund

The REFUND notification fires when Apple processes a refund for an in-app purchase or subscription transaction. This means money has been returned to the customer and you should revoke access to the purchased content or feature.


When does it fire?


This notification triggers after Apple's support team approves a customer's refund request. The refunded transaction is no longer valid and any associated entitlements should be removed.


Payload highlights


The signed transaction info includes the original transaction ID, the product ID, the refund date, and the refund amount. This lets you identify exactly which purchase was refunded and take appropriate action.


How Yeethook helps


Refunds require immediate action. You need to revoke access to prevent subscribers from getting content for free. Yeethook delivers refund notifications to Slack or Discord instantly, so your team can take action or verify that automated revocation worked correctly.


Common use cases


  • Revoke access to purchased content or premium features
  • Track refund rates by product and region
  • Detect refund abuse patterns (frequent refunders)
  • Monitor the financial impact of refunds on revenue

Example payload

The decoded body of a processed refund; Apple sends no subtype for this type. There is no status field here because a refund can target a consumable as easily as a subscription — the refund detail itself is revocationDate inside signedTransactionInfo.

{
  "notificationType": "REFUND",
  "notificationUUID": "5a2c9e73-08b6-4f41-9d3e-72c8a01fb6d5",
  "version": "2.0",
  "signedDate": 1789976207000,
  "data": {
    "appAppleId": 1234567890,
    "bundleId": "com.example.app",
    "bundleVersion": "142",
    "environment": "Production",
    "signedTransactionInfo": "eyJhbGciOiJFUzI1NiIsIng1YyI6..."
  }
}

What it looks like in Slack

Critical

Refund processed

Product
com.example.app.coins.500
Price
4.99 USD
Transaction
2000000856781234
Revocation type
Full refund
Environment
Production

Questions about refund

What is the difference between REFUND and REVOKE?

REFUND means Apple returned money for a transaction, so it carries a revocationDate and the customer is out of pocket by nothing. REVOKE removes an entitlement without any refund of that transaction, and in practice almost always means a Family Sharing change.

Does the payload say why the refund was granted?

Partly. revocationReason in the decoded transaction is 1 when Apple attributes the refund to an issue in your app and 0 when it was refunded for any other reason. That single bit is the only signal Apple gives about fault, and it is worth tracking as a quality metric.

Can Apple refund only part of a subscription period?

Yes. A prorated refund arrives with revocationType REFUND_PRORATED, which Yeethook shows as Revocation type: Prorated refund, and it adds a Revocation percentage row when revocationPercentage is present. Full refunds show 100 percent of the transaction reversed.

Will a CONSUMPTION_REQUEST always arrive first?

No. Apple only asks for consumption data when it wants your input on the decision, so plenty of refunds land with no warning at all. Never build a workflow that assumes you get a chance to respond before money moves.

Get this event in Slack or Discord

Connect Yeethook to receive refund notifications in your team's Slack or Discord channels.

Get Started Free