> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getflowpilot.io/llms.txt
> Use this file to discover all available pages before exploring further.

# App Store review

> How FlowPilot paywalls stay compliant, plus a ready-to-paste App Review notes template.

Subscription paywalls are one of the most scrutinized parts of App Review. FlowPilot is built so a paywall you author is compliant by construction: prices come from the store, the required disclosures are structurally present, and restore is always available. This page covers what that gives you, and a notes template you can paste into your App Store Connect submission.

## Why FlowPilot paywalls pass review

The compliance rules are enforced in three places, so you do not have to remember them: the Offers blocks carry the right structure, the publish validator blocks a non-compliant paywall, and the SDK enforces the runtime behavior.

* **Prices and trials come from the device.** Plan cards read the live, localized price and trial terms from StoreKit through RevenueCat. Typing a price into paywall copy is a publish error, so what the user sees is always what they will be charged.
* **The disclosures are present.** The legal footer block renders your Terms and Privacy links and the auto-renewal disclosure, and publishing is blocked if the links are missing.
* **Restore is available and user-initiated.** A restore action is required in the flow, and the SDK only restores when the user taps, never on its own.
* **Trial copy matches eligibility.** A "free trial" line is bound to real eligibility, so it only shows to users who are actually eligible.
* **Grace-period users are left alone.** RevenueCat reports billing-grace and retry users as entitled, so `skipIfEntitled` does not paywall someone who is already paying.

## Pre-submission checklist

<AccordionGroup>
  <Accordion title="The paywall shows the full billed price most prominently">
    The price the user will be charged, including the renewal price after any trial, must be the most prominent price on the screen. Bind your primary plan card and CTA to the `paywall` price variables, and do not bury the real price under a per-month breakdown.
  </Accordion>

  <Accordion title="Auto-renewal terms and a trial disclosure are visible">
    The legal footer covers auto-renewal. If you offer a trial, state its length and the price after it, and keep that copy bound to trial eligibility so it only appears for eligible users.
  </Accordion>

  <Accordion title="Terms and Privacy links work">
    Both links must be present and must open. Set them in the paywall's monetization settings; the legal footer renders them and the validator enforces them.
  </Accordion>

  <Accordion title="Restore works">
    There is a restore control, and restoring on a fresh install returns the user's active entitlement. Test this by deleting and reinstalling with a sandbox account that already purchased.
  </Accordion>

  <Accordion title="The reviewer can get past the paywall">
    The single most common rejection is a reviewer who cannot complete or dismiss the paywall to see the app. Make sure a sandbox purchase succeeds, or the paywall is dismissible, or your review notes explain exactly how to proceed. See the template below.
  </Accordion>
</AccordionGroup>

## Hard paywalls

A hard paywall, one the user cannot dismiss without subscribing, is allowed by Apple. The practical risk is that a reviewer must still be able to evaluate your app. If you ship a hard paywall:

* Provide a working sandbox account in your review notes, and confirm a sandbox purchase actually unlocks the app.
* Consider a soft gating mode during review, or a reviewer-only bypass, if a sandbox purchase is unreliable.
* Remember that gating mode is reported to your app on the result. FlowPilot controls the close affordance; your app decides what a dismissal means for feature access.

## App Review notes template

Paste this into the **Notes** field of your App Store Connect submission (or your reviewer notes), filling in the bracketed parts.

```text theme={null}
This app uses a subscription paywall.

How to reach it:
  [e.g. Launch the app, complete the 3-step onboarding, and the paywall
   appears before the home screen.]

Sandbox account for testing:
  Apple sandbox tester: [sandbox-tester@example.com]
  (A sandbox purchase unlocks full access. No real charge is made.)

To get past the paywall:
  - Tap "[Continue / Start Free Trial]" and complete the sandbox purchase, OR
  - Tap "Restore" if the sandbox account already has an active subscription, OR
  - [If soft: tap the close control in the top corner to continue without subscribing.]

Subscription details:
  Product(s): [Pro Monthly - $9.99/mo, Pro Annual - $59.99/yr, 7-day free trial]
  Terms of Use: [https://example.com/terms]
  Privacy Policy: [https://example.com/privacy]

The paywall is delivered by FlowPilot, a server-driven UI SDK. The paywall is
declarative content rendered by native code already in the binary; nothing
executable is downloaded. Prices and trial terms are read from StoreKit on the
device at runtime.
```

<Tip>
  Test the paywall on a real device with the sandbox account you list in the notes, immediately before submitting. A reviewer following your steps should reach the same result you did.
</Tip>

## Related pages

* [Build a paywall](/paywalls/building-a-paywall)
* [iOS integration](/paywalls/ios)
* [Expo integration](/paywalls/expo)
* [Paywalls overview](/paywalls/index)
