Hello,
I added new In-App Purchase into my app, it was approved on 2nd of Oct but now 7th of Oct I still cannot see it in the list of products coming from Store.
I already have 2 subscriptions and 1 In-App purchase in my app, but the new In-App purchase is still not coming from the store in available products. What could cause this?
StoreKit
RSS for tagSupport in-app purchases and interactions with the App Store using StoreKit.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Dear community,
Context
My company operates in the European Union, where not so long ago there appeared the possibility to accept an ["Alternative Terms Addendum for Apps in the EU"] (https://developer.apple.com/contact/request/download/alternate_eu_terms_addendum.pdf), which, among others, gives us the possibility to use an alternative payment provider, other than Apple's In App Purchase PSP system (ref: Apple docs). My company did accept it and was granted the StoreKit External Purchase Entitlement (com.apple.developer.storekit.external-purchase) entitlement, with which we integrated a different PSP, so now we want to incorporate the reporting to Apple's External Purchase Server API. We are currently integrating with the External Purchase Server API and have encountered a couple of issues I would appreciate clarification on:
Question 1
Is there a way to retrieve an overview or summary of the current subscription states on Apple’s servers as a result of the submitted reports to External Purchase Server API? Specifically, I would like to verify the expected outcomes before the monthly invoice is issued by Apple and to understand the subscription states for the test users I used during this process and for future reference as well.
Question 2
In one scenario, I initiated a one-year subscription, and in the middle of its period, I submitted a RENEWAL for one month with a higher price.
I expected the request to fail due to overlapping periods and/or pricing conflicts, but both submissions were accepted without error.
Do you have an idea about:
What happens at the end of the renewed month?
Will the subscription continue with the renewed (higher) amount, revert to the original (lower) annual rate, or be canceled?
Where can I view the final state and billing plan for that subscription?
Thank you for your assistance, we are looking forward for any kind of help or information regarding this topic.
Hi All
i have developed an app but when I go to download the paywall appears as it’s subscription only but it shows no prices for the subscription I get an endless swirl.
I checked the product id etc and it’s correct but the subcription on my App Store Connect shows as approved. is there another status it needs to reach before it becomes like like ready for sale?
https://apps.apple.com/gb/app/gameaware-pro/id6751592563
Is there an App Store Server API available that allows cancellation of specific subscriptions by specifying transaction_id or similar identifiers?
Background of these questions:
We occasionally suspend user accounts due to violations of our service terms and conditions. In such cases, we would like to forcibly cancel their subscriptions if possible. However, we could not find relevant information in the documentation, which is why we are reaching out with these questions.
Please let us know.
Previously I could get the sub package information after each payment via webhook but today I didn't get it. What happened?
My webhook url: https://r-connect-api-dev.mystg-env.com/webhook/appstore/notification/v2
Topic:
App & System Services
SubTopic:
StoreKit
Our app cannot retrieve in-app purchase products from the App Store. We're getting a "storekit_no_response" error when attempting to fetch product information, despite having all products properly configured in App Store Connect.
Error: IAPError(code: storekit_no_response, source: app_store, message: StoreKit: Failed to get response from platform., details: null)
Verified product IDs match exactly what's in App Store Connect
Confirmed we're using a Sandbox Test Account
Checked that In-App Purchase capability is enabled
Waited over 24 hours for product availability
Tried multiple product ID formats
This issue is preventing us from implementing subscription functionality in our app. We need assistance determining why StoreKit isn't responding to our product queries.
Thank you for your help.
Topic:
App & System Services
SubTopic:
StoreKit
I would like to know if it is allowed to offer the user to either unlock the app immediately or partake in a 3-day trial period before making a purchase.
I created 2 IAP non-consumable products; 1 for the immediate [which is at a discount] and for the after trial period ends [this is at a higher cost].
Is this something that Apple allows or is frowned upon?
We have a user that has an active subscription according to the appstore in our product but it is registering as expired. Hitting the subscribe button in the SwiftUI SK2 dialog does nothing, meaning, nothing happens.
Any ideas?
Topic:
App & System Services
SubTopic:
StoreKit
I encountered the following issues while developing in-app purchases; please help me:
When attempting to purchase a product that has already been purchased, SKPaymentQueue reports an error instead of a success message:
<SKPaymentQueue: 0x134665380>: Payment completed with error: Error Domain=ASDServerErrorDomain Code=3532 "You’re currently subscribed to this." UserInfo={NSLocalizedFailureReason=You’re currently subscribed to this., client-environment-type=Sandbox, AMSServerErrorCode=3532, storefront-country-code=USA}
After buying product A on one iPhone using a sandbox account, restoring purchases on another iPhone with the same sandbox account via paymentQueue.restoreCompletedTransactions(withApplicationUsername:) does not return the previously purchased product A data; it directly calls restoreCompletedTransactionsFinished.
Topic:
App & System Services
SubTopic:
StoreKit
I have a renewing monthly subscription in my app and recently added upgrade possibilities to yearly and 6 month subscriptions. Those new subscriptions were reviewed, approved and published to App Store.
I'm showing a modal for users in the app from where they can upgrade their subscription. Upgrading was tested with real devices on Sandbox and TestFlight. There has been successful purchases through the in app modal in production app, and directly upgrading from App Store.
However, for some users there seems to happen a failed transaction with paymentCancelled error code during the upgrade. The IAP is still successful, their subscription is upgraded and they haven't voluntarily canceled the IAP. The localized description of the error is "Toimintoa ei voitu suorittaa. (Virhe 2 kohteessa SKErrorDomain.)" which translates to "The operation could not be completed. (Error 2 in SKErrorDomain.)"
These users have various iPhones (iPhone 12 Pro, iPhone 14 Pro, iPhone 15 Pro, iPhone 16 Pro) with up to date iOS versions (>= 18.3.1).
I'm receiving DID_CHANGE_RENEWAL_PREF (UPGRADE) server notification of these purchases on my server.
I haven't been able to reproduce this error myself.
Any ideas why StoreKit might fail the transaction with paymentCancelled error but still successfully upgrade the subscription?
Topic:
App & System Services
SubTopic:
StoreKit
What platform are you targeting? And what version?
iOS, testing in Sandbox on a physical device.
What version of Xcode are you using?
[Xcode __]
What version of the OS are you testing on?
iOS 18 on iPhone 15 pro.
What specific API are you using?
StoreKit 2 via Flutter’s in_app_purchase plugin (Dart), which uses in_app_purchase_storekit under the hood.
What are the exact steps you took?
In App Store Connect, I created several Consumable IAPs (status “Ready to Submit”).
Example product IDs:
USD3.99TenMinuteCoffeePlan (Consumable)
USD24.99OneHourDinnerPlan (Consumable)
USD14.99InviteAFriendAsGenie (Consumable)
Signed in as a Sandbox tester on device (Settings → App Store → Sandbox Account).
App queries products with InAppPurchase.instance.queryProductDetails(ids) — products load successfully.
Call buyConsumable(purchaseParam: PurchaseParam(productDetails: ...)).
Listen to purchaseStream and log PurchaseDetails.
If something failed, what are the symptoms?
The purchase sheet often does not appear.
The purchase stream reports PurchaseStatus.restored, immediately, for SKUs that are marked Consumable.
Example log lines (from Dart):
Products loaded: 6
Product: id=USD3.99TenMinuteCoffeePlan, price=3.99
Product: id=USD24.99OneHourDinnerPlan, price=24.99
Product: id=USD14.99InviteAFriendAsGenie, price=14.99
Purchase update: productID=USD3.99TenMinuteCoffeePlan,
status=PurchaseStatus.restored, pendingComplete=false, purchaseID=2000000991974131
Purchase update: productID=USD24.99OneHourDinnerPlan,
status=PurchaseStatus.restored, pendingComplete=false, purchaseID=2000000992079251
Purchase update: productID=USD14.99InviteAFriendAsGenie,
status=PurchaseStatus.restored, pendingComplete=false, purchaseID=2000000999910991
Purchase update: productID=USD29.99InviteAFriendAsGenie,
status=PurchaseStatus.restored, pendingComplete=false, purchaseID=2000001003571920
If nothing failed, what results did you see? And what were you expecting?
Actual: restored events (no sheet) for items configured as Consumable.
Expected: For Consumables, a purchase sheet followed by purchased status. Consumables shouldn’t “restore”.
What else have you tried?
Verified every SKU shows Type = Consumable and Ready to Submit in App Store Connect; “Cleared for Sale” enabled; pricing/localization filled.
Created new product IDs (to avoid any prior non-consumable history).
Verified I’m not calling restorePurchases.
In the listener, I only grant benefits on PurchaseStatus.purchased (not on restored).
Observed that queryProductDetails succeeds; some IDs that aren’t fully configured return “not found,” as expected.
Minimal code (core bits):
final _iap = InAppPurchase.instance;
Future<void> init() async {
final resp = await _iap.queryProductDetails({
'USD3.99TenMinuteCoffeePlan',
'USD24.99OneHourDinnerPlan',
'USD14.99InviteAFriendAsGenie',
'USD29.99InviteAFriendAsGenie',
});
_products = resp.productDetails;
_sub = _iap.purchaseStream.listen(_onUpdates);
}
Future<void> buy(ProductDetails p) async {
final param = PurchaseParam(productDetails: p);
await _iap.buyConsumable(purchaseParam: param); // iOS SK2 path
}
void _onUpdates(List<PurchaseDetails> list) async {
for (final pd in list) {
print('status=${pd.status}, id=${pd.productID}, pending=${pd.pendingCompletePurchase}, purchaseID=${pd.purchaseID}');
switch (pd.status) {
case PurchaseStatus.purchased:
// deliver & (if pendingCompletePurchase) completePurchase
break;
case PurchaseStatus.restored:
// for consumables, I do not deliver here
break;
default:
break;
}
}
}
Questions for the community/Apple:
Under what conditions would StoreKit 2 return restored for a SKU that’s set to Consumable?
Is there any server-side caching of old product type or ownership tied to a product ID that could cause this in Sandbox?
Is “Ready to Submit” sufficient for Sandbox testing of IAPs, or must the SKUs be attached to a submitted build before StoreKit treats them as consumable?
If a product ID was ever created/purchased as Non-Consumable historically, does creating a new ASC entry with the same string ID as Consumable still cause restored for that tester?
Besides creating brand-new product IDs and/or resetting the Sandbox tester’s purchase history, is there any other recommended way to clear this state?
Happy to provide a device sysdiagnose or a stripped test project if that helps. Thanks!
when I have not verified payment method and we choose UPI then pop up shows Purchase In Progress and it shows notification for UPI app payment for apps like Gpay, Paytm. But when we approve or decline this payment StoreKit methods not called for success or failure and we have to kill app to refetch the status and stop the loader.
Hi,
We have a app with some auto-renewing subscription in a group of subscriptions.
When a user upgrade from a subscription to another, the "user receive a refund of the prorated amount of their original subscription" (https://developer.apple.com/app-store/subscriptions/).
How is the prorated calculated ?
Example : subscription to 14,99$ / month. If subscriber upgrade after 10 days, is the refund calculated 10/30 of 14,99$ (so ~5$) ?
Hi,
I am trying to obtain the subscription expiry date or purchase date from server using Storekit2 for my project.
I have an account which is already having an active subscription but it still says no purchase found.
Thanks
I have implemented in-app-purchase in one of my iOS application.
I generated the consumable products and these are approved by Apple Showing with Green check.
I used StoreKit-2 and locally testing with store sync configuration file.
The products I have created on developer accounts automatically synced by Store Configuration file and showing no the screen and I can purchase the product with Xcode environment in development.
When uploaded app to test flight, I am not getting products with sandbox email id.
Cases I have tries:
-Remove my original Apple ID from device and just testing with Apple Sandbox email id -> Not getting products.
-Remove configuration file while uploading to test flight -> not fetching products.
-Checked the archive build and its in Release mode.
Note: I am as a (Admin) team member, not account holder.
Issue:
Not fetching products on Test flight with Sandbox & in live app.
Is there something I have to track here:
Agreements for Free Apps Agreement with EFFECTIVE DATE showing 3 Jul 2025 - 20 Sep 2025 & STATUS is Active
Agreements for Paid Apps Agreement with EFFECTIVE DATE showing nothing & STATUS is New
When I test subscibe in sandbox,IOS says this transaction need to request parent’s approval。But this is a sandbox account,it don't have any family members
We have received reports from users that their in-app purchases suddenly appear as unpurchased.
We would like to know the cause of this issue.
Our implementation does not use a server; purchases are determined solely on the client side.
These reports often occur after updating the app version,
but we have been unable to reproduce the issue in our development environment.
Topic:
App & System Services
SubTopic:
StoreKit
Issue Description
I am experiencing persistent 401 Unauthorized errors when attempting to access the App Store Server API using JWT authentication. Despite following Apple's documentation and regenerating keys, I am unable to successfully authenticate.
Implementation Details
I'm implementing JWT authentication for the App Store Server API to retrieve transaction information from the following endpoint:
https://api.storekit.itunes.apple.com/inApps/v1/transactions/{transactionID}
My JWT generation code (in PHP/Laravel) follows Apple's documentation:
php$kid = '6W6H649LJ4';
$header = [
"alg" => "ES256",
"kid" => $kid,
"typ" => "JWT"
];
$iss = 'b8d99de7-b43b-4cbb-aada-546ec784e249'; // App Store Connect API Key Issuer ID
$bid = 'com.gitiho.learnCourse'; // Bundle ID
$payload = [
"iss" => $iss,
"iat" => time(),
"exp" => time() + 3600,
"aud" => "appstoreconnect-v1",
"bid" => $bid
];
$pathFileAuthKeyP8 = "AuthKey_6W6H649LJ4.p8";
$contentFileAuthKey = \File::get(base_path($pathFileAuthKeyP8));
$alg = "ES256";
$jwt = \Firebase\JWT\JWT::encode($payload, $contentFileAuthKey, $alg, null, $header);
Steps Taken to Troubleshoot
Verified that the Issuer ID is correct and in UUID format
Confirmed that the Key ID matches the private key filename
Regenerated the key with proper App Store Server API permissions
Ensured the private key file is properly formatted with correct headers and footers
Verified that the JWT is being properly encoded using the ES256 algorithm
Confirmed the bundle ID is correct for our application
Checked that the API endpoint URL is correct
Additional Information
This implementation previously worked correctly
We started experiencing 401 errors recently without changing our implementation
We are using the Firebase JWT library for PHP to encode the JWT
Request
Could you please help identify what might be causing these authentication failures? Is there any recent change in the authentication requirements or endpoint URLs that might be affecting our integration?
Thanks for support me.
Product Timeout, In App purchase is approved in App Store Connect. The Product ID and Bundle ID match.
Environment
macOS App in TestFlight
Bundle ID: com.streamtime.StreamTime
App Version: 1.1 (Build 51)
StoreKit 2
Product ID: com.streamtime.premium
Status: App & Subscription Approved
Issue
StoreKit product request (Product.products(for:)) consistently times out after 60 seconds in TestFlight, despite all connectivity checks passing. The same code works perfectly in Xcode with local StoreKit configuration.
Diagnostic Results
✅ Successful checks:
App Store connectivity (HTTP 200 from buy.itunes.apple.com)
Backend API connectivity (HTTP 200)
StoreKit 2 API available
AppStore.canMakePayments: true
Valid receipt exists
Bundle ID matches
Product ID matches approved subscription
❌ Failing:
Product request times out after 60 seconds
No products returned
Code Implementation
// Direct product request (fails in TestFlight)
let products = try await Product.products(for: ["com.streamtime.premium"])
Logs
🔍 App Bundle ID: com.streamtime.StreamTime
🔍 Product ID: com.streamtime.premium
🔍 AppStore.canMakePayments: true
🔍 Apple Store connectivity: HTTP 200
🔵 Direct request for product ID: 'com.streamtime.premium'
⏱️ Direct request start time: 2025-08-30 10:21:32 +0000
❌ TIMEOUT: Product request took longer than 60 seconds
What I've Tried
Removed manual in-app-purchase entitlement (per Apple's guidance)
Using automatic signing
Verified subscription is approved in App Store Connect
Using Sandbox Apple ID in TestFlight
Verified all network connectivity
Questions
Why does StoreKit timeout only in TestFlight when all other connectivity works?
Are there additional configuration steps needed for macOS apps vs iOS?
Could this be related to the automatic in-app purchase entitlement?
Any guidance would be greatly appreciated as this is blocking our TestFlight validation.
Topic:
App & System Services
SubTopic:
StoreKit
Hello everyone!
We are observing a significant number of failures in the fetch of the products with StoreKit1, meaning that in a completely random way, some product identifiers are considered invalid in the response that we receive from Apple, and after some minutes these products are considered once again valid.
The issue started on Thursday 04/24 around 12.00 am (UTC + 02.00) and from our dashboard we can clearly see the trend of these failures has some spikes at precise times. I am attaching a view that we use for monitoring purposes showing this trend, considering the data of this week.
We are noticing this problem on multiple developer accounts and on multiple apps, which is leading us to think it could be an issue in the Apple backend processing the request.
In our case, the apps are not launched correctly until all the products are fetched, and therefore the impact of this problem is very high.
Is anyone experiencing something similar or do you have logs which allows you to identify such issues?
The issue happens only in production, while in debug and TestFlight environment everything works well.
Thank you for your support