---
title: External Purchase
framework: storekit
role: collectionGroup
role_heading: API Collection
path: storekit/external-purchase
---

# External Purchase

Enable qualifying apps to offer external purchases.

## Overview

Overview The External Purchase APIs allow qualifying apps to implement external purchases. External purchases allow customers to complete purchases: within the app, using an alternative payment service provider outside of the app, after linking-out of the app If you develop a qualifying app, you may complete a request for optional entitlements that allow you to offer external purchases. For more information about whether your app qualifies, requesting an entitlement, and implementation requirements, see: Communication and promotion of offers on the App Store in the EU Distributing dating apps in the Netherlands Distributing apps in Russia that provide an external purchase link Distributing apps using a third-party payment provider in South Korea Distributing music streaming apps in the EEA that provide an external purchase link Payment options on the App Store in Japan Use the API based on the entitlements your app receives and the regions where your app runs. Implement external purchases using alternative payment service providers in the European Union (EU) and South Korea If your account receives the StoreKit External Purchase entitlement or the StoreKit External Purchase Regions entitlement, implement the following to offer external purchases within your app: Configure the com.apple.developer.storekit.external-purchase entitlement for your app and the SKExternalPurchase property list key. Use the ExternalPurchase type’s canPresent property to determine whether external purchase is available. If the value is false, don’t continue to use this API. See canPresent for more details. Call the presentNoticeSheet() method and use the external purchase token you receive from the ExternalPurchase.NoticeResult.continuedWithExternalPurchaseToken(token:) result to record transactions. From your server, report the external purchase tokens and the transactions associated with the tokens by using the External Purchase Server API. Implement external purchase for apps available in the EU If your account receives the StoreKit External Purchase Link entitlement or the StoreKit External Custom Purchase Link Regions entitlement, in the EU your app can use the ExternalPurchaseCustomLink API to implement external purchases. To use this API, complete the following steps: Depending on the entitlement you receive, configure the com.apple.developer.storekit.custom-purchase-link.allowed-regions entitlement for your app, or the com.apple.developer.storekit.external-purchase-link entitlement and the SKExternalPurchaseCustomLinkRegions property list key, providing the country code for each permitted region where your app implements external purchases. Check the isEligible property of the ExternalPurchaseCustomLink API to determine whether the API is available at runtime. If the value is false, don’t continue to use this API. For more information, see isEligible. At launch and before every potential transaction, call the token(for:) function to request the external purchase tokens, using the token types ACQUISITION and SERVICES. Associate these tokens with a customer account on your server. Call the showNotice(type:) function after a deliberate customer interaction, such as tapping a button, that can lead to a potential external purchase. From your server, report the external purchase tokens and the transactions associated with the tokens by using the External Purchase Server API. Implement external purchase for apps available in Japan If your account receives the StoreKit External Custom Purchase Link Regions entitlement, in Japan your app can use the ExternalPurchaseCustomLink API to implement external purchases starting in iOS 26.2.  To use this API, complete the following steps: Configure the com.apple.developer.storekit.custom-purchase-link.allowed-regions entitlement for your app. Check the isEligible property of the ExternalPurchaseCustomLink API to determine whether the API is available at runtime. If the value is false, don’t continue to use this API. For more information, see  isEligible. Starting in iOS 26.4, call the token(for:) function before every potential transaction to request external purchase tokens, using the token types IN_APP or LINK_OUT. For more information, see token(for:). Before routing customers to external purchase options, display an in-app disclosure sheet that lets people know they’ll be transacting with you and not Apple. For more information, including downloadable resources, see the “In-app disclosure sheet” section of Payment options on the App Store in Japan. Starting in iOS 26.4, report the external purchase tokens and the transactions associated with the tokens using the External Purchase Server API. Otherwise, report transactions as indicated in Payment options on the App Store in Japan. Implement external purchase for music streaming apps in the European Economic Area (EEA) If your account receives the Music Streaming Services EEA entitlement, your music-streaming app can use the ExternalPurchaseCustomLink API to implement external purchases. To use this API, complete the following steps: Configure the com.apple.developer.storekit.external-purchase-link-streaming entitlement for your app and the SKExternalPurchaseLinkStreamingRegions property list key, providing the country code for each permitted region where your app implements external purchase. Check the isEligible property of the ExternalPurchaseCustomLink API to determine whether external purchase is available at runtime. If the value is false, don’t continue to use this API. See isEligible for more details. At launch and before every potential transaction, call the token(for:) function to request the external purchase tokens, using the token types ACQUISITION and SERVICES. Associate these tokens with a customer account on your server. Call the showNotice(type:) function after a deliberate customer interaction, such as tapping a button, and before offering external purchases. From your server, report the external purchase tokens and the transactions associated with the tokens by using the External Purchase Server API. Implement external purchase through multiple links for the European Economic Area (EEA) and Russia If your account receives the StoreKit External Purchase Link entitlement or the StoreKit External Purchase Link Regions entitlement, in the EEA and Russia you can implement the following to offer multiple external purchase links: Configure the com.apple.developer.storekit.external-purchase-link entitlement for your app. Configure the SKExternalPurchaseMultiLink property list key, providing one or more external purchase links for each permitted country code. Use the ExternalPurchaseLink type’s eligibleURLs array to determine whether one or more external purchase links are available, then select one of those eligible URLs. If the value is nil, see eligibleURLs for more information. Call the open(url:) method with the URL you select. StoreKit appends the external purchase token to your website’s URL. Use this token to record purchases. From your server, report the external purchase tokens and the transactions associated with the tokens by using the External Purchase Server API. Implement external purchase through single links for the European Economic Area (EEA) and Russia If your account receives the StoreKit External Purchase Link entitlement or the StoreKit External Purchase Link Regions entitlement, implement the following to offer a single external purchase link for each country code: Configure the com.apple.developer.storekit.external-purchase-link entitlement for your app. Configure the SKExternalPurchaseLink property list key, providing one external purchase link for each permitted country code. Use the ExternalPurchaseLink type’s canOpen property to determine whether external purchase link is available. If the value is false, don’t continue to use this API. For more information, see canOpen. Call the open() method. StoreKit appends the external purchase token to your website’s URL. Use this token to record purchases. From your server, report the external purchase tokens and the transactions associated with the tokens by using the External Purchase Server API. Your app may configure both the SKExternalPurchaseLink and SKExternalPurchaseMultiLink property list keys. Record and report external purchase tokens and associated transactions An external purchase token is a unique string that your app or website receives when your app’s customer chooses to view your external purchase offerings. Record all tokens in your system and report them and their associated transactions using the External Purchase Server API. For more information about tokens, see Receiving and decoding external purchase tokens. Check API availability The External Purchase APIs, including ExternalPurchaseLink, ExternalPurchase, and ExternalPurchaseCustomLink provide external purchase tokens that you use to report transactions to Apple: ExternalPurchaseLink and ExternalPurchase are available starting in iOS 17.4, iPadOS 17.4, macOS 14.4, Mac Catalyst 17.4, tvOS 17.4, visionOS 1.1, and watchOS 10.4. ExternalPurchaseCustomLink is available starting in iOS 18.1, iPadOS 18.1, Mac Catalyst 18.1, and macOS 15.1; for use in Japan, it’s available starting in iOS 26.2, with token(for:) available starting in iOS 26.4. For apps that run on iOS 15.4 through 17.3 and iPadOS 15.4 through 17.3, the External Purchase APIs have the following behavior: ExternalPurchase and ExternalPurchaseLink APIs throw errors or return false for compatible iPad or iPhone apps running in visionOS, on a Mac with Apple silicon, or on a Mac app built with Mac Catalyst. The APIs don’t provide external purchase tokens. The APIs are available in iOS and iPadOS only.

