---
title: "What does the App Store notification RENEWAL_EXTENSION mean?"
description: "RENEWAL_EXTENSION reports a bulk renewal-date extension: subtype SUMMARY when it finished for all subscribers, FAILURE when one subscription failed. Log it and retry failures."
url: https://revenuedot.app/docs/notifications/apple-renewal-extension
---

# What does the App Store notification RENEWAL_EXTENSION mean?

The App Store notification RENEWAL_EXTENSION reports how a bulk renewal-date extension went: a SUMMARY when it finished, a FAILURE for one subscription that failed.

## Quick facts

| | |
|---|---|
| Notification | `notificationType` `RENEWAL_EXTENSION` |
| Where | App Store Server Notifications v2 (`responseBodyV2DecodedPayload`) |
| Sent by | The App Store server, to your notification URL |
| What Apple says | The App Store is attempting the renewal-date extension you asked for with Extend Subscription Renewal Dates for All Active Subscribers. SUMMARY means it finished for all eligible subscribers; FAILURE means it failed for one subscription. |

## What triggers it

- Your server called the bulk extension endpoint in the App Store Server API.
- Subtype `SUMMARY`: the work is done. The `summary` object holds the details instead of `data`.
- Subtype `FAILURE`: one subscription was not extended. See the `data` object.

## What your server should do

1. Verify the `signedPayload` with Apple's App Store Server Library (`SignedDataVerifier.verifyAndDecodeNotification`) before you act on anything in it.
2. On `SUMMARY`, compare the counts with what you expected and log them.
3. On `FAILURE`, note the subscription and try the single-subscription extension for it, or tell the customer.
4. Do not change any customer's access because of this type: individual successes arrive as `RENEWAL_EXTENDED`.
5. Answer HTTP 200 (any code from 200 to 206) once you have stored the notification. Apple retries other answers five times, at 1, 12, 24, 48 and 72 hours after the previous attempt, so make your handler safe to run twice (the payload carries a `notificationUUID`).

## Example

```javascript
// Run on the decoded payload, after you verified Apple's signature.
const notification = {"notificationType":"RENEWAL_EXTENSION","subtype":"SUMMARY","data":{"environment":"Sandbox","bundleId":"com.example.app"}};

function decide(n) {
  if (n.notificationType !== "RENEWAL_EXTENSION") return "ignore";
  return n.subtype === "SUMMARY" ? "log the summary counts" : "retry the failed subscription";
}

console.log(decide(notification));
```

*Run-checked: `npm run check:snippets` runs this snippet with Node and compares its output with `log the summary counts` (checked 2026-10-03).*

## How RevenueDot handles it

RevenueDot verifies Apple's signature, checks the bundle ID, stores the notification and answers 200. A purchase RevenueDot has not seen is applied only when the app's **Track new purchases from server-to-server notifications** setting is on. RevenueDot stores the notification and marks the app's notifications as received, and changes no purchase: this type is not in the list that updates purchases. Individual extensions arrive as `RENEWAL_EXTENDED`.

## Related

- [What does the App Store notification RENEWAL_EXTENDED mean?](https://revenuedot.app/docs/notifications/apple-renewal-extended.md)
- [What does the App Store notification TEST mean?](https://revenuedot.app/docs/notifications/apple-test.md)
- [What does the App Store notification DID_RENEW mean?](https://revenuedot.app/docs/notifications/apple-did-renew.md)
- [Which webhook events does RevenueDot send?](https://revenuedot.app/docs/api/webhook-events.md)
- [Set up App Store notifications in RevenueDot](https://revenuedot.app/docs/guides/app-store.md)

## Source

- [Apple: notificationType](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype)
- [Apple: Responding to App Store Server Notifications](https://developer.apple.com/documentation/appstoreservernotifications/responding-to-app-store-server-notifications)
- [Apple: app-store-server-library-node (SignedDataVerifier)](https://github.com/apple/app-store-server-library-node)
- [RevenueDot server: stores/apple/notifications.ts (how the notification is applied)](https://github.com/revenuedot/revenuedot/blob/main/apps/server/src/stores/apple/notifications.ts)
- [RevenueDot server: stores/apple/notifications.ts (how the notification is applied)](https://github.com/revenuedot/revenuedot/blob/main/apps/server/src/stores/apple/notifications.ts)
- [RevenueDot core: events.ts (how a change becomes a webhook event)](https://github.com/revenuedot/revenuedot/blob/main/packages/core/src/events.ts)

Checked: 2026-10-03
