Meeting Apple requirements guide
In this section, you will find information on how to obtain Apple’s approval to use the Link-Out Option (LOO) in your iOS application. All steps are listed in the order you should follow.
✅ 1. Make sure your app qualifies for LOO
-
You sell only digital content/services (e.g., subscriptions, premium access, tokens)
-
Your app is available in European Union countries
-
You do not offer the same content via IAP (In-App Purchase) — LOO cannot coexist with IAP
✅ 2. Accept the required documents in App Store Connect
-
Go to: "Agreements, Tax, and Banking"
-
Accept: "EU Digital Markets Act Addendum"
✅ 3. Apply for the External Link Entitlement
-
Fill the form here:🔗 https://developer.apple.com/support/dma-and-apps-in-the-eu/
- Add:
-
Your app’s name
-
A list of EU countries where the feature will be active
-
A link to the external checkout (e.g., via Paytool)
-
Screenshots showing the UX flow, including:
-
Screen with the "Buy on the Website" button
-
Screen with the required disclaimer
-
View of the payment page (checkout outside the app)
-
-
✅ 4. Prepare a compliant in-app UX
-
Add a button: “Buy on the Website” or “Buy outside the App Store”
The button must open Safari (NOT a WebView)
After clicking, the user must see a disclaimer screen:
-
You continue the purchase outside the App Store. Apple is not responsible for the privacy or security of transactions made on this site.
-
The user must manually confirm the intention to continue (e.g., "Continue" or "Cancel")
✅ 5. Implementation of the checkout link
The link must contain the required Apple parameters (e.g. appleExternalPurchase=true)
-
It must lead to the hosted PSP page (Paytool address)
-
The page must work correctly in Safari and must not contain redirects to other applications or prompts to install anything
✅ 6. After obtaining Apple permission
-
You will receive External Purchase Link Entitlement
-
Add it to the app configuration (in Xcode or Plist)
-
Activate the feature only for users from EU countries
✅ 7. Submit the new version of the application for review
-
Attach a note informing Apple that you are using LOO in accordance with the DMA
-
Include screenshots or a video of the full UX flow
-
Indicate that you Paytool Verestro is a registered PSP
🟨 Tips:
Accelerate acceptance by providing a video or prototype (e.g. Figma, Loom)
Do not offer promotions or lower prices at checkout outside the App Store — Apple prohibits this
Do not include a link to the payment page in the app description in the App Store — only within the app
There are example code samples in HTML and Swift that displays the Apple-required disclaimer view before redirecting the payer to an external payment gateway such as Paytool.
HTML code sample
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Ostrzeżenie przed przekierowaniem</title>
<style>
body {
font-family: sans-serif;
padding: 2em;
background-color: #f9f9f9;
}
.container {
max-width: 480px;
margin: auto;
background-color: #fff;
padding: 2em;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
button {
width: 100%;
margin-top: 1.5em;
padding: 1em;
font-size: 1em;
border: none;
border-radius: 8px;
background-color: #007aff;
color: white;
cursor: pointer;
}
.cancel {
background-color: #ccc;
margin-top: 0.5em;
}
</style>
</head>
<body>
<div class="container">
<h2>You are leaving this application</h2>
<p>
You will be redirected to an external site to complete your purchase. Apple is not responsible for the privacy or security of this transaction.
</p>
<button onclick="window.location.href='<paytoolUrl>/token=abc123&appleExternalPurchase=yes'">
Continue payment
</button>
<button class="cancel" onclick="history.back()">Return</button>
</div>
</body>
</html>
Tip: The checkout link should contain a query param compliant with Apple requirements (e.g. ?appleExternalPurchase=yes)
SWIFT code sample
import UIKit
import SafariServices
class SubscriptionViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let buyButton = UIButton(type: .system)
buyButton.setTitle("Buy through the site", for: .normal)
buyButton.addTarget(self, action: #selector(openExternalPurchaseDisclaimer), for: .touchUpInside)
buyButton.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(buyButton)
NSLayoutConstraint.activate([
buyButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
buyButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
@objc func openExternalPurchaseDisclaimer() {
guard let url = URL(string: "<paytoolUrl>/disclaimer.html") else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
Tip: You must use UIApplication.shared.open—not WebView.
Tip: The URL must lead to a disclaimer page (like the HTML above), not directly to the checkout page.