Apple guideline 3.1.1 prohibits directing users to external payment flows for digital goods — and enforcement is not limited to rejection. Apple has terminated developer accounts for this violation and retroactively removed apps from the store. Google Play Billing Policy carries equivalent restrictions. The damage extends beyond the individual app: a terminated developer account means every app under that account is removed simultaneously. Unlike most rejection reasons which allow a resubmit with a fix, account termination has no straightforward appeal path. This is the highest-severity policy violation in the entire IAP compliance surface.
Critical because external payment links for digital goods are the single most severe App Store policy violation, causing immediate rejection and potential permanent developer account termination.
Remove all external payment links, webview checkout flows, and Linking.openURL() calls pointing to payment processors for digital goods. Implement purchases exclusively through StoreKit (iOS) or Play Billing Library (Android).
Search your codebase for the following patterns and eliminate each one found for digital goods:
// Remove patterns like these for digital goods:
Linking.openURL('https://yourapp.com/subscribe');
Linking.openURL('https://buy.stripe.com/...');
<WebView source={{ uri: 'https://checkout.paddle.com/...' }} />
The "reader app" exemption (Netflix, Kindle) allows having no purchase button at all — but explicitly prohibits linking to external purchase. You may link to account management (cancel, update billing) AFTER the user has subscribed via the platform store. Physical goods and real-world services remain fully exempt — only digital goods require the platform store.
ID: app-store-iap-subscriptions.iap-integration.no-external-payment
Severity: critical
What to look for: Count all relevant instances and enumerate each. Search all source files for patterns that route digital goods purchases outside the platform store. Look for: (1) Linking.openURL() calls where the URL contains payment-related paths — stripe.com, paddle.com, paypal.com/checkout, lemonsqueezy.com, /subscribe, /checkout, /billing, /payment, /upgrade. (2) WebView components loaded with payment or checkout URLs. (3) Button labels containing "Buy on website", "Subscribe on web", "Get Premium at [URL]", "Pay with card". (4) Deep link handlers that redirect to a web checkout. (5) API calls to third-party payment processors (stripe.com/v1/, api.paddle.com, api-m.paypal.com) from within the app's own payment/purchase flow. Note the exceptions: physical goods and services (Uber, food delivery, Amazon physical products), reader apps (Netflix, Kindle — allowed to have no purchase button at all but cannot link to external purchase), and side-loading from App Store Connect (Enterprise distribution). The rule applies to the App Store and Play Store distribution only.
Pass criteria: No links, buttons, or flows route the user to an external payment processor for digital goods purchasable within the app. At least 1 implementation must be verified. Links to account management pages (not purchase flows) are generally acceptable.
Fail criteria: Any link, button, or navigation flow that directs users to purchase digital goods outside the platform store. Web checkout URLs opened from within the app for in-app digital goods.
Skip (N/A) when: App is entirely free with no purchasable digital goods, OR app sells only physical goods or real-world services.
Detail on fail: "Linking.openURL('https://yourapp.com/subscribe') called in src/screens/UpgradeScreen.tsx — routes digital goods purchase outside the App Store in violation of Apple guideline 3.1.1" or "PaywallScreen renders a 'Buy on our website' button that opens a Stripe checkout — this pattern results in immediate App Store rejection"
Remediation: This is the single most severe IAP policy violation — Apple has terminated developer accounts and removed apps for this. There is no warning period.
Review the configuration in src/ or app/ directory for implementation patterns.
Cross-reference: For related patterns and deeper analysis, see the corresponding checks in other AuditBuffet audits covering this domain.