A required reason API is one Apple thinks could fingerprint a phone, and an undeclared one stops before a reviewer sees it.
Apple has designated a small set of APIs as needing a declared reason, because they can be misused to read device signals and identify a person. You declare your use of them in a file named PrivacyInfo.xcprivacy, inside an array called NSPrivacyAccessedAPITypes. There are five categories as of 21 October 2026 and seventeen approved reason strings between them. Leave the declaration out and the build is turned away by App Store Connect, which is a different and earlier gate than App Review. Most people meet this while publishing to the App Store, usually from an email they did not expect.
Below: what Apple actually means by the phrase, the five categories with every reason string that goes with them, the three dated gates and which one catches what, and the thing that wastes an afternoon, which is that Apple's own pages send you to the wrong place for the list.
Start hereThe short version
Five categories, seventeen reasons, and the gate is the upload.
The five categories are active keyboards, disk space, file timestamp, system boot time and user defaults. Each one has its own short list of approved reasons, written as codes such as CA92.1, and each reason carries its own rule about whether anything may leave the device. You write the category and one or more of its reasons into PrivacyInfo.xcprivacy. Apple's technote TN3183, first published 17 December 2024, adds that the dictionary holding them contains exactly two keys and nothing else.
The part people get wrong is who checks. A missing reason is caught when the binary reaches App Store Connect, and you hear about it by email, often within minutes. App Review never enters it. The declaration is also per bundle, so a framework or dynamic library that calls one of these APIs needs its own manifest. An SDK cannot lean on the manifest of the app that links it.
What does Apple mean by a required reason API?
Apple's own framing is about fingerprinting. Some APIs your app uses to deliver its core functionality, in code you write or included in a third-party SDK, have the potential of being misused to access device signals to try to identify the device or user. That is Apple's sentence. It then states the rule that makes the whole thing non negotiable: regardless of whether a user gives your app permission to track, fingerprinting is not allowed. The declaration is read by Apple, not by shoppers on your product page. You tell Apple what you use a risky call for, so the use can be checked against what the app visibly does.
The requirement applies on iOS, iPadOS, tvOS, visionOS and watchOS. Note which platform is absent from that list: macOS. The rest of the privacy manifest, the part describing what data you collect, applies on every platform. Only the required reason half is scoped to those five, and the absence is about the requirement rather than about support, because Apple lists the key itself as available on macOS 14 and later.
Two sentences in Apple's policy aside do real work. You must declare one or more approved reasons that accurately reflect your use of each API and the data derived from it. And you may use those APIs and the derived data for the declared reasons only. Apple adds that your declared reasons must be consistent with your app's functionality as presented to users, and that you may not use the APIs or derived data for tracking. Read that twice if you were planning to pick whichever code looked easiest. Several reasons require behaviour a user can observe, which means the declaration describes your app and not just your build settings.
Scope matters too. For each executable or dynamic library in an app that calls a required reason API, the bundle containing it needs a privacy manifest reporting that API. Apple is blunt that your third-party SDK cannot rely on the privacy manifest files of apps that link it, or of other SDKs in the same app. Whose manifest carries which declaration is the whole subject of the third party sdk privacy manifest rules, which carry their own dated deadline.
Apple, Describing use of required reason API, read 21 October 2026
Which categories does Apple list, and where is the list?
Five categories, read on 21 October 2026: NSPrivacyAccessedAPICategoryActiveKeyboards, NSPrivacyAccessedAPICategoryDiskSpace, NSPrivacyAccessedAPICategoryFileTimestamp, NSPrivacyAccessedAPICategorySystemBootTime and NSPrivacyAccessedAPICategoryUserDefaults. Seventeen approved reason strings sit under them. File timestamps and disk space and user defaults each have four, system boot time has three, active keyboards has two.
Now the thing worth an afternoon of your life. Apple's article titled Describing use of required reason API tells you, in the description of the NSPrivacyAccessedAPIType key, that the value you provide must be one of the values listed in the sections below. On 21 October 2026 that article has no such sections. It contains no category names at all. Technote TN3181 sends you to the same article for possible values. TN3183 does print the five category names, in alphabetical order, but not the reason strings. The one page that carries the categories, the APIs inside each one and the reason strings together is the NSPrivacyAccessedAPIType property list key reference, under a heading called Possible Values. That is where the picker below comes from.
Five is also a snapshot and not a constant. Apple states that it continually reviews the list of required reason APIs and reasons for usage, and will update the article from time to time. It also runs a request form for a new approved reason, for apps that use a covered API to benefit users in a way no listed reason describes. So the honest version of this page is: five categories and seventeen reasons on 21 October 2026, and a list that is designed to grow.
Apple, NSPrivacyAccessedAPIType, Possible Values, read 21 October 2026
The list, in one place
Five categories, seventeen approved reasons
Pick a category to see the APIs it covers and every reason string Apple will accept for it. The strings are case sensitive and have to match exactly.
NSPrivacyAccessedAPIType value
NSPrivacyAccessedAPICategoryUserDefaults
APIs in this category
UserDefaults
CA92.1
You read and write information only your own app can reach. This does not cover reading what other apps or the system wrote.
1C8F.1
You read and write information shared with the apps, app extensions and App Clips in the same App Group.
C56D.1
Your SDK wraps a user defaults API for the app to call. SDKs only, and not if the SDK exists mainly to wrap required reason APIs.
AC6B.1
You read com.apple.configuration.managed to get managed app configuration from MDM, or write com.apple.feedback.managed for MDM to query.
Paraphrased from Apple's own wording on the NSPrivacyAccessedAPIType page, read 21 October 2026. Read the full text before you pick one, because each reason carries its own limit on what may leave the device.
What happens if the declaration is missing?
Apple documents two different outcomes and they are worth keeping apart, because people on forums blend them into one. The first is the missing declaration. If you upload an app to App Store Connect that uses a required reason API without describing the reason in its privacy manifest, Apple sends you an email reminding you to add the reason. And since 1 May 2024, apps that do not describe their use of required reason API in their privacy manifest file are not accepted by App Store Connect.
The second is an invalid declaration, which is a manifest that exists but carries unexpected keys or values. Apple's wording there is harder: App Store Connect rejects app submissions that include invalid privacy manifest files. You get an email naming the file and its path inside your bundle, and the error string in it reads ITMS-91056, Invalid privacy manifest. Technote TN3181 lists what counts as invalid, and the common cases are dull: an empty string for the category, an empty reasons array, a reason that does not belong to the category you named. Apple also notes that if you no longer use a category, you remove its dictionary rather than leaving it with an empty array.
There is a documented escape hatch when the bad file belongs to somebody else. If you cannot get a valid manifest out of an SDK developer and you need to ship, Apple tells you to find the invalid manifest in your app archive, delete it, and submit the archive from Xcode. The path comes from the email. You reach it through Window, then Organizer, then Archives, then Show Package Contents in the Finder. Apple warns that removing or modifying the file breaks the archived app's signature, and that Xcode re-signs the app when you distribute the archive from the Archives organizer.
One practical note on finding out cheaply. Apple's trigger for the reminder email is the upload to App Store Connect, and a TestFlight build is such an upload, so you can learn from a build you were going to make anyway. Expo's privacy manifests guide puts the turnaround at a few minutes after submitting. Treat the manifest as a release task rather than a launch task, the same way you would treat the google play data safety form on the other store, because both answers go stale the day somebody adds a dependency.
Is this enforced at upload or at review?
At upload, for the required reason API declaration itself. Apple names the gate in the sentence: not accepted by App Store Connect. App Store Connect is the service your binary lands in. App Review is the human step that comes after you press submit. The required reason check sits in the first one, which is why the feedback arrives as an email from the service rather than a rejection notice with a guideline number on it.
Two neighbouring rules do attach to the submit step, and conflating them with this one is the usual mistake. TN3181 says that starting 12 November 2024, apps you submit for review in App Store Connect must contain a valid privacy manifest file. Apple's page on adding a privacy manifest to your app or third-party SDK says that starting 12 February 2025, apps you submit for review must contain a valid privacy manifest for a certain number of commonly used third-party SDKs, and points at its Upcoming third-party SDK requirements support page for the list. In all three sentences the thing doing the checking is named as App Store Connect. None of them says App Review.
One honest gap. Apple's phrase for a missing reason is that the app is not accepted, and on the pages read on 21 October 2026 it does not say whether the upload itself fails outright or the build is taken and then flagged. For an invalid manifest the wording is firmer, because Apple says submissions are rejected. If you need to know which it will be for your build, the only reliable answer is to upload one and read the email. Rules that bite at submit time behave like the account deletion requirement, which a reviewer can and does check by hand.
| From | What Apple documents | Where it bites | Email names the file |
|---|---|---|---|
| 1 May 2024 | Apps that do not describe their use of required reason API in their privacy manifest are not accepted by App Store Connect | Upload to App Store Connect | No |
| 12 November 2024 | Apps you submit for review must contain a valid privacy manifest file | Submitting for review | Yes |
| 12 February 2025 | Apps you submit for review must contain a valid privacy manifest for a set of commonly used third-party SDKs | Submitting for review | Yes |
| No date, any upload | An invalid manifest is rejected, and the email carries the error string ITMS-91056 | Upload to App Store Connect | Yes |
Where does this land if a builder generated your app?
In the same place, because the manifest travels inside the bundle and the bundle is yours. An Expo project declares the file through an ios.privacyManifests field in the app config, with NSPrivacyAccessedAPITypes under it, so a category and its reasons go in as a few lines of JSON instead of a plist edit in Xcode. Expo's privacy manifests guide, last modified 29 July 2026, is where that field is documented, and it also carries a warning worth repeating: Apple does not correctly parse every PrivacyInfo file that arrives as a static CocoaPods dependency, so reasons that a package already declares may still need repeating in your own manifest.
Newly is an AI app builder. You describe an app in plain English and it writes a real React Native and Expo project you own, with two way GitHub sync, so editing the privacy manifest is editing a file in your repository. It uploads iOS builds to TestFlight, publishes to Google Play internal testing and builds a standalone Android APK. It is $25 a month and there is no free tier. It does not submit to the App Store for you, because Apple requires the owner of an app's content to submit it, which means you are the one who reads the validation email.
The honest limit: no builder can pick your reason code for you. Two of the seventeen reasons only apply if the app behaves differently in a way Apple calls observable to users. Four more only apply if you show the value to the person. Two are reserved for SDK authors wrapping an API. One is for health research apps and nothing else, and one is for reading managed configuration from MDM. Which of those describes your app is a fact about your app and not about your toolchain. What a generated project can do is start you from a manifest that exists and a config file you can see, which is further along than most people are when the email arrives.
Questions people ask about required reason APIs
It is an API Apple has designated as needing a declared reason before you may call it. Apple's wording is that some APIs your app uses to deliver its core functionality, in code you write or in a third-party SDK, have the potential of being misused to access device signals to try to identify the device or user, also known as fingerprinting. Apple adds that regardless of whether a user gives your app permission to track, fingerprinting is not allowed. You declare your use in a privacy manifest file named PrivacyInfo.xcprivacy, in the NSPrivacyAccessedAPITypes array. The requirement covers iOS, iPadOS, tvOS, visionOS and watchOS. Checked on 21 October 2026.
Build the app, then declare what it calls
Write down which of the five categories your app touches before your first upload, pick the reason that matches what the app visibly does, and the validation email becomes a formality rather than a surprise.
Start building