Showing a web checkout link inside an iOS app.

Where it is allowed, what review looks for, and how the SDK keeps the button out of the storefronts where it is not.

What changed

Until 2025, an iOS app selling a subscription had to sell it through in-app purchase and could not point customers at a cheaper price elsewhere. Guideline 3.1.1 said so, and review enforced it. Two things have moved since, in two places.

United States. In April 2025 the court in Epic v. Apple found Apple in violation of its 2021 injunction and ordered it to stop restricting links to external purchases on the US storefront. Apps may show a link or button to a web checkout, and the order barred Apple from charging a commission on purchases made through those links. Apple revised the guideline for the US the same week.

European Union. Under the Digital Markets Act, apps on the EU storefronts may link out to offers on the web. The terms are Apple's own, with fees attached, and they have been revised more than once. A link is permitted; the cost of one is a moving number.

Everywhere else. Guideline 3.1.1 applies as it did. Digital goods are sold through in-app purchase, and an app may not steer customers to a purchase outside the app. An app that honours a subscription bought on the web is fine; an app that advertises the web price from inside itself, in one of these storefronts, is not.

What review looks for today

  • The link is not shown where it is not allowed. A button that appears in a Japanese or Australian storefront is a rejection, however the app behaves in the US. Review tests from more than one region.
  • In-app purchase stays available. Where the rules allow a link, they do not allow removing the App Store purchase. The two sit side by side.
  • Nothing misleading. The button says where it goes. A web checkout is described as one; a price is a price.
  • The web plan is priced on its own terms. A plan that mirrors the in-app price line for line reads as a way round the store rather than a different offer. Set the web price as you would set any price.

How Passback handles it

Each app has a list of storefronts where the button may show. The default is the United States and the twenty-seven EU member states, the two places where a link out is permitted today. There are presets for US only, EU only, and Everywhere; the last is for developers who have taken advice and accept the risk in other regions. The list is a setting on the app, not a constant in the SDK, so a ruling changes a row in the dashboard and not a release.

The SDK asks webCheckoutAllowed() before showing the button. It reads the storefront from StoreKit, which is the country Apple bills in and the one the rules are about, rather than the device's region setting, which a customer can change. It fetches the list from /api/v1/config with the app's API key, keeps the last answer for a day so a launch on a train is answered from the previous one, and falls back to the built-in default on a first launch with no connection.

In the app

Four calls, all in the Swift package and in plain HTTP for everything else. The gate: ask whether this storefront allows the button before drawing it, and show the App Store purchase when it does not. The return: hand every URL the app is opened with to the SDK; it exchanges the one that is ours and ignores the rest. The code door: a customer who paid before installing types the six digits from the confirmation or the receipt. And on every launch after that, one request by device id that returns the same document. The exact calls, with your identifiers filled in, are on the settings screen once you have signed in.

Outside the US and EU

Show your App Store paywall. The SDK does this by returning false from the gate, and nothing of ours appears. Web-first acquisition is unaffected in every storefront: a funnel reached from an ad, an email or a web page has no app in it until the customer installs one, so none of it is inside the App Store or subject to its rules on where a link may point. See web-to-app funnels, explained.


This is not legal advice. The guideline text changes; read the current one at developer.apple.com before you ship, and the Epic v. Apple docket for the order as it stands. Updated 19 September 2026. Corrections via contact. Related: documentation.