3.1.1BlockerVerified against Apple's guidelines 2026-08-12

Guideline 3.1.1: In-app purchase

You sold digital features through Stripe or another checkout inside the app. Apple requires its own in-app purchase system for digital goods.

What Apple sent you

Guideline 3.1.1 - Business - Payments - In-App Purchase

We noticed that your app or its metadata provides access to digital
content, services, or functionality with a payment mechanism other
than in-app purchase.

Specifically, your app allows users to purchase subscriptions and
premium content using a web-based checkout, which is not appropriate
for the App Store.

If you want to unlock features or functionality within your app, you
must use in-app purchase.

What it actually means

Your app sells something digital (a subscription, premium features, credits, content) and lets people pay for it with a system other than Apple's. Apple's rule is blunt: "If you want to unlock features or functionality within your app ... you must use in-app purchase." In-app purchase (IAP) is Apple's own payment system, built into the App Store, and Apple takes a commission on every sale that goes through it.

That commission is the point. A Stripe checkout inside your app routes money around Apple, and this is one of the most consistently enforced rules in the entire review process. It doesn't matter that Stripe is reputable or that your checkout works beautifully; for digital goods sold in the app, it's the wrong rail.

One important boundary: this rule covers digital goods consumed in the app. Physical goods and real-world services (coffee orders, ride bookings, merchandise) must use other payment methods (that's covered by a different guideline, 3.1.3(e), not this one). If you sell real-world things, Stripe is fine. If you sell pixels, it isn't.

Why AI-built apps hit this

Stripe is the default answer when you ask an AI tool to "add payments." It's what the tools know best, it works instantly in a web app, and the integration is a single prompt. So founders who built their product on the web bring the same checkout into the iOS version without knowing Apple treats phones differently. The app works perfectly in testing, since Stripe doesn't care what device it runs on, and the problem only surfaces at review.

Apple's IAP system, by contrast, is not something a web-first AI tool adds by default. It requires products configured in App Store Connect and a native integration, so it never appears unless you ask for it.

How to fix it

  1. Sort what you sell into digital and physical. Everything that's unlocked or consumed inside the app (subscriptions, pro features, credits, content) must move to IAP. Anything physical or delivered in the real world can keep its current payment method.
  2. Ask your AI tool to integrate in-app purchases. Most builders do this through a service like RevenueCat, which handles the heavy lifting and works with Supabase, Firebase, and similar backends. Prompt for it explicitly: "replace the Stripe checkout for subscriptions with Apple in-app purchases via RevenueCat."
  3. Create the products in App Store Connect. This happens in the browser, not in code: define each subscription or purchase, set prices, and write the display names. Your integration references these products by ID.
  4. Remove in-app links to the old checkout. Buttons or links that send users to an external payment page are restricted by the same guideline family. Since a 2025 US court ruling, Apple's guidelines do permit apps on the United States storefront to include links to external purchase options, but that carve-out is specific to the US storefront, has its own conditions, and doesn't change the core rule: purchases completed inside the app use IAP. Unless you've read 3.1.1(a) closely and know it applies to you, the safe fix is IAP.
  5. Test a purchase, then resubmit. Use Apple's sandbox mode (your tool or RevenueCat's docs will walk you through it) to confirm a purchase completes and can be restored, then reply in Resolution Center.

What to write in Resolution Center

Adapt this to what you actually changed; don't send it unmodified:

Hello,

Thank you for the feedback. We've updated the app so that all digital
content and features are sold exclusively through in-app purchase:

- [Product/subscription name] is now offered via in-app purchase
- The previous external checkout has been removed from the app
- Purchases can be restored via [restore mechanism]

The new build is [build number]. We'd appreciate a second review.

Thank you,
[Your name]

How to avoid it next time

Decide the payment rail before you build the paywall. If your product sells anything digital on iOS, tell your AI tool from the start that purchases must use Apple in-app purchase. Retrofitting IAP after launch means rebuilding the paywall, the entitlement logic, and the backend that checks who paid. And keep your website's Stripe checkout for the web: the rule governs what happens inside the app, not how you sell everywhere else.

Related guides: 2.3.1: Hidden features (hiding an external checkout from reviewers makes things much worse) and 2.1: App completeness (broken purchase flows get flagged before payment rules do).

Related guides

Stop rejections before they happen

The free check runs findings like these against your real App Store Connect data. The paid plan will fix them on every release. Join the list to hear when it launches.

One email when it launches. Unsubscribe any time.