View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Videos

Open Menu Close Menu
  • Collections
  • All Videos
  • About

Back to WWDC26

  • About
  • Summary
  • Transcript
  • Code
  • What’s new in Apple In-App Purchase

    Discover how monthly subscriptions with a 12-month commitment give people a more affordable option to pay for your subscription and secure a longer-term commitment. Explore how to configure and test this new payment option using App Store Connect, StoreKit APIs, Xcode testing, and more. Plus, learn about improvements to offer code redemption APIs, and enhancements to the App Review submission experience.

    Chapters

    • 0:01 - Introduction
    • 0:51 - Overview of monthly subscriptions with a 12-month commitment
    • 1:42 - Set up in App Store Connect
    • 2:28 - Merchandise with StoreKit
    • 6:55 - Monitor subscriptions with App Store Server APIs
    • 8:50 - Bundles and Suites
    • 9:26 - Offer code redemption
    • 10:35 - Enhanced submission experience
    • 12:38 - Next steps

    Resources

    • In-App Purchase types
    • Managing the life cycle of monthly subscriptions with a 12-month commitment
    • Supporting monthly subscriptions with a 12-month commitment
    • App Store Server Notifications V2
    • Supporting offer codes in your app
    • Implementing a store in your app using the StoreKit API
      • HD Video
      • SD Video

    Related Videos

    WWDC26

    • Explore Retention Messaging in App Store Connect

    WWDC24

    • Implement App Store Offers

    WWDC23

    • Meet StoreKit for SwiftUI
    • What’s new in StoreKit 2 and StoreKit Testing in Xcode

    WWDC22

    • What's new in App Store Connect
  • Search this video…

    Hello, I'm Sam, and I'm an engineer on the StoreKit team.

    The App Store provides a safe and trusted marketplace for people around the world to discover your apps. By leveraging the App Store APIs, you can offer digital goods and services to customers, while letting the App Store commerce platform facilitate transactions and end-to-end payment processing.

    I'll cover new features in this session to help you merchandise products and grow your apps business. First, I'll share how to expand pricing options for your subscription products, Then, I'll discuss updates coming to the offer code redemption API, And finally, I'll review the enhanced App Store Connect submission experience coming to In-App Purchases. I'll start with updates to subscription pricing. iOS 26.5 introduced monthly subscriptions with a 12-month commitment. With this new pricing capability, you can offer customers an option to pay monthly for annual subscriptions.

    Billing plans can be added to both new and existing, one-year, auto-renewable subscriptions for your app in App Store Connect. By providing customers with the option to pay upfront or monthly, you can reach a larger customer base and allow the customer to choose which billing plan best suits their needs. Once you compile your app against the 26.5 SDK, customers in available markets can subscribe to the new billing plan inside your app on devices running iOS, iPadOS, macOS, tvOS, or visionOS 26.4. I'll show you how it works by setting up a new billing plan for the SKDemo app. This app uses StoreKit to merchandise and sell In-App Purchase products. You can download the sample code project in the Resources for this session to follow along. Here, I have the SKDemo app set up in App Store Connect, and I navigated to the Subscriptions section. I want to offer customers more affordable options for the SKDemo+ subscription, so I'll select a product with a one-year duration.

    Then, under monthly with a 12-month commitment availability, I'll choose Set Up Availability. And then follow the steps to configure the billing plan. Once created, subscription offers can be configured for each billing plan type. For example, I added a free trial only for the customers who subscribe to a 12-month commitment.

    Now that I have new subscription pricing configured for SKDemo in App Store Connect, I can merchandise the new payment option to customers with StoreKit.

    PricingTerms is a new property available on SubscriptionInfo for merchandising billing plan information. The PricingTerms array lists all available billing plans for a given product.

    Every auto-renewable subscription carries at least one billing plan in this array with a default billingPlanType of .upFront. Because I configured a monthly subscription with a 12-month commitment for SKDemo+, a second object is returned in the PricingTerms array. This billing plan uses a billingPlanType of .monthly, which only applies to monthly subscriptions with a 12-month commitment.

    To merchandise pricing terms in my app, I'll use StoreKit views. The StoreKit views APIs handle the work of loading product metadata from the App Store and adjusting layout, so your store automatically adapts to feel at home across all platforms. I'll show you how it works in code. I'll start by adding the new SwiftUI view modifier, .preferredSubscriptionPricingTerms and attach it to my existing SubscriptionStoreView. I'll then filter for the .pricingTerms with a .monthly .billingPlanType.

    And now, my subscription store is updated and ready to merchandise the monthly subscription with a 12-month commitment. If you want to customize the SubscriptionStoreView further, check out "Meet StoreKit for SwiftUI" from WWDC23, and learn how StoreKit views can match your app with custom icons, backgrounds, and any other changes.

    To merchandise the commitment plan in custom store UI in your app, fetch products with the Product API. And filter for .pricingTerms with a .monthly .billingPlanType.

    Then, obtain the monthly and totalCommitmentPrice and display in the UI. Note, that billing plan metadata is only returned when available in the customer's storefront.

    To make the purchase, pass the new .billingPlanType purchase option and handle the result.

    Before a customer subscribes to a commitment plan for the first time, new messaging is included with a disclosure sheet. The App Store automatically presents this sheet, and it's displayed once per Apple Account. The sheet includes information about the number of payments required to fulfill the commitment, along with cancellation guidance. When a subscription is active, the App Store also automatically provides new UI for customers to manage their monthly subscription with a 12-month commitment. Here, customers can see all available plans and check the number of remaining payments along with when their billing commitment renews.

    You can present the .manageSubscriptionsSheet directly inside your app using the .manageSubscriptionsSheet API in SwiftUI. Or in UIKit call the showManageSubscriptions API.

    To retrieve the active subscription information in your app, you can use new fields on Transaction that provide billing plan-specific metadata.

    For Transactions with an .upfront billingPlanType, commitmentInfo is nil. For transactions with a .monthly billingPlanType, commitmentInfo returns the progress, price and expiration for the 12-month commitment.

    You can use these fields from the latest transaction to check customer entitlements or build your own commitment progress indicator. Always use the latest transaction to get an accurate expirationDate.

    Similarly, you can retrieve the renewalBillingPlanType and commitmentInfo on RenewalInfo, for information on the renewal of the overall commitment. These new fields are available starting with OS 26.4.

    Once you've added logic to merchandise and unlock content for the new billing plan, you can start testing with StoreKit Testing in Xcode. Starting with Xcode 26.5, open your StoreKit configuration file and select a one-year, auto-renewable subscription. Then, using the new Billing Plan picker, choose Monthly with a 12-month commitment to create a billing plan.

    This creates new fields to configure pricing for the monthly subscription with a 12-month commitment. Similar to App Store Connect, offers can be uniquely created for each billing plan type, here in Xcode.

    Once configured, test your purchase flow with the transaction manager and verify commitmentInfo in the Transaction inspector.

    To learn more about best practices and setting up StoreKit Testing in Xcode, check out "What's new in Storekit 2 and Storekit Testing in Xcode" from WWDC23. If your app uses the App Store Server APIs or App Store Server Notifications V2, you can leverage new capabilities for customers who subscribe to a monthly subscription with a 12-month commitment. There are new fields available in the signed transaction and renewal info objects that provide additional information about the commitment plan. Subscription notifications continue to provide updates on the subscription lifecycle, such as monthly renewals, throughout the 12-month commitment.

    The Retention Messaging API also supports this new payment option for auto-renewable subscriptions. Check out our WWDC26 session "Explore Retention Messaging in App Store Connect" to learn how this server-to-server API can help with your customer retention strategy.

    I'll now show you a transaction payload example from the server for one billing period purchase of a 12-month commitment.

    This decoded JWSTransaction includes new fields that correspond to the ones I covered earlier in StoreKit.

    Use these fields to detect billing period purchases and understand where they live in the context of the overall commitment.

    The signed renewal info object contains similar fields which reflect the renewal preferences of the customer after the current commitment ends. Accordingly, they are only present in the renewal info when the subscription is currently in a commitment. In this example, the customer changed their subscription to renew into a different BILLED_UPFRONT plan once their commitment completes.

    To learn more about handling renewals and other events throughout the 12-month commitment, check out the developer documentation for "Managing the life cycle of monthly subscriptions with a 12-month commitment." In addition to new pricing capabilities available on annual subscriptions, I'm excited to share that there is another new feature to expand your subscription offerings. Bundles and Suites. Offering subscription Bundles and Suites is another way you can provide customers with more value in their subscriptions across apps.

    Let's review the difference between Bundles and Suites. A Bundle is a group of subscriptions which can be purchased individually but are sold together in a single purchase and offered at a better price than purchasing all of the subscriptions individually.

    A Suite is a group of subscriptions which only exist in the context of the Suite. These subscriptions cannot be purchased individually, but together typically provide service to a related set of apps. You can start testing the API for Bundles and Suites in Xcode 27, and more details on this program are coming later in 2026.

    Shifting gears to offer codes. Offer codes can be added to a consumable, non-consumable, auto-renewable subscription, or non-renewing subscription product and allow you to provide free or discounted In-App Purchases to customers for a specific duration.

    To learn how to configure offer codes in App Store Connect, check out "Implement App Store Offers" from WWDC24.

    Customers can redeem offer codes directly within your app, when you present this sheet using the OfferCodeRedemption API. Similar to creating a purchase, the API now returns a verificationResult when the redemption completes. The API also accepts a set of RedeemOption values that configure the code redemption.

    If the redemption succeeds, you receive a transaction object in the verificationResult. If the redemption fails, you receive an error that describes why the redemption failed. A UIKit variation of the updated redemption API is available as well using presentOfferCodeRedeemSheet.

    You can now test redeeming offer codes in Xcode 27 with the new redemption API on all applicable product types.

    When you're ready to submit an app to the App Store, you can utilize the enhanced submission experience for In-App Purchases in App Store Connect.

    This includes the ability to group multiple products as review items into a single App Review submission.

    In-App Purchase products can now be combined with other review items including in-app events, custom product pages, and product page optimizations.

    After submission, you can check the status from App Review in a centralized view for all review items. These enhancements help keep your submission workflow organized and consistent across all review item types by unifying the submission process.

    I'll go through an example of the enhanced submission flow using the SKDemo app in App Store Connect. When I have an In-App Purchase product ready to submit to App Review, I can add to an in-draft submission with the Add for Review drop-down. Then, I can view all of the review items in a submission by clicking on the in-progress draft.

    To add a large group of products to a submission, I'll go to my list of In-App Purchase products and select each one that I would like reviewed together.

    Then, I'll click Add for Review and select the in-progress submission.

    In addition to the App Store Connect website, the enhanced submission experience is coming to the App Store Connect API. reviewSubmissions is expanding to support In-App Purchase, subscription, and subscription group resources.

    The reviewSubmissions API collection will enable you to automate your tasks for all review items through a single interface.

    The existing resources for In-App Purchase, subscription, and subscription group will be deprecated in favor of the reviewSubmission and reviewSubmissionItems resources, so start migrating today.

    Check out "What's New in App Store Connect" from WWDC22 for a deep dive on the mechanics of review items and submitting to App Review.

    These new features for In-App Purchases equip you with more ways to grow your customer base and provide great value to customers. Before we conclude, here are some next steps to get you on your way. Start by adding new billing plans to offer customers the flexibility of a monthly subscription while still securing a long-term commitment for your annual subscription products. Update offer code redemption call sites across your app to take advantage of the extended redemption API.

    Begin testing these new features today in Xcode 27 and sandbox. When you're ready, submit your updated In-App Purchase products with the enhanced App Review experience.

    Thank you for joining me and being part of the Apple Developer community. I hope these features will drive your In-App Purchases to reach even more people, so you can focus on creating great apps and games that people will love.

    • 3:29 - Merchandise pricing terms with StoreKit views

      // Merchandise pricing terms with StoreKit views
      
      import StoreKit
      import SwiftUI
      
      struct SubscriptionStore: View {
          var body: some View {
              SubscriptionStoreView(groupID: "3F19ED53") {
                  // Custom marketing content
              }
              .preferredSubscriptionPricingTerms {_, subscriptionInfo in
                  subscriptionInfo.pricingTerms.first {
                      $0.billingPlanType == .monthly
                  }
              }
          }
      }
    • 4:02 - Get subscription pricing terms and make a purchase

      // Get subscription pricing terms and make a purchase
      
      import StoreKit
      
      var product: Product?
      // Fetch and assign product
      
      // Get the monthly billing plan's pricing terms for merchandising
      let pricingTerms = product?.subscription?.pricingTerms
        .first(where: {$0.billingPlanType == .monthly })
      if let pricingTerms {
        let monthlyPrice = pricingTerms.billingDisplayPrice
        let totalCommitmentPrice = pricingTerms.commitmentInfo.price
        // Display both monthly and total commitment price to the customer
      }
      
      let result = try? await product?.purchase(options: [.billingPlanType(.monthly)])
      switch result {
        // Verify the transaction, give the customer access to
        // the purchased content, and then finish the transaction
      }
    • 5:05 - Sheet to manage subscriptions by subscriptionGroupID

      // Sheet to manage subscriptions by subscriptionGroupID
      
      import SwiftUI
      import StoreKit
      
      struct ManageSubscriptionsButton: View {
          let subscriptionGroupID: String
          @State var presentingManageSubscriptionsSheet: Bool = false
      
          var body: some View {
              Button("Manage Subscriptions") {
                  presentingManageSubscriptionsSheet = true
              }
              .manageSubscriptionsSheet(
                  isPresented: $presentingManageSubscriptionsSheet,
                  subscriptionGroupID: subscriptionGroupID
              )
          }
      }
    • 7:45 - JWSTransaction (decoded) for a monthly subscription with a 12-month commitment

      // JWSTransaction (decoded) for a monthly subscription with a 12-month commitment
      
      {
          // …
          "expiresDate": 1783503660000, // for this billing period
          "price": 10990, // for this billing period
          "productId": "plus.pro.annual",
          "purchaseDate": 1780911660000,
          "type": "Auto-Renewable Subscription",
          "billingPlanType": "MONTHLY",
          "commitmentInfo": {
              "billingPeriodNumber": 1,
              "totalBillingPeriods": 12,
              "commitmentExpiresDate": 1812447660000,
              "commitmentPrice": 131880,
          }
      }
    • 7:59 - JWSRenewalInfo (decoded) for a monthly subscription with a 12-month commitment

      // JWSRenewalInfo (decoded) for a monthly subscription with a 12-month commitment
      
      {
          // … 
          "renewalBillingPlanType": "MONTHLY",
          "commitmentInfo": {
              "commitmentAutoRenewProductId": “plus.standard.annual”,
              "commitmentAutoRenewStatus": 0,
              "commitmentRenewalDate": 1812447660000,
              "commitmentRenewalPrice": 10990,
              "commitmentRenewalBillingPlanType": "BILLED_UPFRONT"
          }
      }
    • 9:58 - Sheet to redeem an offer code

      // Sheet to redeem an offer code
      
      struct OfferCodeRedemption: View {
          @State var presentingOfferCodeSheet: Bool = false
      
          var body: some View {
              Button("Redeem Offer Code") {
                  presentingOfferCodeSheet = true
              }
              .offerCodeRedemption(options: [], isPresented: $presentingOfferCodeSheet) {result in
                  switch result {
                  case .success(let verificationResult):
                      switch verificationResult {
                          // Verify the transaction, give the customer access to
                          // the purchased content, and then finish the transaction
                      }
                  case .failure(let error):
                      // Handle error
                  }
              }
          }
      }
    • 0:01 - Introduction
    • Learn how to merchandise products and grow your business with expanded subscription pricing options, updates to the offer code redemption API, and an enhanced App Store Connect submission experience.

    • 0:51 - Overview of monthly subscriptions with a 12-month commitment
    • Monthly subscriptions with a 12-month commitment is a new pricing option that lets customers pay monthly for an annual subscription; can be added to new or existing one-year subscriptions in App Store Connect to reach a wider customer base.

    • 1:42 - Set up in App Store Connect
    • Configure monthly subscriptions with a 12-month commitment in App Store Connect. Set up pricing, offers, and availability.

    • 2:28 - Merchandise with StoreKit
    • Learn how SKDemo merchandises monthly subscriptions with a 12-month commitment using StoreKit and learn how to test with StoreKit Testing in Xcode.

    • 6:55 - Monitor subscriptions with App Store Server APIs
    • New fields in App Store Server APIs to manage the subscription lifecycle of monthly subscriptions with a 12-month commitment.

    • 8:50 - Bundles and Suites
    • Offering subscription Bundles and Suites is another way to provide customers with more value in their subscriptions across apps.

    • 9:26 - Offer code redemption
    • The offer code redemption API is extended to take in a set of RedeemOption values and returns a VerificationResult.

    • 10:35 - Enhanced submission experience
    • When you’re ready to submit an app to the App Store, you can utilize our enhanced submission experience for In-App Purchases in App Store Connect.

    • 12:38 - Next steps
    • Utilize the new features; adopt the expanded subscription pricing, update offer code redemption call sites, test in Xcode 27 and sandbox, and submit through the enhanced App Review experience.

Developer Footer

  • Videos
  • WWDC26
  • What’s new in Apple In-App Purchase
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines