2026 App ServicesApp Store, Distribution & Marketing
WWDC26 · 15 min · App Services / App Store, Distribution & Marketing
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.
Watch at developer.apple.com ↗Chapters
Code shown on screen · 6 snippets
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",
...
} 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 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
} 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"
}
} 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"
}
} 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…"
}
} Resources
Related sessions
-
8 min -
13 min