I have setup offer codes and subscriptions for users to purchase, when a user signs up using an offer code outside of the app the offer code does not save into my database where the subscriptions are saved
the transaction is successful and validated by store kit but I cant see that that user used an offer code - an example
https://apps.apple.com/redeem/?ctx=offercodes&id=6744338284&code=ASKDOM
I then setup an edge function in supabase to retrieve the data that store kit sends back and im not sure where to find the offer code as it still doesnt save
is there an internal apple reference that they use as apposed to the users offer code i.e offer code askdomSA = P3050 for example
how can Identify if an offer code was used
thank you
Subscriptions
RSS for tagGive users access to content, services, or premium features in your app on an ongoing basis with subscriptions, a type of in-app purchase.
Posts under Subscriptions tag
141 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello Apple Support Team,
We are using auto-renew plans in our app
We have set the webhook URL in our App Store Connect account to get the Store server notification to get the auto renew data for an user
The issue is when a user purchases any auto-renew plan at the auto-renew time, we are getting null data from the Apple side.
We have printed the log's data to check what data are coming from the Apple webhook. we have attached our logs data please check it and let me know what can we do to resolve this
Topic:
App & System Services
SubTopic:
Notifications
Tags:
Subscriptions
App Store Server Notifications
App Store Server Library
Hi,
I'm new to AppStore Connect, and I'm learning how subscriptions work.
I'm finalizing my first app, but on my TF, I'm having some issues with the price: it's always displayed in US dollars on my paywall. When I tap "subscribe," the Apple sheet correctly offers the price in euros.
I'm using Product.displayPrice to display the price in my paywall. The documentation did mention it is
The localized string representation of the product price, suitable for display.
So, is it normal in my case for the price in dollars to be displayed and not the price in euros like the Apple sheet?
Thank you in advance for your help.
Hi Apple Team,
I'm a Nigerian developer building an app for local users, and I’m facing a major challenge:
Due to CBN regulations, most Nigerian cards can’t make international payments and do not support Dynamic currency conversion, which means In-App Purchases (IAP) don’t work for most Nigerians.
My app involves real-world services with external rewards and users would have to subscribe to be members, yet it’s unclear whether IAP is still mandatory.
If I am forced to use IAP, most Nigerian users simply can’t pay, and I lose nearly all revenue.
Questions:
Can developers targeting Nigeria use local gateways like Paystack or Flutterwave instead of IAP ?
Will Apple provide alternatives or guidance for regions where IAP is effectively unusable?
This is a critical issue for many local developers. I’d appreciate any official clarification.
Thanks,
Joseph
(Nigerian Developer)
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
Subscriptions
App Store Receipts
Advanced Commerce API
I have created an app and for the final stage i added subscription feature. This works great in testflight, but not when i push out to external testers. I set up what i needed to in apple store connect (i must have done it right as it works in testflight), and i linked it to th emost recent version.
Nothing I do seems to get the sub info to display and pull through to the app in the sub box when selected. No price and the usual stuff.
I was told send for review. Failed the review and im working on that but something tell sme this is a glitch athat needs fixed on my account maybe.
Can anyone help please
I’m trying to submit my app for review, but I’m currently blocked due to a recurring issue with in-app subscriptions.
Both of my auto-renewable subscriptions (premium_monthly and premium_yearly) are marked as “Waiting for Review”. However, I am still seeing the blue box stating that “your first subscription must be submitted with a new app version.” Despite creating a new version (1.0.1) and uploading/selecting a new build , I am not seeing the “In-App Purchases and Subscriptions” section on the version page, and I therefore cannot link the subscriptions before submitting.
This issue is blocking my ability to submit the app for review. Any help to resolve this would be greatly appreciated.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
Subscriptions
App Review
Hi Apple Developer Support,
We're currently implementing auto-renewable subscriptions in a React Native app using the react-native-iap library. The subscription purchases are working as expected in Sandbox. We receive the transaction and purchaseUpdatedListener gives us a valid-looking transactionReceipt
However, when we attempt to validate this receipt with Apple's servers, the response consistently returns status code 21002, indicating that the receipt data is either malformed or missing.
We’ve confirmed the receipt is well-formed, properly passed as received, and well above the minimum size expected. The shared secret is correctly configured and matches the subscription group. We're using the correct sandbox endpoint and ensuring no modification is done to the receipt before validation.
Despite this, validation fails every time. We are looking for guidance or clarification on what might cause this status, especially when the receipt is coming directly from the system after a successful test purchase.
const purchaseUpdateSub = purchaseUpdatedListener(async (purchase) => {
console.log("🛒 Purchase Updated:", purchase);
const receipt = purchase.transactionReceipt;
if (!receipt) {
Alert.alert("Error", "No receipt found.");
setLoading(false);
return;
}
});
the response is:
{ "status": 21002 }
Any guidance on why this might be happening would be appreciated. Thanks!
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
Subscriptions
App Store Connect
In-App Purchase
Hello everyone
The in-app subscription / purchase aren't loading in the version of my app that I'm submitting onto App Store Connect. Locally, I use StoreKit config to test/develop my app.
I already have my subscription groups and legal stuff set up properly. However, when I goto my subscription group, a blue notice says
Your first subscription must be submitted with a new app version. Create your subscription, then select it from the app’s In-App Purchases and Subscriptions section on the version page before submitting the version to App Review.
Once your binary has been uploaded and your first subscription has been submitted for review, additional subscriptions can be submitted from the Subscriptions section. Learn More
But when I goto Appstore Connect -> Apps -> the app I'm working on -> iOS -> Version 1.0 Prepare for Submission, I can't find any section regarding "In-App Purchases and Subscriptions". I also can't find it after going into the build by clicking on the build number(there's only Test Information and Build Metadata)
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
Subscriptions
App Store Connect
We are trying to implement / test in-app purchase for our subscription purchase in the app. We have done all the steps listed in the documentation on apple's website; and
Our subscription plan is sitting in 'Ready to Submit' state.
However, we are getting an empty response from,
final response = await _iap.queryProductDetails({'com.company.xyz.basic1m'});
debugPrint(" Check: ${response.toString()}");
debugPrint("❌ Responses: ${response.productDetails.map((ProductDetailsResponse)=>ProductDetailsResponse.toString()).toList()}");
debugPrint("❌ Responses: ${response.productDetails.length}");
if (response.notFoundIDs.isNotEmpty) {
debugPrint("❌ Not found: ${response.notFoundIDs}");
} else if (response.productDetails.isNotEmpty) {
debugPrint("✅ Product loaded: ${response.productDetails.first.title}");
}
The response we get is,
flutter: Check: Instance of 'ProductDetailsResponse'
flutter: ❌ Responses: []
flutter: ❌ Responses: 0
flutter: ❌ Not found: [com.company.xyz.basic1m]
Note: We are testing with a real device iphone 13 mini via Xcode.
We tried to test using, ''com.apple.test.Subscription1.monthly'', as instructed but we have not been successful with that. And seems like (based on online search), it doesn't work all the time.
We also searched online for a solution, and some of the forums suggest that we have to submit the app for review when adding subscription for the first time. It doesn't mention the same that in the apple documentation. It confusing.
Help and guidance in this regard would be really appreciated.
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Tags:
Subscriptions
StoreKit Test
App Store Connect
In-App Purchase
I am stuck.
Apple asked me to modify the Name/Description of one of my Subscriptions.
But the subscription is "In Review" and everything (including the save button) is disabled. It's lierally impossible for me to update the Name/Description like they are asking for.
I have tried rejecting my submission but they are still locked. I have asked Apple Review for help - like changing the status so that I can edit them but they won't.
I can't get out of review until I modify the Name/Description of a Subscription but I can't update the Name/Description of a Subscription until I'm out of review.
HELP!! 😭
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
Subscriptions
App Review
In-App Purchase
Hi, I'm reaching out to report a recurring issue with in-app purchases on iOS that seems to be related to Apple’s transaction handling — not to third-party libraries.
In my Flutter application, I use both StoreKit2 and StoreKit1 (for comparison) via different packages, including the official in_app_purchase package. However, in both cases, I’m experiencing unexpected reuse of transactionId and appTransactionId values, even when initiating fresh purchases with unique appAccountToken values.
Problem Summary:
Purchase Stream Returns Old Purchases
When calling buyNonConsumable() with a new product, the purchase stream still returns data for a previously purchased product, despite clearing all Sandbox transactions and using a new applicationUserName for each attempt.
Transaction IDs Reused Across Distinct Purchases
Even when generating a new UUID for appAccountToken on each purchase, the returned appTransactionId and transactionId are reused — this breaks our server-side logic, which expects these fields to uniquely identify purchases and users.
Example Logs:
// First purchase
{
"appAccountToken": "2d5a0880-f68e-44a7-a414-f51204e63904",
"appTransactionId": "704464472748013865",
"transactionId": "2000000928154716"
}
// Second purchase (different user context)
{
"appAccountToken": "2d5a0880-f68e-44a7-a414-f51204e63904",
"appTransactionId": "704464472748013865",
"transactionId": "2000000928429780"
}
Even when using a different productId, the appTransactionId stays the same. When using StoreKit1, the productId updates properly, but the transactionId still matches the previous one.
This behavior also affects App Store Server Notifications (V2): we have observed notifications tied to appAccountTokens from completely different user accounts (based on internal logs), sometimes delayed by days or weeks.
I’ve prepared a reproducible example using the official Flutter in_app_purchase sample with minimal changes — you can find it here:
Github gist
The code is almost identical to the package example. I only added UUID generation for applicationUserName in _getToken(). In the actual app (not in this example), I retrieve the token from an API.
Additional Observations from the Community:
We’ve also found similar issues reported in other frameworks and languages. For instance, a developer using react-native-iap observed that App Store Server Notifications in TestFlight were tied to previously deleted users, even after signing up with a new user account and generating a new appAccountToken. Details here:
User A deleted → User B signs up → receives upgrade event with User A’s token
Notification uses appAccountToken from old account, not the new one
This strengthens the suspicion that the issue may be related to how Apple associates transactions with Apple IDs in test environments.
Questions:
Is it expected for transactionId or appTransactionId to persist across purchases within the same Apple ID, even for different user contexts (e.g., separate logins in the same app)?
Is there any official recommendation for avoiding this kind of data reuse in Sandbox or TestFlight environments?
Should I expect appAccountToken in server notifications to always match the latest value provided during the purchase?
Thank you in advance for your assistance. I would appreciate any clarification or advice regarding this issue, as it impacts production logic that relies on these identifiers being unique and consistent.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
StoreKit Test
StoreKit
In-App Purchase
After I configured a consumable subscription(In App Purchases) on the apple platform, when I change the price in the App's server, is there any existing apple Api support to change the price on the apple platform? Of course, I know I need to resubmit.
Hello, why Apple use a generic billing descriptor for charges (e.g., "APPLE.COM/BILL", "APL*APPLE"), which does not include the app name?
As a result, unexperienced users associate any Apple charge on their bank statement with our app, even if it's a charge from another app or service they’ve used.
This is leading to:
Confusion and mistrust from our users
An increase in wrongful refund requests
Support burden for an issue outside of our control
We kindly request Apple to consider including the app name in the billing descriptor (like Google Play does).
We understand Apple manages all billing, but the current setup causes confusion that unfairly impacts our app’s reputation and support load.
Thank you
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
Subscriptions
App Store
App Store Connect
We have used the ApplePayRecurringRequest parameter required for Apple Pay subscriptions, but during testing the payment, the Apple Pay payment page shown to the user remains the same as the one-time payment page, without any subscription information. Could you please check if there is an issue with our parameters or if there is an issue with the merchantIdentifier being used?
Here is the ApplePayRequestData that we are using.
{
"supportedMethods": "https://apple.com/apple-pay",
"data": {
"version": 3,
"merchantIdentifier": "***",
"merchantCapabilities": [
"supports3DS",
"supportsCredit",
"supportsDebit"
],
"supportedNetworks": [
"visa",
"masterCard"
],
"countryCode": "US",
"recurringPaymentRequest": {
"paymentDescription": "A description of the recurring payment to display to the user in the payment sheet.",
"regularBilling": {
"label": "Recurring",
"amount": "4.99",
"paymentTiming": "recurring",
"recurringPaymentStartDate": "2025-06-02T16:00:00.000Z"
},
"trialBilling": {
"label": "7 Day Trial",
"amount": "0.00",
"paymentTiming": "recurring",
"recurringPaymentEndDate": "2025-06-02T16:00:00.000Z"
},
"billingAgreement": "A localized billing agreement displayed to the user in the payment sheet prior to the payment authorization.",
"managementURL": "https://applepaydemo.apple.com",
"tokenNotificationURL": "https://applepaydemo.apple.com"
},
"additionalLineItems": [
{
"label": "7 Day Trial",
"amount": "0.00",
"paymentTiming": "recurring",
"recurringPaymentEndDate": "2025-06-02T16:00:00.000Z"
},
{
"label": "Recurring",
"amount": "4.99",
"paymentTiming": "recurring",
"recurringPaymentStartDate": "2025-06-02T16:00:00.000Z"
}
]
}
Hi all,
We currently offer 12 auto-renewable subscription plans on the App Store. We’re looking to remove (delist) a few of these subscriptions so they are no longer visible or available for purchase by new users — but we want to ensure existing subscribers can continue renewing without any issues.
To clarify:
We are not changing the subscription type or pricing.
There are no in-app code changes involved.
This is purely about managing subscription visibility and availability in App Store Connect.
Can anyone confirm:
Is it possible to hide specific subscription products from new users while keeping them active for current subscribers?
What are the exact steps in App Store Connect to do this?
Thanks in advance for the guidance!
Hello,
Can anyone help me with the below? I've been sent the below bolded, italicized message three time in a row now with no further explanation.
_**Please note that links are required to be included in both of the metadata and the binary.
We noticed that your app binary is still missing:
A functional link to your privacy policy
A functional link to your Terms of Use
This information is required for apps which include auto-renewable subscriptions.**_
My reviewer initially instructed me to include my terms of use link in my app description (as my privacy policy was already displayed). I followed that instruction and that subsequently started the persistence of the bolded, italicized message.
For full context, the links are in my app description and on my paywall inside of the app itself. I need help and clarity on what I'm missing so I can get the app approved.
Also, if anyone knows any alternative ways of allowing users to purchase a subscription within the app that Apple allows - I would appreciate that information, as it seems this process is too complicated for me.
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
Subscriptions
App Review
Privacy
App Binary
I’m facing an issue with In-App Purchases. I’ve completed the setup successfully. I logged in with User A's Apple account on an iPhone and completed a purchase. After that, I logged in with User B's account on the same iPhone. When I try to make the same purchase, I get the following error:
“Purchase is a duplicate and will not be reported.”
Because the purchase was already made using User A’s Apple ID, I’m unable to make the same purchase again using User B’s account on the same device.
Could you please guide me on how to handle this situation?
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Tags:
Subscriptions
StoreKit Test
App Store Connect
In-App Purchase
Can't add banking info in App Store Connect - getting 400 error when
searching for any bank in any country.
Steps:
App Store Connect → Banking setup
Search any bank, any country
"We could not find banks matching criteria" + 400 error in dev tools
Tried:
Multiple browsers/incognito
Different countries
Clear cache
This is blocking my Paid Apps Agreement (shows "Pending User Info") and my app review for in-app purchases.
Anyone else having this issue? Any workarounds?
Thanks!
This really shouldn't be this difficult. Here's the situation:
We had a card linked to our Apple Developer account, which expired. It had already seen 2 successful membership purchases.
We had auto-renewal turned on for the membership, which failed due to the expired card.
I was unable to capture new payment details for about 2 days (battling with various Apple payment pages to get the new card added). But finally managed to do so.
Now, there is no way to disable auto-renewal, and no way to trigger renewal. The membership is in expired status. We can't post updates, we can't take apps live. We have several clients eagerly awaiting publication of their apps.
And Apple Support has been silent for over two weeks despite numerous requests.
Anyone have any idea how to resolve this? I've tried almost every option described on every forum post.
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Tags:
Subscriptions
Developer Program
we want to launch a new app with subscriptions. our first 2 reviews were rejected because these subscriptions were through stripe. The review told us that we should make part of our app available for free. However we would like to keep our existing business model. Can we solve this by removing stripe and switching to in-app purchases from apple? We want to put our entire app behind a pay wall but allow the user to learn all the features through a 7 day trial period. thanks for your advice