## Topics

### Managing external purchase tokens

- [Receiving and decoding external purchase tokens](storekit/receiving-and-decoding-external-purchase-tokens.md)

### Implementing alternative payment service providers in the EU and South Korea

- [ExternalPurchase](storekit/externalpurchase.md)
- [com.apple.developer.storekit.external-purchase](bundleresources/entitlements/com.apple.developer.storekit.external-purchase.md)
- [SKExternalPurchase](bundleresources/information-property-list/skexternalpurchase.md)

### Implementing external purchases in the EU

- [ExternalPurchaseCustomLink](storekit/externalpurchasecustomlink.md)
- [ExternalPurchaseCustomLink.Token](storekit/externalpurchasecustomlink/token.md)
- [com.apple.developer.storekit.custom-purchase-link.allowed-regions](bundleresources/entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions.md)
- [com.apple.developer.storekit.external-purchase-link](bundleresources/entitlements/com.apple.developer.storekit.external-purchase-link.md)
- [SKExternalPurchaseCustomLinkRegions](bundleresources/information-property-list/skexternalpurchasecustomlinkregions.md)
- [Testing transactions that use custom link tokens](storekit/testing-transactions-that-use-custom-link-tokens.md)

### Implementing external purchases in Japan

- [ExternalPurchaseCustomLink](storekit/externalpurchasecustomlink.md)
- [com.apple.developer.storekit.custom-purchase-link.allowed-regions](bundleresources/entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions.md)

### Implementing external purchases for music streaming services in the EU

- [ExternalPurchaseCustomLink](storekit/externalpurchasecustomlink.md)
- [com.apple.developer.storekit.external-purchase-link-streaming](bundleresources/entitlements/com.apple.developer.storekit.external-purchase-link-streaming.md)
- [SKExternalPurchaseLinkStreamingRegions](bundleresources/information-property-list/skexternalpurchaselinkstreamingregions.md)

### Implementing single and multiple external purchase links in the European Economic Area (EEA) and Russia

- [ExternalPurchaseLink](storekit/externalpurchaselink.md)
- [com.apple.developer.storekit.external-purchase-link](bundleresources/entitlements/com.apple.developer.storekit.external-purchase-link.md)
- [SKExternalPurchaseMultiLink](bundleresources/information-property-list/skexternalpurchasemultilink.md)
- [SKExternalPurchaseLink](bundleresources/information-property-list/skexternalpurchaselink.md)
