If your app sells auto-renewable subscriptions, Apple expects a working Terms of Use (EULA) link in two places: inside the app binary and in your App Store Connect metadata. Miss either one and the submission comes back under Guideline 3.1.2, usually with a notice that lists what's missing. This guide covers where each link has to appear, the two ways to fix the metadata side, what your paywall needs to show, and how to resubmit without losing another review cycle.
Guideline 3.1.2 covers auto-renewable subscriptions. Its Subscription Information clause, 3.1.2(c), points to Schedule 2 of the Apple Developer Program License Agreement, and section 3.8(b) of Schedule 2 is where the Terms of Use rule lives. It requires links to your Privacy Policy and Terms of Use to be accessible within your app.
Apple's subscription guidance on developer.apple.com adds the metadata side: your app and your App Store metadata must both include links to your Terms of Use and Privacy Policy. So a 3.1.2 Terms of Use rejection means the links are missing from the binary, from App Store Connect, or from both. The rejection notice says which, so read it before you change anything.
Apple's 3.1.2 rejection notices accept the Terms of Use (EULA) link in either the App Description or the EULA field. The description is the quickest fix. Add a plain line at the end, such as 'Terms of Use: https://yourapp.baseterms.com/terms', plus a matching Privacy Policy line. The description belongs to the app version, so edit it on the version you're submitting. The notice also expects a working URL in the Privacy Policy field.
If you rely on Apple's standard EULA instead of your own terms, Apple's notice says to link to it in the App Description. The standard EULA lives at apple.com/legal/internet-services/itunes/dev/stdeula/. Apple applies it automatically to any app without a custom EULA, but in that case App Store Connect doesn't show a license agreement link on your product page. The link in your description fills that gap.
To make your own terms the EULA, open your app in App Store Connect, go to App Information, click Edit next to License Agreement, choose to apply a custom EULA, and paste your terms into the Custom License Agreement field. That field takes plain text only and Apple strips HTML, so you paste the terms themselves, not a link. Adding the description link as well gives the reviewer something to click.
Apple's rejection notices list what the binary must include for auto-renewable subscriptions: the subscription title, its length, its price (and price per unit where appropriate), and functional links to the privacy policy and Terms of Use. Schedule 2 only says the links must be accessible within your app, but the purchase screen is the safest place for them. A common pattern is two tappable links under the subscribe button, labeled Terms of Use and Privacy Policy.
Apple's subscription guidance also says the sign-up screen must show the subscription name and duration, what the user gets, the full renewal price, and a way to restore purchases, with the billed amount as the most prominent pricing element. Burying the billed amount under a free trial or weekly breakdown is its own 3.1.2 rejection. Before you upload, tap both links on a real device: a link that 404s or lands on your homepage isn't functional.
If the notice only cites metadata, you don't need a new build. Add the Terms of Use link to the description (or set the custom EULA) on the rejected version, reply to the App Review message saying where the link now appears, and resubmit. If the notice cites the binary, ship a new build with the paywall links and fix the metadata in the same submission so it doesn't come back a second time.
For a short checklist version of this fix, see our Guideline 3.1.2 rejection page at baseterms.com/rejections/guideline-3-1-2-subscription-terms-missing.
Check 'Has in-app purchases or subscriptions' in BaseTerms and the generated Terms of Service adds a Subscriptions and In-App Purchases section. It covers billing to the user's Apple ID or Google Play account, auto-renewal unless cancelled at least 24 hours before the period ends, cancellation through device account settings, refunds through Apple or Google, and price changes. The page is hosted at yourapp.baseterms.com/terms, so one URL works for your App Description and your paywall, and your Privacy Policy sits next to it at /privacy. Copy the raw Markdown free, or host on the subdomain for $9 one-time.
Ready to ship?
Privacy Policy, Terms, Support, plus Data Deletion if your app has accounts — ready to paste into App Store Connect and Google Play Console. Copy the raw Markdown free or host on a custom subdomain for $9 one-time.
One-time payment. No subscription. No renewal fees.