If you see IAP 2.1(b) completeness - relationship string rejection — read this first
Apple's rejection message says Missing Metadata or In-App Purchase completeness issue. The real cause is almost always one thing: the relationship string in your reviewSubmissions endpoint.
Not in any Apple documentation. Caught 3 of my 4 apps. Takes 15 min to fix.
The 5 rejection patterns that look like metadata problems
Missing metadata — screenshot ratio wrong, not the screenshot itself
Guideline 4.3 — App Store Connect build vs Xcode build bundle ID mismatch
IAP not enabled — capability drift between Xcode project and ASC portal
Binary rejected (Swift) — truncatingRemainder on signed accumulator in release build
The IAP 2.1(b) fix — exact steps
If your rejection says "In-App Purchase completeness issue" or "2.1(b)" — here's the check:
ASC API V2 — Check IAP relationship string
# GET your app's current inAppPurchases relationship
GET https://api.appstoreconnect.apple.com/v2/apps/{app_id}/appStoreVersions/{version_id}
# In reviewSubmissions relationship field, look for:"relationship": "inAppPurchasesV2"// CORRECT"relationship": "inAppPurchases"// WRONG - causes 2.1(b)# The fix: use inAppPurchasesV2 (plural + V2 suffix)# Not documented in ASC API docs as of 2026-05
8-step IAP Rejection Diagnostic
1
Check ASC → App Store → TestFlight tab → build state
2
GET /v1/apps/{id}/appStoreVersions → find state
3
GET /v1/apps/{id}/reviewSubmissions → find submittedDate
4
In response, check relationship: "inAppPurchasesV2" vs "inAppPurchases"
5
If wrong → PATCH /v1/apps/{id}/appStoreVersions/{version_id} with correct relationship
6
Resubmit via POST /v1/apps/{id}/reviewSubmissions
7
Wait 2-4 hours → check state for READY_FOR_SALE or new rejection
8
If new rejection → check Resolution Center, loop back to step 1