Reference library · App Review
Guideline 3.1.1 In-App Purchase: what must use IAP, what can't, and what your paywall has to show
Most 3.1.1 rejections aren't about dodging Apple's cut. They're a missing restore button, a paywall without terms, or an unlock code.
Guideline 3.1.13. Business · In-App PurchaseApple text last updated June 8, 2026Checked against Apple's App Review Guidelines (last updated June 8, 2026), the Apple Developer Program License Agreement Schedule 2 and Apple's subscriptions guidance, on Oct 2, 2026.
The short answer
Guideline 3.1.1 requires in-app purchase for anything that unlocks digital features or content, and bans your own unlock mechanisms such as license keys or codes. Physical goods and one-to-one services must use other payment methods. Since May 2025, apps on the US storefront may link out to web purchases without an entitlement. Subscription paywalls must show name, length and price, link to terms and privacy policy, and offer restore.
- External links, US storefront
- Allowed
- No entitlement needed since May 1, 2025
- Other storefronts
- Still prohibited
- Unless you hold an entitlement
- Minimum subscription period
- 7 days
- Guideline 3.1.2(a)
- Restore mechanism
- Expected
- For any restorable purchase
01The rule, and what falls on each side of it
If you want to unlock features or functionality within your app, (by way of example: subscriptions, in-game currencies, game levels, access to premium content, or unlocking a full version), you must use in-app purchase. Apps may not use their own mechanisms to unlock content or functionality, such as license keys, augmented reality markers, QR codes, cryptocurrencies and cryptocurrency wallets, etc.
| What you sell | Payment method | Guideline |
|---|---|---|
| Subscriptions, premium features, digital content, in-app currency | Must use in-app purchase | 3.1.1 |
| Digital gift cards and vouchers redeemable for digital goods | Must use in-app purchase | 3.1.1 |
| One-to-many live services (a class, a webinar) | Must use in-app purchase | 3.1.3(d) |
| Physical goods, or services consumed outside the app | Must use something other than in-app purchase, such as Apple Pay or card entry | 3.1.3(e) |
| One-to-one live services (tutoring, a consultation, personal training) | May use other payment methods | 3.1.3(d) |
| Content a user already bought elsewhere, in a multiplatform app | May be accessed, provided it's also sold as IAP in the app | 3.1.3(b) |
| Features that depend on specific hardware | May unlock without IAP in limited cases | 3.1.4 |
02The rejections indie apps actually get
| What the message says | Cause | Fix |
|---|---|---|
| "your app unlocks or enables additional functionality with mechanisms other than in-app purchase… your app uses codes" | A redeem-code field, license key or coupon that unlocks paid features | Remove it; use Apple's offer codes or promotional offers instead |
| "accesses digital content purchased outside the app… but that content isn't available to purchase using in-app purchase" | Web customers can sign in and use paid content the app doesn't also sell | Offer the same items as IAP in the app (3.1.3(b)) |
| "offers in-app purchases that can be restored but does not include a 'Restore Purchases' feature" | No restore path | Add restore to the paywall or settings |
| "did not include all the required information for apps offering auto-renewable subscriptions" | Paywall or metadata missing terms, privacy policy or a clear price | Complete the disclosure checklist below |
03Linking out to web checkout: what changed in May 2025
On May 1, 2025 Apple updated the guidelines "for compliance with a United States court decision regarding buttons, external links, and other calls to action in apps". The current text of 3.1.1(a) reads:
Developers may apply for entitlements to provide a link in their app to a website the developer owns or maintains responsibility for in order to purchase digital content or services. These entitlements are not required for developers to include buttons, external links, or other calls to action in their United States storefront apps.
The scope is narrow and easy to get wrong. It applies to the United States storefront only. The same guideline says that in all other storefronts, apps and their metadata "may not include buttons, external links, or other calls to action that direct customers to purchasing mechanisms other than in-app purchase". An app that shows a web-checkout button to everyone will be rejected for its non-US users.
import StoreKit
func canShowWebCheckout() async -> Bool {
// countryCode is a three-letter ISO 3166-1 code
guard let storefront = await Storefront.current else { return false }
return storefront.countryCode == "USA"
}04What a subscription paywall must show
Guideline 3.1.2(c) asks you to "clearly describe what the user will get for the price" and points to Schedule 2 of the Apple Developer Program License Agreement. Between that schedule and Apple's subscriptions guidance, this is what reviewers check:
Subscription sign-up screen
- The subscription's name and its length
- What content or service the subscriber gets during that period
- The full renewal price, shown "clearly and prominently" and localized — not just a per-week breakdown in large type with the real charge in small print
- A way for existing subscribers to sign in or restore purchases
- A working link to your Terms of Use (EULA) and your Privacy Policy, inside the app
- The same two links in your App Store metadata: Apple's standard EULA linked in the description, or a custom EULA added in App Store Connect
A rejection from November 2025 shows how literal this is. It asked for "a functional link to the Terms of Use (EULA)" and noted that "the billed amount of your auto-renewable subscription is not clearly and conspicuously displayed". Neither needs a redesign — only the missing lines.
05Restore purchases
The guideline's wording is soft — "you should make sure you have a restore mechanism for any restorable in-app purchases" — but reviewers enforce it, and Apple's subscription guidance lists restore among the details a sign-up screen must include. Put a visible Restore button on the paywall and in settings.
import StoreKit
Button("Restore Purchases") {
Task {
// Forces a sync with the App Store, then re-check entitlements
try? await AppStore.sync()
}
}If you use a subscription backend, call its restore method instead; the RevenueCat review covers what that layer handles for you.
06Trials, minimum periods and credits
- Seven days minimum. Under 3.1.2(a) a subscription "must last at least seven days", provide ongoing value, and be available across all the user's devices.
- Trials for non-subscription apps. Apple allows a time-based trial through a free non-consumable named in the pattern "XX-day Trial", as long as you state the duration, what stops working afterwards and what it will cost before the trial starts.
- Credits can't expire. Any credits or in-game currency bought through in-app purchase "may not expire".
- Loot boxes need odds. Randomized virtual items must disclose the odds of each type before purchase.
07Replying to a 3.1.1 or 3.1.2 rejection
Hello App Review team,
Thank you for the feedback on Guideline 3.1.[1 / 2].
Changes in build [number]:
- Removed the redeem-code field. Premium is now unlocked only through the
in-app purchases [product IDs].
- Paywall now shows: plan name, length, full renewal price, and links to our
Terms of Use and Privacy Policy.
- Added "Restore Purchases" on the paywall and in Settings > Subscription.
- App Store description now includes the Terms of Use (EULA) link.
To see the paywall: launch the app > complete onboarding > tap [button].
Thank you,
[Name]If only the App Store metadata was at fault — a missing EULA link in the description, say — you can fix it and resubmit the same build. If the paywall itself is missing something, you need a new one.
Frequently asked questions
Can I link to my website to sell subscriptions?
On the United States storefront, yes — since May 1, 2025 apps there may include buttons, external links and calls to action without an entitlement. On every other storefront it's still prohibited unless you hold one of Apple's entitlements, so gate the link by storefront.
Is a Restore Purchases button required?
The guideline says you should have a restore mechanism for restorable purchases, and Apple's subscription guidance requires a way to sign in or restore on the sign-up screen. In practice apps are rejected without one, so include it.
Can I use promo codes or license keys to unlock my app?
Not your own. 3.1.1 bans your own unlock mechanisms, naming license keys and QR codes. Use Apple's offer codes or promotional offers, which run through in-app purchase.
Do I need a Terms of Use link if I use Apple's standard EULA?
Yes. Apple's reviewers ask for a functional Terms of Use link in the app, and — if you use the standard EULA — a link to it in your App Store description. A custom EULA is added in App Store Connect instead.
Do physical products need in-app purchase?
No — the opposite. Under 3.1.3(e), physical goods and services consumed outside the app must use a payment method other than in-app purchase, such as Apple Pay or card entry.
Where to go next
- Guideline 2.1: App CompletenessThe other purchase rejection: products that are missing or fail when the reviewer buys them.
- Guideline 5.1.1: Data CollectionWhy you can't force sign-up before a purchase, and what account deletion requires.
- RevenueCat vs SuperwallChoosing the paywall stack that will show the disclosures reviewers look for.
- The Paywall Setup — $99RevenueCat installed, one paywall built, the purchase flow sandbox-tested.
Sources
- App Store Review Guidelines — 3.1 Payments — Apple Developer
- Updated guidelines for the US storefront (May 1, 2025) — Apple Developer News
- Apple Developer Program License Agreement — Schedule 2 — Apple Developer
- Auto-renewable subscriptions — Apple Developer
- Forum: unlocking content with codes rejected under 3.1.1 — Apple Developer Forums
- Forum: subscription information rejection (EULA link, billed amount) — Apple Developer Forums
- Issue: rejected for missing Restore Purchases — GitHub
Published Oct 2, 2026 · last checked Oct 2, 2026. Found something out of date? Tell us and we'll fix it within a day. Machine-readable version: /app-review/guideline-3-1-1-in-app-purchase.md
Have it done for you
The Paywall Setup
$99 one-time · Delivered in 5 business days
We install RevenueCat, build one paywall from its template with your copy, prices and trial, and sandbox-test purchase, restore and cancel — the same path App Review follows.
- RevenueCat SDK installed and configured; products, entitlements and offering set up
- One paywall built from RevenueCat's template with your copy, prices and trial
- Customer Center enabled — cancellations, refunds and restores handled without you