---
title: "Guideline 3.1.1 In-App Purchase Rejection: How to Fix It"
canonical: "https://asoitis.com/app-review/guideline-3-1-1-in-app-purchase"
description: "Rejected under App Store Guideline 3.1.1 or 3.1.2? What must use in-app purchase, the US external-link rule, paywall disclosure requirements and restore, with fixes."
kind: "reference-library/app-review"
published: "2026-10-02"
lastUpdated: "2026-10-02"
verifiedAgainst: "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"
author: "Ahmed Gagan (https://asoitis.com/about)"
---

# Guideline 3.1.1 In-App Purchase: what must use IAP, what can't, and what your paywall has to show

> 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.

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.1 — In-App Purchase](https://developer.apple.com/app-store/review/guidelines/#in-app-purchase) (3. Business; Apple text last updated June 8, 2026)

## Key facts

- **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

## The 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.
>
> — [App Store Review Guidelines, 3.1.1](https://developer.apple.com/app-store/review/guidelines/#in-app-purchase)

**Which payment method Apple expects**

| 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 |

_A free companion app to a paid web tool needs no IAP as long as it has no purchasing inside it and no call to action to buy outside it (3.1.3(f))._

## The rejections indie apps actually get

**Rejection wording → cause → fix**

| 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 |

_Quoted from rejections developers posted on the Apple Developer Forums and GitHub (see Sources). Wording varies between cases._

## Linking 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.
>
> — [App Store Review Guidelines, 3.1.1(a)](https://developer.apple.com/app-store/review/guidelines/#in-app-purchase)

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.

**Show a web-purchase link only on the US storefront (StoreKit 2)**

```swift
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"
}
```

> **Check the storefront, not the device locale.** The rule follows the user's App Store storefront. A US customer travelling abroad is still on the US storefront; a phone set to US English with a German Apple account is not.

> **The Web Checkout ($129).** Want web checkout done properly? For $129 we build one conversion page, wire checkout to your subscription, and handle the deep link so web buyers open the app already signed in. https://checkout.dodopayments.com/buy/pdt_0NmV5JNVsFauRStZoAH8g?quantity=1&redirect_url=https%3A%2F%2Fasoitis.com%2Fcheckout%2Fsuccess%3Fplan%3Dwebcheckout

## What 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.

## Restore 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.

**Restore in StoreKit 2**

```swift
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](https://asoitis.com/reviews/revenuecat) covers what that layer handles for you.

## Trials, 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.

## Replying to a 3.1.1 or 3.1.2 rejection

**Reply in App Store Connect — Guideline 3.1**

```text
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.

## Sources

1. [App Store Review Guidelines — 3.1 Payments](https://developer.apple.com/app-store/review/guidelines/#payments) — Apple Developer
2. [Updated guidelines for the US storefront (May 1, 2025)](https://developer.apple.com/news/?id=9txfddzf) — Apple Developer News
3. [Apple Developer Program License Agreement — Schedule 2](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/) — Apple Developer
4. [Auto-renewable subscriptions](https://developer.apple.com/app-store/subscriptions/) — Apple Developer
5. [Forum: unlocking content with codes rejected under 3.1.1](https://developer.apple.com/forums/thread/748871) — Apple Developer Forums
6. [Forum: subscription information rejection (EULA link, billed amount)](https://developer.apple.com/forums/thread/807082) — Apple Developer Forums
7. [Issue: rejected for missing Restore Purchases](https://github.com/hyochan/react-native-iap/issues/90) — GitHub

## Related

- [Guideline 2.1: App Completeness](https://asoitis.com/app-review/guideline-2-1-app-completeness) — The other purchase rejection: products that are missing or fail when the reviewer buys them.
- [Guideline 5.1.1: Data Collection](https://asoitis.com/app-review/guideline-5-1-1-data-collection) — Why you can't force sign-up before a purchase, and what account deletion requires.
- [RevenueCat vs Superwall](https://asoitis.com/compare/revenuecat-vs-superwall) — Choosing the paywall stack that will show the disclosures reviewers look for.
- [The Paywall Setup — $99](https://asoitis.com/fixes) — RevenueCat installed, one paywall built, the purchase flow sandbox-tested.
- [All app review fixes](https://asoitis.com/app-review)


## Have it done for you

**The Paywall Setup — $99 one-time.** 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.

- Buy: https://checkout.dodopayments.com/buy/pdt_0NmV5JJbN2YIgdIn5lyfT?quantity=1&redirect_url=https%3A%2F%2Fasoitis.com%2Fcheckout%2Fsuccess%3Fplan%3Dpaywall
- 15-minute founder call: https://cal.com/ahmedgagan/asoitis-chat

## About ASOitis

ASOitis is a founder-run App Store Optimization (ASO) and Generative Engine Optimization (GEO) agency for indie iOS apps. iOS only; organic ASO + GEO + funnel work, implemented for you. Reference library: https://asoitis.com/app-review, https://asoitis.com/reviews, https://asoitis.com/compare, https://asoitis.com/glossary, https://asoitis.com/aso
