-
Explore Retention Messaging in App Store Connect
Discover how you can use the power of Retention Messaging to reach subscribers before they cancel. Learn how to configure this feature in App Store Connect and add subscription offers, as well as leverage the Retention Messaging API to deliver real-time messaging and alternative options that encourage people to stay subscribed to your app or game.
Chapters
- 0:00 - Introduction
- 2:38 - Retention Messaging in App Store Connect
- 6:38 - Real-time Retention Messaging
- 11:46 - Retention Messaging comparison
Resources
- Interest form: Real-time Retention Messaging
- Supporting monthly subscriptions with a 12-month commitment
- Retention Messaging API
Related Videos
WWDC26
-
Search this video…
Selling auto-renewable subscriptions on the App Store can be rewarding. It can also be challenging to reach customers at critical moments, such as when they're considering canceling a subscription. That moment is an ideal time to remind your customers of the value they'll receive from your subscription service. I'm Tori, an engineer on the App Store server team, and in this video, I'll share how you can retain subscribers with Retention Messaging in App Store Connect, a new feature built to help you connect with your customers. First, I'll share an overview of Retention Messaging, and how to set it up in App Store Connect.
Then, I'll discuss how real-time Retention Messaging works alongside Retention Messaging in App Store Connect. Here in my Exercise app is an example of a customer canceling an active subscription. The cancellation page displays messaging to the customer with the impact of canceling.
For this subscription, the App Store informs the customer that their family will no longer have access to this subscription if they proceed with the cancellation. Here is an opportunity to provide messaging or offers to the customer. Retention Messaging enables you to do just that.
Retention Messaging helps you add value to the cancellation flow by showing a compelling value proposition message to your customers when they are considering canceling their subscription. You can use Retention Messaging to remind customers of the benefits of your subscription or provide them an offer to entice them to remain subscribed. Retention Messaging supports three different views: a message only, a message and an image, or a message and an offer.
You can see what these three different views look like with my Exercise app. Here, the message is prominently displayed to the customer. I can add an image to add some visual appeal. Or I can offer the customer three months free for their current subscription, Yoga+ to provide an extra incentive to stay subscribed. Save rate is the % of subscribers who keep their subscription after reaching the cancel confirmation page in manage subscriptions. Subscriptions that have adopted Retention Messaging experience an average save rate increase of +1.4 points equivalent to an 82% increase, with promotional offer messages achieving the highest observed save rate at +5.5 points equivalent to a 223% increase. Note that we have observed varying results across developers. I'll show you how to set up Retention Messaging in App Store Connect.
With Retention Messaging in App Store Connect, you can configure retention messages for your app, which you can map to any of your subscriptions. You can select an image to provide alongside a message from Asset Library. You can configure retention offers to provide to your customer alongside a message. And, App Store Connect API will also support Retention Messaging, allowing you to set up retention messages and retention offers through the API.
To learn more about Asset Library, check out the session "Enhance your presence on the App Store" from WWDC26. Let's review how this works.
In App Store Connect, on the Subscriptions page, a new area prompts me to get started with Retention Messaging.
When I tap the Get Started button... a modal appears for me to name the retention message. This message is for my yoga subscriptions, so I'll call this Yoga Message, then tap the Create button.
A new view shows where I can edit the message text, the image and applicable subscriptions and offers on the left. On the right is a live preview of my retention message which updates as I edit.
A retention message must always contain message text, but the image and offer are both optional. I'll continue creating a retention message for the Yoga+ subscription, starting with the text. I will create a message in English, but you can select other localizations as well.
I'll type "Launching Next Month: Guided Yoga into the text box". Wow! The preview updated right away with the title.
I'll keep going and add a description, Don't miss out on guided yoga classes, new metrics targeted for yoga, and more. Again, notice how the preview on the right immediately updates.
Now I want to see how this looks with an image. I already have an image in my Asset Library, so I'll choose that.
Our preview is looking really good now! Now I need to select the Yoga+ subscription so that all my customers with the Yoga+ subscription see this message. The Yoga+ subscription is selected now. You can also select other subscriptions as a retention message can be associated with many subscriptions.
Finally, I want to add some offer options for my eligible customers. I have some retention offers already set up, so I'll select those. Here are all the offers that could appear with this message along with their eligibility and availability.
The App Store will automatically choose the best offer for eligible customers, so you can select multiple offers for a single subscription with confidence. It's also important to note that when the customer is eligible for an offer, the image will be replaced by an offer.
If you want to see how other offers appear, you can select a different offer from the offer dropdown. You can also select no offer from the dropdown to see what the preview looks like without an offer.
Let's pivot to testing. Testing in sandbox verifies your subscription implementation before proceeding to production. I'm happy to share that retention messages are fully testable in sandbox. You can test retention messages when canceling your subscription in sandbox.
If you configured a retention offer, you can also verify offer related fields are properly configured in the signed transaction or renewal info.
We are also introducing retention offers, a new offer type for retention messages. The signed transaction and renewal info are updated with a new offerType value of 5 to indicate a retention offer was redeemed. Other offer related fields such as: offer identifier, offer discount type, and offer period will also appear as expected. By setting up Retention Messaging in App Store Connect, you are taking a significant step toward retaining your subscribers at a critical moment in the subscription lifecycle. If you want to more directly interact with your customer when they are about to cancel their subscription, you can take this one step further with real-time Retention Messaging.
With real-time Retention Messaging, you set up an endpoint to provide a real-time message preference in response to a server-to-server HTTP request from the App Store. With the Retention Messaging API, you can configure message and image pairs to show to customers in the cancellation flow. When you receive a real-time call from the App Store, you can tell the App Store which of these messages you want to show to the customer, or when Retention Messaging in App Store Connect is configured, you can also indicate one of the messages from App Store Connect as your preference.
I can create the same views for the Yoga+ subscription using real-time Retention Messaging as I can when using retention messages in App Store Connect.
However, real-time Retention Messaging also supports a message with a switch plan format, so you can offer your customer a different plan within the same subscription group as an alternative to canceling. For the Yoga+ subscription, I chose to offer an annual subscription as a switch plan.
Real-time Retention Messaging is powered by the Retention Messaging API, a server-to-server driven set of endpoints for managing your messages and images. Using the Retention Messaging API in both sandbox and production, I can configure the URL for the Exercise App's endpoint, set up messages for the exercise app, choose default messages for each subscription in the exercise app, and upload and manage the Exercise App's images.
In the Sandbox environment only, the Retention Messaging API supports Performance testing, and provides endpoints to initiate a performanceTest and check results. Passing a performance test is required before using real-time Retention Messaging in production.
When the App Store sends a request for real-time Retention Messaging, we will send the originalTransactionId to help identify the subscription, the customer's locale to identify the desired localization, plus a requestIdentifier for tracking, as well as other information. When responding to a real-time request, you can choose one of three response formats.
Respond with a message to show a message or message with an image by providing a messageIdentifier. I chose a messageIdentifier that indicates a message about my yoga subscription that is paired with a corresponding image. Respond with an alternateProduct to offer the customer a switch plan in the same subscription group by providing a messageIdentifier and productId. I chose to offer an annual tier of Yoga+ as a switch plan.
Or respond with a promotional offer to give the customer an offer by providing a messageIdentifier and a promotionalOfferSignature. I chose to provide my promotionalOffer for 3 months free of Yoga+. More information on what to provide in each of these scenarios, other supported scenarios, and the rest of the API can be found in our documentation linked in this session's resources.
Real-time Retention Messaging requires a fast, responsive server. To ensure a great customer experience, you'll need to pass a performance test in sandbox before going live to production. That said, your server may not always respond in time. If it doesn't, the App Store will display fallback messaging to the customer.
Real-time Retention Messaging always prioritizes your real-time response. If that's unavailable or malformed, the App Store will first fall back to your App Store Connect Retention Messaging preference, including any eligible offers. If App Store Connect messaging is not configured for your subscription, the App Store will then fallback to default messaging configured with the Retention Messaging API. Get started in sandbox for setting up real-time Retention Messaging. First, set up all your test messages and images in sandbox. When that is completed, set up your endpoint to begin receiving requests when a tester tries to cancel their subscription.
After you are satisfied with your testing in sandbox, start a performance test.
When your performance test passes, then set up messages and images in production followed by your production endpoint.
At this point you are ready to begin responding to requests from the App Store. Remember to always keep your production messages and images up to date.
IOS 26.5 introduced monthly subscriptions with a 12-month commitment. For this new billing plan type the real-time Retention Messaging API is also updated to support this plan type as a switch plan. Simply provide the billingPlanType field with your alternateProduct selection in your response to the App Store to offer this plan to your customers using Retention Messaging. For more information on monthly subscriptions with a 12-month commitment, check out the WWDC26 session "What's new in Apple In-App Purchase." Real-time Retention Messaging is a powerful tool and it performs best with a fast, responsive server. Let's compare it with Retention Messaging in App Store Connect to help you find the right fit for your use case.
The key difference between Retention Messaging in App Store Connect and real-time Retention Messaging is decisioning. Once Retention Messaging is set up for your subscription in App Store Connect, the App Store will show the message and any applicable offer to the customer without any further interaction with you. With real-time Retention Messaging, you choose what you want to show to each customer in real time.
Both Retention Messaging in App Store Connect and real-time Retention Messaging allow you to configure messages and images though the mechanisms for doing that differ. With Retention Messaging in App Store Connect, this can be done through App Store Connect or the App Store Connect API. For real-time Retention Messaging, this must be done server-to-server through the Retention Messaging API.
Both frameworks also support offers, with App Store Connect requiring specific retention offers linked to your subscriptions, while real-time Retention Messaging allows you to leverage promotional offers so you can choose the offer you want to deliver in real time. A signature is still required for promotional offers used in retention messages.
App Store Connect Retention Messaging supports three views: message, image or offer. Real-time Retention Messaging supports those same three views, and also supports a switch plan view.
Retention Messaging in App Store Connect is an ideal choice if you don't have a server, or if you want to be able to configure your retention messages and then let the App Store choose what to display to the customer. App Store Connect messages are tied to specific subscriptions.
If you have a server and want to choose which message is shown to each customer, consider real-time Retention Messaging. Also consider real-time Retention Messaging if you want to take more control of offers and eligibility using promotional offers.
Real-time Retention Messaging builds on top of Retention Messaging in App Store Connect. You should always consider setting up Retention Messaging in App Store Connect even when using real-time Retention Messaging for fallback messaging. Retention Messaging in App Store Connect is a wonderful way to provide value to your customers in the subscription cancellation flow and is open to all.
Real-time Retention Messaging builds on top off Retention Messaging in App Store Connect. If you are interested in real-time Retention Messaging, please fill out the interest form linked in this session's Resources to request access.
Let's recap what I covered and how you can make the most of Retention Messaging.
Consider the types of Retention Messaging you want to set up in App Store Connect. To go further, explore the real-time Retention Messaging API documentation to determine if it's a good fit for your app. If you wish to pursue real-time Retention Messaging, submit the interest form to request access.
Thanks for joining me! I've loved teaching you about Retention Messaging, and I look forward to have you use retention messages in your app.
-
-
6:08 - Signed transaction updates
// Signed transaction updates { "bundleId": "com.example.app", "productId": "Yoga_summer_2026", "type": "Auto-Renewable Subscription", "transactionReason": "RENEWAL", "inAppOwnershipType": "PURCHASED", "quantity": 1, "price": 0, "currency": "USD", "offerType": 5, // retention offer "offerIdentifier": "Yoga_2026_cancel_free_3m", "offerDiscountType": "FREE_TRIAL", "offerPeriod": "P3M", "transactionId": "1000098916194" "originalTransactionId": "1000011859217", "appAccountToken": "23a91ca7-06f3-425f-bff6-820904b510a9", ... } -
7:50 - Retention Messaging API
// Retention Messaging API: https://api.storekit.apple.com/inApps/v1/messaging // URL configuration PUT /realtime/url GET /realtime/url DELETE /realtime/url // Message configuration PUT /message/{messageIdentifier} DELETE /message/{messageIdentifier} GET /message/list PUT /default/{productId}/{locale} DELETE /default/{productId}/{locale} GET /default/{productId}/{locale} // Image configuration PUT /image/{imageIdentifier} DELETE /image/{imageIdentifier} GET /image/list // Performance testing - Sandbox only POST /performanceTest // initiate test GET /performanceTest/result/{requestId} // get results -
8:34 - Real-time requests
// Real-time requests // Request from the App Store { "originalTransactionId": "123456789", "appAppleId": 6745974591, "productId": "Yoga_summer_2026", "userLocale": "en-US", "requestIdentifier": "c03248af-dd76-4e9b-9c1e-4489cd19a768", "environment": "Production", // or Sandbox "signedDate": 1780920000000 } -
8:57 - Real-time requests with message
// Real-time requests // Request from the App Store { "originalTransactionId": "123456789", "appAppleId": 6745974591, "productId": "Yoga_summer_2026", "userLocale": "en-US", "requestIdentifier": "c03248af-dd76-4e9b-9c1e-4489cd19a768", "environment": "Production", // or Sandbox "signedDate": 1780920000000 } // Your response { "message": { "messageIdentifier": "551ee7c0-c097-418e-9dd5-2a98533a7390" } } -
9:11 - Real-time request with alternate product
// Real-time requests // Request from the App Store { "originalTransactionId": "123456789", "appAppleId": 6745974591, "productId": "Yoga_summer_2026", "userLocale": "en-US", "requestIdentifier": "c03248af-dd76-4e9b-9c1e-4489cd19a768", "environment": "Production", // or Sandbox "signedDate": 1780920000000 } // Your response { "alternateProduct": { "messageIdentifier": "ed7f25fc-5741-46a3-8502-062e0fb8afd0", "productId": "Yoga_summer_2026_annual" } } -
9:24 - Real-time request with promotional offer
// Real-time requests // Request from the App Store { "originalTransactionId": "123456789", "appAppleId": 6745974591, "productId": "Yoga_summer_2026", "userLocale": "en-US", "requestIdentifier": "c03248af-dd76-4e9b-9c1e-4489cd19a768", "environment": "Production", // or Sandbox "signedDate": 1780920000000 } // Your response { "promotionalOffer": { "messageIdentifier": "80135e2b-ae15-4ec4-8c5c-9ecc8045c0dc", "promotionalOfferSignatureV2": "eyJhbGciOiJFUzI…" } }
-
-
- 0:00 - Introduction
Retention Messaging allows you to reach your subscribers when they are about to cancel you subscription, offering you an opportunity to save your subscribers at this critical moment.
- 2:38 - Retention Messaging in App Store Connect
Retention Messaging in App Store Connect allows you to set up retention messages that are automatically delivered to your customers when they are about to cancel a subscription. You can use Asset Library and retention offers to add value to your retention messages.
- 6:38 - Real-time Retention Messaging
Use real-time Retention Messaging and the Retention Messaging API to reach out to your customers in real time when they are about to cancel their subscriptions. The App Store will make a server-to-server call to your configured endpoint to get your real-time message preference.
- 11:46 - Retention Messaging comparison
Compare Retention Messaging in App Store Connect and real-time Retention Messaging to determine which is the right fit for your app.