What does the App Store notification RENEWAL_EXTENDED mean?

The App Store notification RENEWAL_EXTENDED means Apple moved one subscription's renewal date later, at your request.

Quick facts#

Notification notificationType RENEWAL_EXTENDED
Where App Store Server Notifications v2 (responseBodyV2DecodedPayload)
Sent by The App Store server, to your notification URL
What Apple says The App Store extended the renewal date of a specific subscription, after you called Extend a Subscription Renewal Date or Extend Subscription Renewal Dates for All Active Subscribers.

What triggers it#

  • Your server called Extend a Subscription Renewal Date in the App Store Server API for this customer.
  • Or your server called the bulk endpoint and this subscriber's extension succeeded.
  • The paid period is unchanged; only the end date moves.

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. Read the new expiresDate from signedTransactionInfo and extend access to it.
  3. Record why the extension was given, such as a service outage or a goodwill gesture.
  4. 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_EXTENDED","data":{"environment":"Sandbox","bundleId":"com.example.app"}};

function decide(n) {
  if (n.notificationType !== "RENEWAL_EXTENDED") return "ignore";
  return "extend access to the new expiresDate";
}

console.log(decide(notification));

Run-checked: npm run check:snippets runs this snippet with Node and compares its output with extend access (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. The new expiresDate is applied to the stored purchase. When the period start is unchanged and the end moves later, RevenueDot sends SUBSCRIPTION_EXTENDED.

Source#

Checked: 2026-10-03

Edit this page on GitHub ↗ View as Markdown Last updated