<!--
{
  "documentType" : "article",
  "framework" : "StoreKit",
  "identifier" : "/documentation/StoreKit/external-purchase",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "External Purchase"
}
-->

# External Purchase

Enable qualifying apps to offer external purchases.

## Discussion

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](https://developer.apple.com/support/communication-and-promotion-of-offers-on-the-app-store-in-the-eu/)
- [Distributing dating apps in the Netherlands](https://developer.apple.com/support/storekit-external-entitlement/)
- [Distributing apps in Russia that provide an external purchase link](https://developer.apple.com/contact/request/storekit-external-entitlement-ru/)
- [Distributing apps using a third-party payment provider in South Korea](https://developer.apple.com/support/storekit-external-entitlement-kr/)
- [Distributing music streaming apps in the EEA that provide an external purchase link](https://developer.apple.com/support/music-streaming-services-entitlement-eea/)
- [Payment options on the App Store in Brazil](https://developer.apple.com/support/payment-options-on-the-app-store-in-brazil)
- [Payment options on the App Store in Japan](https://developer.apple.com/support/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 <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase> entitlement for your app and the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchase> property list key.
- Use the [`ExternalPurchase`](/documentation/StoreKit/ExternalPurchase) type’s [`canPresent`](/documentation/StoreKit/ExternalPurchase/canPresent) property to determine whether external purchase is available. If the value is `false`, don’t continue to use this API. See [`canPresent`](/documentation/StoreKit/ExternalPurchase/canPresent) for more details.
- Call the [`presentNoticeSheet()`](/documentation/StoreKit/ExternalPurchase/presentNoticeSheet()) method and use the external purchase token you receive from the [`ExternalPurchase.NoticeResult.continuedWithExternalPurchaseToken(token:)`](/documentation/StoreKit/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>.

### 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`](/documentation/StoreKit/ExternalPurchaseCustomLink) API to implement external purchases. To use this API, complete the following steps:

- Depending on the entitlement you receive, configure the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions> entitlement for your app, or the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link> entitlement and the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseCustomLinkRegions> property list key, providing the country code for each permitted region where your app implements external purchases.
- Check the [`isEligible`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible) property of the [`ExternalPurchaseCustomLink`](/documentation/StoreKit/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`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible).
- At launch and before every potential transaction, call the [`token(for:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>.

### Implement external purchase for apps available in Brazil

If your account receives the StoreKit External Custom Purchase Link Regions entitlement, in Brazil your app can use the [`ExternalPurchaseCustomLink`](/documentation/StoreKit/ExternalPurchaseCustomLink) API to implement external purchases starting in iOS 26.5.  To use this API, complete the following steps:

- Configure the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions> entitlement for your app.
- Check the [`isEligible`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible) property of the [`ExternalPurchaseCustomLink`](/documentation/StoreKit/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`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible).
- Call the [`token(for:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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 Brazil](https://developer.apple.com/support/payment-options-on-the-app-store-in-brazil).
- Report the external purchase tokens and the transactions associated with the tokens using the <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>. Otherwise, report transactions as indicated in [Payment options on the App Store in Brazil](https://developer.apple.com/support/payment-options-on-the-app-store-in-brazil).

### 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`](/documentation/StoreKit/ExternalPurchaseCustomLink) API to implement external purchases starting in iOS 26.2.  To use this API, complete the following steps:

- Configure the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions> entitlement for your app.
- Check the [`isEligible`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible) property of the [`ExternalPurchaseCustomLink`](/documentation/StoreKit/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`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible).
- Starting in iOS 26.4, call the [`token(for:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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](https://developer.apple.com/support/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>. Otherwise, report transactions as indicated in [Payment options on the App Store in Japan](https://developer.apple.com/support/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`](/documentation/StoreKit/ExternalPurchaseCustomLink) API to implement external purchases. To use this API, complete the following steps:

- Configure the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link-streaming> entitlement for your app and the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseLinkStreamingRegions> property list key, providing the country code for each permitted region where your app implements external purchase.
- Check the [`isEligible`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible) property of the [`ExternalPurchaseCustomLink`](/documentation/StoreKit/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`](/documentation/StoreKit/ExternalPurchaseCustomLink/isEligible) for more details.
- At launch and before every potential transaction, call the [`token(for:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>.

### 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 <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link> entitlement for your app.
- Configure the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseMultiLink> property list key, providing one or more external purchase links for each permitted country code.
- Use the [`ExternalPurchaseLink`](/documentation/StoreKit/ExternalPurchaseLink) type’s [`eligibleURLs`](/documentation/StoreKit/ExternalPurchaseLink/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`](/documentation/StoreKit/ExternalPurchaseLink/eligibleURLs) for more information.
- Call the [`open(url:)`](/documentation/StoreKit/ExternalPurchaseLink/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>.

### 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 <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link> entitlement for your app.
- Configure the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseLink> property list key, providing one external purchase link for each permitted country code.
- Use the [`ExternalPurchaseLink`](/documentation/StoreKit/ExternalPurchaseLink) type’s [`canOpen`](/documentation/StoreKit/ExternalPurchaseLink/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`](/documentation/StoreKit/ExternalPurchaseLink/canOpen).
- Call the [`open()`](/documentation/StoreKit/ExternalPurchaseLink/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>.

Your app may configure both the <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseLink> and <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/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 <doc://com.apple.documentation/documentation/ExternalPurchaseServerAPI>. For more information about tokens, see [Receiving and decoding external purchase tokens](/documentation/StoreKit/receiving-and-decoding-external-purchase-tokens).

### Check API availability

The External Purchase APIs, including [`ExternalPurchaseLink`](/documentation/StoreKit/ExternalPurchaseLink), [`ExternalPurchase`](/documentation/StoreKit/ExternalPurchase), and [`ExternalPurchaseCustomLink`](/documentation/StoreKit/ExternalPurchaseCustomLink) provide *external purchase tokens* that you use to report transactions to Apple:

- [`ExternalPurchaseLink`](/documentation/StoreKit/ExternalPurchaseLink) and [`ExternalPurchase`](/documentation/StoreKit/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`](/documentation/StoreKit/ExternalPurchaseCustomLink) is available starting in iOS 18.1, iPadOS 18.1, Mac Catalyst 18.1, and macOS 15.1; for use in Brazil, it and [`token(for:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/token(for:)) are available starting in iOS 26.5; for use in Japan, it’s available starting in iOS 26.2, with [`token(for:)`](/documentation/StoreKit/ExternalPurchaseCustomLink/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`](/documentation/StoreKit/ExternalPurchase) and [`ExternalPurchaseLink`](/documentation/StoreKit/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](/documentation/StoreKit/receiving-and-decoding-external-purchase-tokens)

Receive tokens for external purchases that you use to report transactions to Apple.

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

[`ExternalPurchase`](/documentation/StoreKit/ExternalPurchase)

An enumeration that enables qualifying apps to offer external purchases within the app.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase>

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchase>

### Implementing external purchases in the EU

[`ExternalPurchaseCustomLink`](/documentation/StoreKit/ExternalPurchaseCustomLink)

An enumeration that enables qualifying apps to offer custom links for external purchases and use alternative payment service providers.

[`ExternalPurchaseCustomLink.Token`](/documentation/StoreKit/ExternalPurchaseCustomLink/Token)

A token you use with the External Purchase custom link API.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions>

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link>

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseCustomLinkRegions>

[Testing transactions that use custom link tokens](/documentation/StoreKit/testing-transactions-that-use-custom-link-tokens)

Recognize custom link tokens that your app receives in the sandbox testing environment, and use them to test reporting transactions.

### Implementing external purchases in Japan

[`ExternalPurchaseCustomLink`](/documentation/StoreKit/ExternalPurchaseCustomLink)

An enumeration that enables qualifying apps to offer custom links for external purchases and use alternative payment service providers.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.custom-purchase-link.allowed-regions>

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

[`ExternalPurchaseCustomLink`](/documentation/StoreKit/ExternalPurchaseCustomLink)

An enumeration that enables qualifying apps to offer custom links for external purchases and use alternative payment service providers.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link-streaming>

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseLinkStreamingRegions>

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

[`ExternalPurchaseLink`](/documentation/StoreKit/ExternalPurchaseLink)

An enumeration that enables qualifying apps to offer external purchase links.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.storekit.external-purchase-link>

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseMultiLink>

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/SKExternalPurchaseLink>



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)