What does the App Store notification PRICE_INCREASE mean?
The App Store notification PRICE_INCREASE means the system informed a customer of a subscription price increase.
Quick facts#
| Notification | notificationType PRICE_INCREASE |
| Where | App Store Server Notifications v2 (responseBodyV2DecodedPayload) |
| Sent by | The App Store server, to your notification URL |
| What Apple says | The system informed the customer of an auto-renewable subscription price increase. With consent required, PENDING means no answer yet and ACCEPTED means consent; with no consent required, the subtype is ACCEPTED. |
What triggers it#
- Subtype
PENDING: the increase needs the customer's consent and they have not responded. - Subtype
ACCEPTED: the customer consented, or the increase did not need consent and the system just notified them. - If the customer never consents, the subscription ends with
EXPIREDand subtypePRICE_INCREASE.
What your server should do#
- Verify the
signedPayloadwith Apple's App Store Server Library (SignedDataVerifier.verifyAndDecodeNotification) before you act on anything in it. - On
PENDING, remind the customer in your app that the new price needs their consent before the renewal. - On
ACCEPTED, record the new price for reporting. - Expect
EXPIREDwith subtypePRICE_INCREASEfor customers who ignore it, and plan a win-back. - 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":"PRICE_INCREASE","subtype":"PENDING","data":{"environment":"Sandbox","bundleId":"com.example.app"}};
function decide(n) {
if (n.notificationType !== "PRICE_INCREASE") return "ignore";
return n.subtype === "PENDING" ? "remind the customer to accept the new price" : "record the accepted price";
}
console.log(decide(notification));Run-checked: npm run check:snippets runs this snippet with Node and compares its output with remind the customer (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 subtype sets the stored consent state (PENDING or ACCEPTED). A change into pending gives a PRICE_INCREASE_CONSENT_REQUIRED event and a change into accepted gives PRICE_INCREASE_CONSENT_APPROVED.
Related#
- What does the App Store notification EXPIRED mean?
- What does the App Store notification DID_CHANGE_RENEWAL_STATUS mean?
- What does the App Store notification DID_RENEW mean?
- Which webhook events does RevenueDot send?
- Set up App Store notifications in RevenueDot
Source#
- Apple: notificationType
- Apple: Responding to App Store Server Notifications
- Apple: app-store-server-library-node (SignedDataVerifier)
- RevenueDot server: stores/apple/notifications.ts (how the notification is applied)
- RevenueDot server: stores/apple/map.ts (how the transaction becomes a stored purchase)
- RevenueDot core: events.ts (how a change becomes a webhook event)
Checked: 2026-10-03