App Store Connect API

RSS for tag

The App Store Connect API helps you automate tasks usually done on the Apple Developer website and App Store Connect.

App Store Connect API Documentation

Posts under App Store Connect API subtopic

Post

Replies

Boosts

Views

Activity

URGENT: Severe Performance Issue with App Store Connect API (In-App Purchases Retrieval)
Hello Apple Support Team, We are currently experiencing a critical business issue caused by a sudden performance degradation in the App Store Connect API. This problem is blocking key parts of our production systems at wappier Optimizing game performance - website: https://wappier.com/ Since October 15, requests to the following endpoint have been taking extremely long to complete when fetching more than approximately 200 in-app purchase items. In many cases, these requests never complete even after several hours, making it impossible for us to retrieve all required data. Endpoint: https://api.appstoreconnect.apple.com/v1/apps/1252850847/inAppPurchasesV2 Parameters: { "include": "appStoreReviewScreenshot,inAppPurchaseLocalizations", "cursor": "Jd6I", "limit": "200" } We confirm that: This behavior started suddenly on October 15. No changes were made on our end. We found no corresponding updates or API change announcements in your release notes. Requests for fewer than 200 in-app products continue to perform normally. This issue is blocking our operations, as our systems depend on timely responses from this endpoint for in-app purchase data synchronization. We kindly ask your team to investigate this issue urgently and provide us guidance, and if possible, revert any recent change introduced around October 15 that could have impacted this endpoint’s performance. Thank you very much for your prompt attention and support. wappier Dev Team
0
2
208
Oct ’25
App Store Connect API `inAppPurchaseV2` returns `links.next`, even when there's no more `data`
I think there's been a recent change to the App Store Connect API; I claim that it's a bug. When querying App Store Connect API endpoints that return arrays, like https://api.appstoreconnect.apple.com/v1/apps, the response includes a links property, of type PagedDocumentLinks. https://developer.apple.com/documentation/appstoreconnectapi/pageddocumentlinks links should include a next link only if there's more data to provide, and, indeed, this is how it works for the /v1/apps endpoint. But when querying inAppPurchasesV2, I find that starting very recently (this week?) the API always returns a next link, even if there's no more data to show. { data: [], links: { self: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=APo&limit=50', first: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?limit=50', next: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=ASw' }, meta: { paging: { total: 223, nextCursor: 'ASw', limit: 50 } } } If I request the next link, it will generate me another response with empty data and with a new cursor. { data: [], links: { self: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=ASw&limit=50', first: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?limit=50', next: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=AV4' }, meta: { paging: { total: 223, nextCursor: 'AV4', limit: 50 } } } Code I've written against this API (including my open-source library https://github.com/dfabulich/node-app-store-connect-api) assumes that if there's another links.next link, we should follow it; as a result, my code is looping infinitely, requesting empty data until eventually I have to give up. This issue doesn't affect other endpoints, like /v1/apps, just this inAppPurchasesV2 endpoint. Was this an intentional change? It seems to be a bug.
4
5
565
Nov ’25
[iOS 26 presentOfferCodeRedeemSheet] Custom Offer Code fails with "The code entered is not valid"
Hello everyone, I'm having trouble testing custom offer codes for my auto-renewable subscription in the Sandbox environment. I am using the modern StoreKit 2 API to display the redemption sheet: try await StoreKit.AppStore.presentOfferCodeRedeemSheet(in: windowScene) When I enter a valid custom code that I created in App Store Connect, the system sheet immediately returns the following error: "Cannot Redeem Code. The code entered is not valid. [environment: sandbox]" To be clear, I am manually typing the custom code string itself into the redemption sheet's text field, not using a one-time code link or URL. I believe my configuration is correct, and I've already spent a significant amount of time troubleshooting. Here is a list of everything I have checked and tried so far: App Store Connect Configuration: The Offer Code is marked as "Active". The parent subscription product is approved and its status is "Ready for Sale". The offer's eligibility is set correctly The start and end dates for the offer are valid. Despite all these steps, the error persists. At this point, I suspect this might be a temporary issue with the Sandbox environment itself, but I want to make sure I haven't missed any crucial configuration steps. Has anyone else encountered this issue recently? Is there anything else I should be checking? Any help would be greatly appreciated. Thank you.
1
1
384
Jan ’26
can't submit version with App Store Connect Api
I’m currently automating our iOS release pipeline with the App Store Connect API. TestFlight and App Store version creation are mostly working, but I’m stuck at the “submit for review” step. Below are the endpoint I’m calling, the payload, and the error I receive: > url: https://api.appstoreconnect.apple.com/v1/appStoreReviewSubmissions > method: POST > params: None > json: {'data': {'type': 'appStoreReviewSubmissions', 'relationships': {'appStoreVersion': {'data': {'type': 'appStoreVersions', 'id': '62db20b9-1bc6-4b1a-9b52-9834a807c377'}}}}} > response: <Response [404]> > ASCAPIError(404): The specified resource does not exist: The path provided does not match a defined resource type. | errors=[{'id': '32d2c224-0f1c-4592-a02d-a4f87b13b6b7', 'status': '404', 'code': 'NOT_FOUND', 'title': 'The specified resource does not exist', 'detail': 'The path provided does not match a defined resource type.'}] The official documentation app-store-version-submissions doesn't mention the endpoint, and I could not find any working example in open-source CLI tools. Questions: Does the App Store Connect API actually support submitting an App Store version for review? If yes, where can I find the exact endpoint & required scope documented? If no, is there a canonical list of what the API can and cannot do so I can confirm the limitation? Any pointers to docs or working code samples would be greatly appreciated.
0
0
202
Sep ’25
App Store Connect Age Rating API
I have a problem with the API to set some values. For example under section Violence, I can set following categories: Cartoon or Fantasy Violence Realistic Violence Prolonged Graphic or Sadistic Realistic Violence But not: Guns or Other Weapons Here I am refering to this documentation: https://developer.apple.com/documentation/appstoreconnectapi/ageratingdeclarationupdaterequest/data-data.dictionary/attributes-data.dictionary For following sections it is also not possible via API: Capabilities: Unrestricted Web Access user-Generated Content Mesaging and Chat Advertising Medical or Wellness Health or Wellness Topics medical or treatment Information I would like to know if it is planned from your side to support the setting of those fields via the App Store Connect API. And if yes, when will this be possible?
0
0
64
Sep ’25
Payment report API
Hi, In the AppstoreConnect website it's possible to retrieve the payments and estimated proceeds. Is it possible to recover it automaticaly with an API ? I saw "Payments and Proceeds" documentation (https://developer.apple.com/help/app-store-connect/getting-paid/view-payments-and-proceeds), and the "Download Sales and Trends Reports" API documentation (https://developer.apple.com/documentation/appstoreconnectapi/get-v1-salesreports). But none can retrieve the amount that Apple proceeds to the bank account. I need this because I sell in different countries with different currencies. And I manage different Apple accounts. Best Regards,
0
0
142
Sep ’25
API Key for customerReviewResponses
We're trying to test submitting a review response through the App Store Connect API. The documentation states that an API key with the role App Manager should allow this. However when testing I get a 403 response with the error: { "errors": [ { "id": "15eb1546-78e2-45a6-b1f4-3cc96166b5fb", "status": "403", "code": "FORBIDDEN_ERROR", "title": "This request is forbidden for security reasons", "detail": "The API key in use does not allow this request" } ] } Can anyone tell me where I'm going wrong? According to the documentation the API key should work.
0
0
75
Sep ’25
Non-GET methods for `passTypeIds` are failing
I am trying to delete and create pass type ids. In both cases I get error 400 which means that at least my token is valid. In case of deletion I make a DELETE request to /v1/passtypeIds/{id} where {id} is 10 character string. And I get 400 error back with basically no (or rather nonsensical) explanation: "JSON processing failed". What JSON? There is no request body for this request.
0
0
167
Sep ’25
How to match App Store Connect UI for “Installations” & “First-time downloads” from Analytics Reports (dedupe/versioning guidance?)
We fetch the App Store Analytics – App Installs & Deletions (Daily) report via the Analytics Reports API and land each delivery into S3. The rows we ingest contain fields like Date, Event, Download Type, Counts, and Unique Devices. We’re trying to compute for example Installations and First-time downloads so our warehouse totals match the App Store Connect UI exactly, but our counts are consistently higher when we aggregate (with filter conditions being the same). Questions: (1) Official dedupe/versioning approach: What's the recommended approach to avoid double counting across API deliveries and to match the UI exactly? If later deliveries can revise past dates, what field(s) or process should we rely on to decide which records to keep for a given Date? (2) Completeness window: For daily data, is the recommended approach to publish rolling values that may change for a few days, or waiting until dates are considered “complete” before reporting? Any best-practice guidance would be helpful. Thanks!
2
3
328
Oct ’25
403 Forbidden error
Hello Apple Developer Support, I am facing an issue when attempting to use the App Store Connect API with my API key. While basic access (e.g., /v1/apps) works correctly, any requests related to Certificates, Identifiers & Profiles (CIP) are failing with a 403 Forbidden error. Here are the details of the request and validation results: JWT Details: { "header": { "alg": "ES256", "kid": "2XLW343BLM", "typ": "JWT" }, "payload": { "iss": "9cf6159c-e038-4703-b542-7652242a6dbf", "iat": 1757515277, "exp": 1757516357, "aud": "appstoreconnect-v1" } } Test Results: ✅ /v1/apps?limit=1 → Status: 200 (working) ❌ /v1/bundleIds?limit=1 → Status: 403 Error: Unable to find a team with the given Content Provider ID 9cf6159c-e038-4703-b542-7652242a6dbf to which you belong. ❌ /v1/certificates?limit=1 → Status: 403 Error: This request is forbidden for security reasons. ❌ /v1/profiles?limit=1 → Status: 403 Error: Unable to find a team with the given Content Provider ID. I have already confirmed that: All API keys were generated correctly. All required roles and permissions have been assigned in App Store Connect. It seems that while public access endpoints are functioning, the CIP endpoints are blocked for my account/key. Could you please advise: Why the given Content Provider ID is not being recognized? Whether additional permissions, roles, or configuration are required to enable access to Certificates, Identifiers, and Profiles through the API? If it is possible to reset or refresh my membership/team configuration so that I can successfully access the App Store Connect API endpoints for CIP. Thank you for your support and guidance. Best regards
13
15
1.7k
Sep ’25
Deploymet from FlutterFlow
When trying to deploy my app to App Store Connect from FlutterFlow, I keep receving this error message: This request is forbidden for security reasons - Unable to find a team with the given Content Provider ID '********' to which you belong. Please contact Apple Developer Program Support. https://developer.apple.com/support .
2
1
141
Sep ’25
Issue: Offer Code Redemption Sheet Not Closing and Missing Receipt
Dear Apple Support Team, We are experiencing an issue with the Offer Code Redemption Sheet in our iOS app. Despite following Apple’s recommended approaches, the redemption sheet does not close automatically after a user successfully redeems a code. We have implemented both methods as suggested in the documentation: StoreKit 2 (iOS 16+): AppStore.presentOfferCodeRedeemSheet(in: scene) StoreKit 1 (iOS 14–15): SKPaymentQueue.default().presentCodeRedemptionSheet() Expected behavior: The sheet should automatically close after a successful code redemption and provide a receipt for verification. Observed behavior: The sheet remains open even after a code is successfully redeemed, and we do not receive a receipt to validate the redemption. We would greatly appreciate guidance or any workaround to ensure that: The redemption sheet closes automatically after redemption. A valid receipt is delivered for verification. For your reference, we are testing on: iOS versions: 16+, 15+ Device models: iPhone 16 and others Please let us know if additional information, logs, or screen recordings are needed to investigate this issue.
0
0
114
Sep ’25
TestFlight Beta Build Webhook Events Missing (Shown in WWDC25 but Not available in API/Portal)
I am trying to add webhook subscriptions for TestFlight build processing completion and TestFlight beta build review completion events. These were showcased in the WWDC25 session: https://developer.apple.com/videos/play/wwdc2025/324/ Currently, I am able to receive webhook events for distribution updates, and the corresponding checkmark option is available in the App Store Connect portal. However, there is no checkmark option in the portal to subscribe to beta build-related events. In the video, there is clearly a checkmark option for the beta review event subscription (at 4:55). The current documentation also does not mention beta processing and beta review event subscriptions. It only lists the event types that are visible in the web portal: https://developer.apple.com/documentation/appstoreconnectapi/webhookeventtype When I try to add the BUILD_BETA_DETAIL_EXTERNAL_BETA_STATE_UPDATED event (as shown in the video at 6:10) via the PATCH API request, I get the below error. "errors": [ { "id": "****-****-****-****-*********3851", "status": 409, "code": "ENTITY_ERROR.ATTRIBUTE.TYPE", "title": "An attribute in the provided entity has the wrong type", "detail": "'BUILD_BETA_DETAIL_EXTERNAL_BETA_STATE_UPDATED' is not a valid value for the attribute 'eventTypes/3'.", "expectedValues": [ "APP_STORE_VERSION_APP_VERSION_STATE_UPDATED", "BETA_FEEDBACK_CRASH_SUBMISSION_CREATED", "BETA_FEEDBACK_SCREENSHOT_SUBMISSION_CREATED" ], "source": { "pointer": "/data/attributes/eventTypes/3" } } ] } The App Store Connect web portal also does not provide a checkmark option for subscribing to this event type. My questions are: Are the TestFlight build processing completion and beta build review completion webhook events coming soon, or do they already exist? Are there any other ways to get beta build events apart from polling?
2
0
264
Oct ’25
v1/appPriceSchedules 409
BASE_TERRITORY="USA" app_id = "*******" # your app id app_price_points_id = "eyJzIjoiNjc1MTMwOTAyNiIsInQiOiJVU0EiLCJwIjoiMTAwMTEifQ" # query and get manual_price_id = "manualPrice-0" update_app_price_url = "https://api.appstoreconnect.apple.com/v1/appPriceSchedules" update_app_price_payload = { "data": { "type": "appPriceSchedules", "relationships": { "app": { "data": {"type": "apps", "id": app_id} }, "baseTerritory": { "data": {"type": "territories", "id": BASE_TERRITORY} }, "manualPrices": { "data": [{"id": manual_price_id, "type": "appPrices"}] } } }, "included": [ { "type": "appPrices", "id": manual_price_id, "attributes": {"startDate": None}, "relationships": { "appPricePoint": { "data": {"type": "appPricePoints", "id": app_price_points_id} } } } ] } update_app_price_resp = requests.post(update_app_price_url, headers=headers, data=json.dumps(update_app_price_payload)) if update_app_price_resp.status_code == 201: update_app_price_id = update_app_price_resp.json()["data"]["id"] print(f"✅ Success : {update_app_price_id}") else: print(f"❌ Failed : {update_app_price_resp.status_code} {update_app_price_resp.text}") sys.exit(1) There was no problem a week ago, but now it reports an error ❌ Failed : 409 { "errors" : [ { "id" : "69a6e006-b99c-4d58-880c-0225c1eff581", "status" : "409", "code" : "ENTITY_ERROR.INCLUDED.INVALID_ID", "title" : "The provided entity id is invalid", "detail" : "The provided included entity id 'USA-1.0' has invalid format", "source" : { "pointer" : "/included/0/id" } } ] }
5
2
543
Aug ’25
subscriptionPromotionalOffers
问题描述: 创建苹果商品的促销优惠功能异常,查询官方接口文档,发现接口协议没有变更(协议文档:https://api.appstoreconnect.apple.com/v1/subscriptionPromotionalOffers) ,有人了解id字段的格式是什么?应该如何传值? 请求参数: {"data":{"attributes":{"duration":"ONE_WEEK","name":"20250817_test_2055","numberOfPeriods":1,"offerCode":"20250817_test_2055","offerMode":"FREE_TRIAL"},"relationships":{"prices":{"data":[{"id":"e467f67b-3d75-4319-aa6a-adebfc9f80da","type":"subscriptionPromotionalOfferPrices"}]},"subscription":{"data":{"id":"6673898723","type":"subscriptions"}}},"type":"subscriptionPromotionalOffers"},"included":[{"id":"e467f67b-3d75-4319-aa6a-adebfc9f80da","type":"subscriptionPromotionalOfferPrices","relationships":{"territory":{"data":{"id":"AUS","type":"territories"}}}}]} 响应参数: { "errors" : [ { "id" : "49d94648-0a8a-4aba-8856-72e69ac56aca", "status" : "409", "code" : "ENTITY_ERROR.INCLUDED.INVALID_ID", "title" : "The provided entity id is invalid", "detail" : "The provided included entity id 'e467f67b-3d75-4319-aa6a-adebfc9f80da' has invalid format", "source" : { "pointer" : "/included/0/id" } } ] }
0
1
160
Aug ’25
/v1/financeReports returns 400 error with HTML dump
Starting from 2025-08-07, our backoffice system always got 400 error when calling /v1/financeReports. In previous months, we can get the report successfully with no issue. Here is one dump with some header hidden, The response looked very strange, it is not a json response but a HTML dump. The request URI is like following: ?filter[regionCode]=US&filter[reportDate]=2025-10&filter[reportType]=FINANCE_DETAIL&filter[vendorNumber]=XXXXXX I used the key to generate JWT, and use postman to access the endpoints, I couldn't get the prevous month reports any more. based on the http status code and response, it is quite clueless which parameter caused issue. Anyone encountered similiar issue, really appreciated for the help.
2
0
169
Aug ’25
Unable to download sales report
Hello, I’m encountering a consistent HTTP 400 – Bad Request error when attempting to retrieve daily sales reports via the App Store Connect API. The request format follows the official documentation: https://developer.apple.com/documentation/appstoreconnectapi/get-v1-salesreports. Here is an example of the request I’m making: curl --location --globoff \ ' https://api.appstoreconnect.apple.com/v1/salesReports?filter[frequency]=DAILY&filter[vendorNumber]=<REDACTED VENDOR NUMBER>&filter[reportDate]=2025-08-11&filter[reportType]=SALES&filter[reportSubType]=SUMMARY' \ --header 'Authorization: Bearer <REDACTED_JWT>' This request worked without issues until August 6, 2025 (Obviously using the previous day date), but from August 7 onward it returns a 400 error. Could you please confirm: Whether there have been any changes to the required query parameters (e.g., filter[version]). If there are any known issues with the SALES / SUMMARY / DAILY endpoint. Aside from the images attached, our buffer error also shows: new Uint8Array([60, 33, 100, 111, 99, 116, 121, 112, 101, 32, 104, 116, 109, 108, 62, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 34, 101, 110, 34, 62, 60, 104, 101, 97, 100, 62, 60, 116, 105, 116, 108, 101, 62, 72, 84, 84, 80, 32, 83, 116, 97, 116, 117, 115, 32, 52, 48, 48, 32, 226, 128, 147, 32, 66, 97, 100, 32, 82, 101, 113, 117, 101, 115, 116, 60, 47, 116, 105, 116, 108, 101, 62, 60, 115, 116, 121, 108, 101, 32, 116, 121, 112, 101, 61, 34, 116, 101, 120, 116, 47, 99, 115, 115, 34, 62, 98, 111, 100, 121, 32, 123, 102, 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 84, 97, 104, 111, 109, 97, 44, 65, 114, 105, 97, 108, 44, 115, 97, 110, 115, 45, 115, 101, 114, 105, 102, 59, 125, 32, 104, 49, 44, 32, 104, 50, 44, 32, 104, 51, 44, 32, 98, 32, 123, 99, 111, 108, 111, 114, 58, 119, 104, 105, 116, 101, 59, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114, 58, 35, 53, 50, 53, 68, 55, 54, 59, 125, 32, 104, 49, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 50, 50, 112, 120, 59, 125, 32, 104, 50, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 54, 112, 120, 59, 125, 32, 104, 51, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 52, 112, 120, 59, 125, 32, 112, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 50, 112, 120, 59, 125, 32, 97, 32, 123, 99, 111, 108, 111, 114, 58, 98, 108, 97, 99, 107, 59, 125, 32, 46, 108, 105, 110, 101, 32, 123, 104, 101, 105, 103, 104, 116, 58, 49, 112, 120, 59, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114, 58, 35, 53, 50, 53, 68, 55, 54, 59, 98, 111, 114, 100, 101, 114, 58, 110, 111, 110, 101, 59, 125, 60, 47, 115, 116, 121, 108, 101, 62, 60, 47, 104, 101, 97, 100, 62, 60, 98, 111, 100, 121, 62, 60, 104, 49, 62, 72, 84, 84, 80, 32, 83, 116, 97, 116, 117, 115, 32, 52, 48, 48, 32, 226, 128, 147, 32, 66, 97, 100, 32, 82, 101, 113, 117, 101, 115, 116, 60, 47, 104, 49, 62, 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62]) Thank you for your assistance.
2
4
259
Aug ’25
/v1/salesReports API started returning 400 Bad Request
We run an analytics query every day; this worked fine for the past 6 years or so. Two days ago this query has stopped working. It always returns a non-descript 400 Bad Request. Here's the exact query: curl \ -H 'Accept: application/a-gzip' \ -H 'Authorization: Bearer <TOKEN>' \ 'https://api.appstoreconnect.apple.com/v1/salesReports?filter[frequency]=DAILY&filter[reportType]=SALES&filter[reportSubType]=SUMMARY&filter[version]=1_0&filter[vendorNumber]=<VENDOR>' And the response: <!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1></body></html> I have confirmed that the <TOKEN> is correct (with an incorrect token I get a specific error message). Same with missing or incorrect filter parameters: the API returns an exact error message. I have also confirmed that our vendor number is correct (from AppstoreConnect › Payments and Financial Reports, top left corner), though specifying an invalid vendor number yields the same non-descript 400 Bad Request. With seemingly valid filter parameters, (no matter the report type or frequency or specifying a date) I always get the generic 400 Bad Request. Has something changed in the API?
8
3
782
Aug ’25
Apple Arcade Bonus Payout Report Download via App Store Connect API
I'm looking to automate the download of the Apple Arcade Bonus Payout Report accessible via the App Store Connect "Sales and Trends Reports" page. I've been looking at the documentation for the App Store Connect API here: https://developer.apple.com/documentation/appstoreconnectapi/get-v1-salesreports This page makes it seem as though there is no API connection for the Apple Arcade Bonus Payout Report - is this the case? If so, does anyone have any good solutions for automating downloads of this data source.
0
0
128
Aug ’25
Calendar permission issue
Are game applications allowed to have permission to read and write the calendar? Is this permission limited to certain types of applications? Are there any specific requirements for developers when using calendar read/write permissions? If so, what steps should developers follow to utilize this permission?
Replies
1
Boosts
0
Views
154
Activity
Oct ’25
URGENT: Severe Performance Issue with App Store Connect API (In-App Purchases Retrieval)
Hello Apple Support Team, We are currently experiencing a critical business issue caused by a sudden performance degradation in the App Store Connect API. This problem is blocking key parts of our production systems at wappier Optimizing game performance - website: https://wappier.com/ Since October 15, requests to the following endpoint have been taking extremely long to complete when fetching more than approximately 200 in-app purchase items. In many cases, these requests never complete even after several hours, making it impossible for us to retrieve all required data. Endpoint: https://api.appstoreconnect.apple.com/v1/apps/1252850847/inAppPurchasesV2 Parameters: { "include": "appStoreReviewScreenshot,inAppPurchaseLocalizations", "cursor": "Jd6I", "limit": "200" } We confirm that: This behavior started suddenly on October 15. No changes were made on our end. We found no corresponding updates or API change announcements in your release notes. Requests for fewer than 200 in-app products continue to perform normally. This issue is blocking our operations, as our systems depend on timely responses from this endpoint for in-app purchase data synchronization. We kindly ask your team to investigate this issue urgently and provide us guidance, and if possible, revert any recent change introduced around October 15 that could have impacted this endpoint’s performance. Thank you very much for your prompt attention and support. wappier Dev Team
Replies
0
Boosts
2
Views
208
Activity
Oct ’25
App Store Connect API `inAppPurchaseV2` returns `links.next`, even when there's no more `data`
I think there's been a recent change to the App Store Connect API; I claim that it's a bug. When querying App Store Connect API endpoints that return arrays, like https://api.appstoreconnect.apple.com/v1/apps, the response includes a links property, of type PagedDocumentLinks. https://developer.apple.com/documentation/appstoreconnectapi/pageddocumentlinks links should include a next link only if there's more data to provide, and, indeed, this is how it works for the /v1/apps endpoint. But when querying inAppPurchasesV2, I find that starting very recently (this week?) the API always returns a next link, even if there's no more data to show. { data: [], links: { self: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=APo&limit=50', first: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?limit=50', next: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=ASw' }, meta: { paging: { total: 223, nextCursor: 'ASw', limit: 50 } } } If I request the next link, it will generate me another response with empty data and with a new cursor. { data: [], links: { self: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=ASw&limit=50', first: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?limit=50', next: 'https://api.appstoreconnect.apple.com/v1/apps/1363309257/inAppPurchasesV2?cursor=AV4' }, meta: { paging: { total: 223, nextCursor: 'AV4', limit: 50 } } } Code I've written against this API (including my open-source library https://github.com/dfabulich/node-app-store-connect-api) assumes that if there's another links.next link, we should follow it; as a result, my code is looping infinitely, requesting empty data until eventually I have to give up. This issue doesn't affect other endpoints, like /v1/apps, just this inAppPurchasesV2 endpoint. Was this an intentional change? It seems to be a bug.
Replies
4
Boosts
5
Views
565
Activity
Nov ’25
[iOS 26 presentOfferCodeRedeemSheet] Custom Offer Code fails with "The code entered is not valid"
Hello everyone, I'm having trouble testing custom offer codes for my auto-renewable subscription in the Sandbox environment. I am using the modern StoreKit 2 API to display the redemption sheet: try await StoreKit.AppStore.presentOfferCodeRedeemSheet(in: windowScene) When I enter a valid custom code that I created in App Store Connect, the system sheet immediately returns the following error: "Cannot Redeem Code. The code entered is not valid. [environment: sandbox]" To be clear, I am manually typing the custom code string itself into the redemption sheet's text field, not using a one-time code link or URL. I believe my configuration is correct, and I've already spent a significant amount of time troubleshooting. Here is a list of everything I have checked and tried so far: App Store Connect Configuration: The Offer Code is marked as "Active". The parent subscription product is approved and its status is "Ready for Sale". The offer's eligibility is set correctly The start and end dates for the offer are valid. Despite all these steps, the error persists. At this point, I suspect this might be a temporary issue with the Sandbox environment itself, but I want to make sure I haven't missed any crucial configuration steps. Has anyone else encountered this issue recently? Is there anything else I should be checking? Any help would be greatly appreciated. Thank you.
Replies
1
Boosts
1
Views
384
Activity
Jan ’26
can't submit version with App Store Connect Api
I’m currently automating our iOS release pipeline with the App Store Connect API. TestFlight and App Store version creation are mostly working, but I’m stuck at the “submit for review” step. Below are the endpoint I’m calling, the payload, and the error I receive: > url: https://api.appstoreconnect.apple.com/v1/appStoreReviewSubmissions > method: POST > params: None > json: {'data': {'type': 'appStoreReviewSubmissions', 'relationships': {'appStoreVersion': {'data': {'type': 'appStoreVersions', 'id': '62db20b9-1bc6-4b1a-9b52-9834a807c377'}}}}} > response: <Response [404]> > ASCAPIError(404): The specified resource does not exist: The path provided does not match a defined resource type. | errors=[{'id': '32d2c224-0f1c-4592-a02d-a4f87b13b6b7', 'status': '404', 'code': 'NOT_FOUND', 'title': 'The specified resource does not exist', 'detail': 'The path provided does not match a defined resource type.'}] The official documentation app-store-version-submissions doesn't mention the endpoint, and I could not find any working example in open-source CLI tools. Questions: Does the App Store Connect API actually support submitting an App Store version for review? If yes, where can I find the exact endpoint & required scope documented? If no, is there a canonical list of what the API can and cannot do so I can confirm the limitation? Any pointers to docs or working code samples would be greatly appreciated.
Replies
0
Boosts
0
Views
202
Activity
Sep ’25
App Store Connect Age Rating API
I have a problem with the API to set some values. For example under section Violence, I can set following categories: Cartoon or Fantasy Violence Realistic Violence Prolonged Graphic or Sadistic Realistic Violence But not: Guns or Other Weapons Here I am refering to this documentation: https://developer.apple.com/documentation/appstoreconnectapi/ageratingdeclarationupdaterequest/data-data.dictionary/attributes-data.dictionary For following sections it is also not possible via API: Capabilities: Unrestricted Web Access user-Generated Content Mesaging and Chat Advertising Medical or Wellness Health or Wellness Topics medical or treatment Information I would like to know if it is planned from your side to support the setting of those fields via the App Store Connect API. And if yes, when will this be possible?
Replies
0
Boosts
0
Views
64
Activity
Sep ’25
Payment report API
Hi, In the AppstoreConnect website it's possible to retrieve the payments and estimated proceeds. Is it possible to recover it automaticaly with an API ? I saw "Payments and Proceeds" documentation (https://developer.apple.com/help/app-store-connect/getting-paid/view-payments-and-proceeds), and the "Download Sales and Trends Reports" API documentation (https://developer.apple.com/documentation/appstoreconnectapi/get-v1-salesreports). But none can retrieve the amount that Apple proceeds to the bank account. I need this because I sell in different countries with different currencies. And I manage different Apple accounts. Best Regards,
Replies
0
Boosts
0
Views
142
Activity
Sep ’25
API Key for customerReviewResponses
We're trying to test submitting a review response through the App Store Connect API. The documentation states that an API key with the role App Manager should allow this. However when testing I get a 403 response with the error: { "errors": [ { "id": "15eb1546-78e2-45a6-b1f4-3cc96166b5fb", "status": "403", "code": "FORBIDDEN_ERROR", "title": "This request is forbidden for security reasons", "detail": "The API key in use does not allow this request" } ] } Can anyone tell me where I'm going wrong? According to the documentation the API key should work.
Replies
0
Boosts
0
Views
75
Activity
Sep ’25
Non-GET methods for `passTypeIds` are failing
I am trying to delete and create pass type ids. In both cases I get error 400 which means that at least my token is valid. In case of deletion I make a DELETE request to /v1/passtypeIds/{id} where {id} is 10 character string. And I get 400 error back with basically no (or rather nonsensical) explanation: "JSON processing failed". What JSON? There is no request body for this request.
Replies
0
Boosts
0
Views
167
Activity
Sep ’25
How to match App Store Connect UI for “Installations” & “First-time downloads” from Analytics Reports (dedupe/versioning guidance?)
We fetch the App Store Analytics – App Installs & Deletions (Daily) report via the Analytics Reports API and land each delivery into S3. The rows we ingest contain fields like Date, Event, Download Type, Counts, and Unique Devices. We’re trying to compute for example Installations and First-time downloads so our warehouse totals match the App Store Connect UI exactly, but our counts are consistently higher when we aggregate (with filter conditions being the same). Questions: (1) Official dedupe/versioning approach: What's the recommended approach to avoid double counting across API deliveries and to match the UI exactly? If later deliveries can revise past dates, what field(s) or process should we rely on to decide which records to keep for a given Date? (2) Completeness window: For daily data, is the recommended approach to publish rolling values that may change for a few days, or waiting until dates are considered “complete” before reporting? Any best-practice guidance would be helpful. Thanks!
Replies
2
Boosts
3
Views
328
Activity
Oct ’25
403 Forbidden error
Hello Apple Developer Support, I am facing an issue when attempting to use the App Store Connect API with my API key. While basic access (e.g., /v1/apps) works correctly, any requests related to Certificates, Identifiers & Profiles (CIP) are failing with a 403 Forbidden error. Here are the details of the request and validation results: JWT Details: { "header": { "alg": "ES256", "kid": "2XLW343BLM", "typ": "JWT" }, "payload": { "iss": "9cf6159c-e038-4703-b542-7652242a6dbf", "iat": 1757515277, "exp": 1757516357, "aud": "appstoreconnect-v1" } } Test Results: ✅ /v1/apps?limit=1 → Status: 200 (working) ❌ /v1/bundleIds?limit=1 → Status: 403 Error: Unable to find a team with the given Content Provider ID 9cf6159c-e038-4703-b542-7652242a6dbf to which you belong. ❌ /v1/certificates?limit=1 → Status: 403 Error: This request is forbidden for security reasons. ❌ /v1/profiles?limit=1 → Status: 403 Error: Unable to find a team with the given Content Provider ID. I have already confirmed that: All API keys were generated correctly. All required roles and permissions have been assigned in App Store Connect. It seems that while public access endpoints are functioning, the CIP endpoints are blocked for my account/key. Could you please advise: Why the given Content Provider ID is not being recognized? Whether additional permissions, roles, or configuration are required to enable access to Certificates, Identifiers, and Profiles through the API? If it is possible to reset or refresh my membership/team configuration so that I can successfully access the App Store Connect API endpoints for CIP. Thank you for your support and guidance. Best regards
Replies
13
Boosts
15
Views
1.7k
Activity
Sep ’25
Deploymet from FlutterFlow
When trying to deploy my app to App Store Connect from FlutterFlow, I keep receving this error message: This request is forbidden for security reasons - Unable to find a team with the given Content Provider ID '********' to which you belong. Please contact Apple Developer Program Support. https://developer.apple.com/support .
Replies
2
Boosts
1
Views
141
Activity
Sep ’25
Issue: Offer Code Redemption Sheet Not Closing and Missing Receipt
Dear Apple Support Team, We are experiencing an issue with the Offer Code Redemption Sheet in our iOS app. Despite following Apple’s recommended approaches, the redemption sheet does not close automatically after a user successfully redeems a code. We have implemented both methods as suggested in the documentation: StoreKit 2 (iOS 16+): AppStore.presentOfferCodeRedeemSheet(in: scene) StoreKit 1 (iOS 14–15): SKPaymentQueue.default().presentCodeRedemptionSheet() Expected behavior: The sheet should automatically close after a successful code redemption and provide a receipt for verification. Observed behavior: The sheet remains open even after a code is successfully redeemed, and we do not receive a receipt to validate the redemption. We would greatly appreciate guidance or any workaround to ensure that: The redemption sheet closes automatically after redemption. A valid receipt is delivered for verification. For your reference, we are testing on: iOS versions: 16+, 15+ Device models: iPhone 16 and others Please let us know if additional information, logs, or screen recordings are needed to investigate this issue.
Replies
0
Boosts
0
Views
114
Activity
Sep ’25
TestFlight Beta Build Webhook Events Missing (Shown in WWDC25 but Not available in API/Portal)
I am trying to add webhook subscriptions for TestFlight build processing completion and TestFlight beta build review completion events. These were showcased in the WWDC25 session: https://developer.apple.com/videos/play/wwdc2025/324/ Currently, I am able to receive webhook events for distribution updates, and the corresponding checkmark option is available in the App Store Connect portal. However, there is no checkmark option in the portal to subscribe to beta build-related events. In the video, there is clearly a checkmark option for the beta review event subscription (at 4:55). The current documentation also does not mention beta processing and beta review event subscriptions. It only lists the event types that are visible in the web portal: https://developer.apple.com/documentation/appstoreconnectapi/webhookeventtype When I try to add the BUILD_BETA_DETAIL_EXTERNAL_BETA_STATE_UPDATED event (as shown in the video at 6:10) via the PATCH API request, I get the below error. "errors": [ { "id": "****-****-****-****-*********3851", "status": 409, "code": "ENTITY_ERROR.ATTRIBUTE.TYPE", "title": "An attribute in the provided entity has the wrong type", "detail": "'BUILD_BETA_DETAIL_EXTERNAL_BETA_STATE_UPDATED' is not a valid value for the attribute 'eventTypes/3'.", "expectedValues": [ "APP_STORE_VERSION_APP_VERSION_STATE_UPDATED", "BETA_FEEDBACK_CRASH_SUBMISSION_CREATED", "BETA_FEEDBACK_SCREENSHOT_SUBMISSION_CREATED" ], "source": { "pointer": "/data/attributes/eventTypes/3" } } ] } The App Store Connect web portal also does not provide a checkmark option for subscribing to this event type. My questions are: Are the TestFlight build processing completion and beta build review completion webhook events coming soon, or do they already exist? Are there any other ways to get beta build events apart from polling?
Replies
2
Boosts
0
Views
264
Activity
Oct ’25
v1/appPriceSchedules 409
BASE_TERRITORY="USA" app_id = "*******" # your app id app_price_points_id = "eyJzIjoiNjc1MTMwOTAyNiIsInQiOiJVU0EiLCJwIjoiMTAwMTEifQ" # query and get manual_price_id = "manualPrice-0" update_app_price_url = "https://api.appstoreconnect.apple.com/v1/appPriceSchedules" update_app_price_payload = { "data": { "type": "appPriceSchedules", "relationships": { "app": { "data": {"type": "apps", "id": app_id} }, "baseTerritory": { "data": {"type": "territories", "id": BASE_TERRITORY} }, "manualPrices": { "data": [{"id": manual_price_id, "type": "appPrices"}] } } }, "included": [ { "type": "appPrices", "id": manual_price_id, "attributes": {"startDate": None}, "relationships": { "appPricePoint": { "data": {"type": "appPricePoints", "id": app_price_points_id} } } } ] } update_app_price_resp = requests.post(update_app_price_url, headers=headers, data=json.dumps(update_app_price_payload)) if update_app_price_resp.status_code == 201: update_app_price_id = update_app_price_resp.json()["data"]["id"] print(f"✅ Success : {update_app_price_id}") else: print(f"❌ Failed : {update_app_price_resp.status_code} {update_app_price_resp.text}") sys.exit(1) There was no problem a week ago, but now it reports an error ❌ Failed : 409 { "errors" : [ { "id" : "69a6e006-b99c-4d58-880c-0225c1eff581", "status" : "409", "code" : "ENTITY_ERROR.INCLUDED.INVALID_ID", "title" : "The provided entity id is invalid", "detail" : "The provided included entity id 'USA-1.0' has invalid format", "source" : { "pointer" : "/included/0/id" } } ] }
Replies
5
Boosts
2
Views
543
Activity
Aug ’25
subscriptionPromotionalOffers
问题描述: 创建苹果商品的促销优惠功能异常,查询官方接口文档,发现接口协议没有变更(协议文档:https://api.appstoreconnect.apple.com/v1/subscriptionPromotionalOffers) ,有人了解id字段的格式是什么?应该如何传值? 请求参数: {"data":{"attributes":{"duration":"ONE_WEEK","name":"20250817_test_2055","numberOfPeriods":1,"offerCode":"20250817_test_2055","offerMode":"FREE_TRIAL"},"relationships":{"prices":{"data":[{"id":"e467f67b-3d75-4319-aa6a-adebfc9f80da","type":"subscriptionPromotionalOfferPrices"}]},"subscription":{"data":{"id":"6673898723","type":"subscriptions"}}},"type":"subscriptionPromotionalOffers"},"included":[{"id":"e467f67b-3d75-4319-aa6a-adebfc9f80da","type":"subscriptionPromotionalOfferPrices","relationships":{"territory":{"data":{"id":"AUS","type":"territories"}}}}]} 响应参数: { "errors" : [ { "id" : "49d94648-0a8a-4aba-8856-72e69ac56aca", "status" : "409", "code" : "ENTITY_ERROR.INCLUDED.INVALID_ID", "title" : "The provided entity id is invalid", "detail" : "The provided included entity id 'e467f67b-3d75-4319-aa6a-adebfc9f80da' has invalid format", "source" : { "pointer" : "/included/0/id" } } ] }
Replies
0
Boosts
1
Views
160
Activity
Aug ’25
/v1/financeReports returns 400 error with HTML dump
Starting from 2025-08-07, our backoffice system always got 400 error when calling /v1/financeReports. In previous months, we can get the report successfully with no issue. Here is one dump with some header hidden, The response looked very strange, it is not a json response but a HTML dump. The request URI is like following: ?filter[regionCode]=US&filter[reportDate]=2025-10&filter[reportType]=FINANCE_DETAIL&filter[vendorNumber]=XXXXXX I used the key to generate JWT, and use postman to access the endpoints, I couldn't get the prevous month reports any more. based on the http status code and response, it is quite clueless which parameter caused issue. Anyone encountered similiar issue, really appreciated for the help.
Replies
2
Boosts
0
Views
169
Activity
Aug ’25
Unable to download sales report
Hello, I’m encountering a consistent HTTP 400 – Bad Request error when attempting to retrieve daily sales reports via the App Store Connect API. The request format follows the official documentation: https://developer.apple.com/documentation/appstoreconnectapi/get-v1-salesreports. Here is an example of the request I’m making: curl --location --globoff \ ' https://api.appstoreconnect.apple.com/v1/salesReports?filter[frequency]=DAILY&filter[vendorNumber]=<REDACTED VENDOR NUMBER>&filter[reportDate]=2025-08-11&filter[reportType]=SALES&filter[reportSubType]=SUMMARY' \ --header 'Authorization: Bearer <REDACTED_JWT>' This request worked without issues until August 6, 2025 (Obviously using the previous day date), but from August 7 onward it returns a 400 error. Could you please confirm: Whether there have been any changes to the required query parameters (e.g., filter[version]). If there are any known issues with the SALES / SUMMARY / DAILY endpoint. Aside from the images attached, our buffer error also shows: new Uint8Array([60, 33, 100, 111, 99, 116, 121, 112, 101, 32, 104, 116, 109, 108, 62, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 34, 101, 110, 34, 62, 60, 104, 101, 97, 100, 62, 60, 116, 105, 116, 108, 101, 62, 72, 84, 84, 80, 32, 83, 116, 97, 116, 117, 115, 32, 52, 48, 48, 32, 226, 128, 147, 32, 66, 97, 100, 32, 82, 101, 113, 117, 101, 115, 116, 60, 47, 116, 105, 116, 108, 101, 62, 60, 115, 116, 121, 108, 101, 32, 116, 121, 112, 101, 61, 34, 116, 101, 120, 116, 47, 99, 115, 115, 34, 62, 98, 111, 100, 121, 32, 123, 102, 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 84, 97, 104, 111, 109, 97, 44, 65, 114, 105, 97, 108, 44, 115, 97, 110, 115, 45, 115, 101, 114, 105, 102, 59, 125, 32, 104, 49, 44, 32, 104, 50, 44, 32, 104, 51, 44, 32, 98, 32, 123, 99, 111, 108, 111, 114, 58, 119, 104, 105, 116, 101, 59, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114, 58, 35, 53, 50, 53, 68, 55, 54, 59, 125, 32, 104, 49, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 50, 50, 112, 120, 59, 125, 32, 104, 50, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 54, 112, 120, 59, 125, 32, 104, 51, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 52, 112, 120, 59, 125, 32, 112, 32, 123, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 50, 112, 120, 59, 125, 32, 97, 32, 123, 99, 111, 108, 111, 114, 58, 98, 108, 97, 99, 107, 59, 125, 32, 46, 108, 105, 110, 101, 32, 123, 104, 101, 105, 103, 104, 116, 58, 49, 112, 120, 59, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114, 58, 35, 53, 50, 53, 68, 55, 54, 59, 98, 111, 114, 100, 101, 114, 58, 110, 111, 110, 101, 59, 125, 60, 47, 115, 116, 121, 108, 101, 62, 60, 47, 104, 101, 97, 100, 62, 60, 98, 111, 100, 121, 62, 60, 104, 49, 62, 72, 84, 84, 80, 32, 83, 116, 97, 116, 117, 115, 32, 52, 48, 48, 32, 226, 128, 147, 32, 66, 97, 100, 32, 82, 101, 113, 117, 101, 115, 116, 60, 47, 104, 49, 62, 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62]) Thank you for your assistance.
Replies
2
Boosts
4
Views
259
Activity
Aug ’25
/v1/salesReports API started returning 400 Bad Request
We run an analytics query every day; this worked fine for the past 6 years or so. Two days ago this query has stopped working. It always returns a non-descript 400 Bad Request. Here's the exact query: curl \ -H 'Accept: application/a-gzip' \ -H 'Authorization: Bearer <TOKEN>' \ 'https://api.appstoreconnect.apple.com/v1/salesReports?filter[frequency]=DAILY&filter[reportType]=SALES&filter[reportSubType]=SUMMARY&filter[version]=1_0&filter[vendorNumber]=<VENDOR>' And the response: <!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1></body></html> I have confirmed that the <TOKEN> is correct (with an incorrect token I get a specific error message). Same with missing or incorrect filter parameters: the API returns an exact error message. I have also confirmed that our vendor number is correct (from AppstoreConnect › Payments and Financial Reports, top left corner), though specifying an invalid vendor number yields the same non-descript 400 Bad Request. With seemingly valid filter parameters, (no matter the report type or frequency or specifying a date) I always get the generic 400 Bad Request. Has something changed in the API?
Replies
8
Boosts
3
Views
782
Activity
Aug ’25
Apple Arcade Bonus Payout Report Download via App Store Connect API
I'm looking to automate the download of the Apple Arcade Bonus Payout Report accessible via the App Store Connect "Sales and Trends Reports" page. I've been looking at the documentation for the App Store Connect API here: https://developer.apple.com/documentation/appstoreconnectapi/get-v1-salesreports This page makes it seem as though there is no API connection for the Apple Arcade Bonus Payout Report - is this the case? If so, does anyone have any good solutions for automating downloads of this data source.
Replies
0
Boosts
0
Views
128
Activity
Aug ’25