问题描述:
创建苹果商品的促销优惠功能异常,查询官方接口文档,发现接口协议没有变更(协议文档: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"
}
} ]
}
App Store Connect API
RSS for tagThe App Store Connect API helps you automate tasks usually done on the Apple Developer website and App Store Connect.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
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.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
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.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
Analytics & Reporting
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?
Topic:
App Store Distribution & Marketing
SubTopic:
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.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
Analytics & Reporting
// Request curl --location --request POST 'https://api.appstoreconnect.apple.com/v1/devices'
--header 'Authorization: ${the_token}'
--header 'Content-Type: application/json'
--data-raw '{ "data": { "type": "devices", "attributes": { "name": "${the_device_name}", "udid": "${the_device_udid}", "platform": "IOS" } } }'
// Response { "errors": [ { "status": "403", "code": "FORBIDDEN_ERROR", "id":"8a45808f-aa56-4e29-bef0-3f836d571a24","title": "This request is forbidden for security reasons", "detail": "You are not allowed to perform this operation. Please check with one of your Team Admins, or, if you need further assistance, please contact Apple Developer Program Support. https://developer.apple.com/support" } ] }
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
Signing Certificates
Our app ID is 708064914; When we transferred an app with Sign in with Apple function, and request the REST API to get transfer_sub, approximately 25% of the requests return error responses such as: {"error":"invalid_request","error_description":"User not found."} 001307.dba0ea2b147f45aa9e85de2abfb4c072.2047 received the first error;
We want to understand under what circumstances these errors occur. Since we have already transferred once before, this is the second transfer. The "User not found" error might be related to IDs from the original team. Is that right?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App ID
App Store Connect
Sign in with Apple REST API
Context
We hold an Apple Developer Program team account and rely on:
• Reporter tool – for downloading financial reports (Sales and Trends, etc.)
• App Store Connect API – for retrieving subscription, refund, and other sales data
We are facing several management challenges:
The Developer portal shows no history of Reporter or API requests.
Once team members are granted access, we cannot verify their exact actions (download time, report type, date range, etc.).
Lack of permission-usage auditing makes it hard to judge whether an action is legitimate or poses potential risk.
Questions
Does Apple provide an official way to view detailed request logs for the Reporter tool or the App Store Connect API?
• If yes, please indicate where to access them (developer portal location or API endpoint) and what fields are included (timestamp, account used, request parameters, etc.).
If no built-in logging exists, are there any alternative methods to help teams monitor permission usage?
• For example, an event-notification mechanism when reports are generated or data is pulled.
Are there plans to introduce an auditing feature in the future? If so, is there an estimated release timeframe?
Thanks in advance for any guidance!
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Connect
App Store Connect API
Hi, we have been getting 500 Internal server error while submitting customer review response for a while. Waited long enough, hoping that it could fix.
Endpoint: https://api.appstoreconnect.apple.com/v1/customerReviewResponses
Method: POST
status: 500
"code": "UNEXPECTED_ERROR"
Anyone has the same issue ? Any help is appreciated
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
When uploading via Xcode or transporter: the ipa file contains the icons and the info.plist with CFBundleIconFiles too.
Validation failed (409)
Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/documentation/bundleresources/information_property_list/user_interface. (ID: 0445efd3-c340-47b3-ad02-b7c7a2737b47)
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Hi,
I am currently using the App Store Connect API to retrieve metrics for my app. Specifically, I am trying to match the following metrics displayed in the App Store Connect UI under the Metrics section:
*Usage
-Installations
-Deletions
-Active Devices
*App Store
-Impressions (Unique Devices)
-Page Views (Unique Devices)
To compute these metrics, I have exported the following CSV files:
app_sessions_standard.csv
app_store_discovery_and_engagement_standard.csv
app_store_installation_and_deletion_standard.csv
However, when I try to compute the metrics from the CSV files, the values do not match those shown in the App Store Connect dashboard. Could you please clarify why there is a discrepancy between the UI metrics and the data available through the API or CSV exports? Are there any known delays, filters, or calculation differences that could explain this?
Thank you for your assistance.
Best regards,
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Our app ID is 708064914;
When we transferred an app with Sign in with Apple function, and request the REST API to get transfer_sub, approximately 25% of the requests return error responses such as:
{"error":"invalid_request","error_description":"User not found."} or {"error":"invalid_request"}
User 001700.6b50fa0cdf564b4f83e3ac6b8dfb9a9b.1205 received the first error;
User 000908.523b85e1dd704d808dbfac55425c5a7b.1916 received the second error.
Here's the English translation:
We want to understand under what circumstances these errors occur. Since we have already transferred once before, this is the second transfer. The "User not found" error might be related to IDs from the original team. However, we don't understand the meaning of the second error type and what circumstances might cause it.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
Sign in with Apple REST API
Get Transaction History V1 has been marked as deprecated. Will this interface be discontinued?
https://developer.apple.com/documentation/appstoreserverapi/get-transaction-history-v1
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Server API
Get Transaction History V1 has been marked as deprecated. Will this API be discontinued? If so, when will it be discontinued?
https://developer.apple.com/documentation/appstoreserverapi/get-transaction-history-v1
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Server API
After reading thru https://developer.apple.com/documentation/appstoreserverapi a million times, I cannot find anything that seems even remotely like the replacement for the deprecated https://developer.apple.com/documentation/appstorereceipts/verifyreceipt
Please help.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Hello. I'm currently implementing Apple Notification v2 to prepare for refunds for in-app purchases, but I'm not receiving requests from Apple servers to my backend server.
I've applied HTTPS (TLS 1.2) and correctly registered production/sandbox notification URLs on App Store Connect.
After requesting a test notification, when I check the status of testNotificationToken, I receive an UNSUCCESSFUL_HTTP_RESPONSE_CODE as follows: {"signedPayload":"......":[{"atteptDate":1752128001970,"sendAttemptResult":"UNSUCCESSFUL_HTTP_RESPONSE_CODE"}]}
The endpoint for receiving notifications is set to accept POST requests with application/json format, and it responds with 200 (OK) without any content. However, Apple notifications are not coming through.
Could anyone help me with this issue?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Server API
Hello Apple Developer Community,
I am facing a persistent issue with my iOS TestFlight builds that keeps getting rejected for Guideline 2.1 - Performance - App Completeness, specifically "Your app failed to load any content at launch." (blank white screen).
My app is "With Wans Camp Map" (App ID: com.jiro.withwanscampmap).
Here's a summary of the situation:
App Functionality: The app uses Google Sheets API to fetch campsite data (pins) and Google Maps API to display them on a map.
Local Development (Expo Go):
When running the app locally using npx expo start and connecting with the Expo Go app, and with the Google Cloud Platform (GCP) API key "Application restrictions" set to "None (no restriction)", the app loads successfully and displays all pins correctly. This confirms the API keys themselves and the data fetching logic are working.
TestFlight Builds (Rejected):
All attempts to upload builds via EAS Build (profile preview with autoIncrement: true in eas.json) and Transporter have resulted in rejection with the same Guideline 2.1 reason ("blank white screen").
Builds submitted: e.g., 1.0.0 (8), 1.0.0 (9), 1.0.0 (10). (Transporter always insists on build 8 for version 1.0.0, even after app.config.js and eas.json changes to increment. The latest successful upload was 1.0.0 (10).)
Crucially, even with the GCP API key "Application restrictions" set to "None (no restriction)" (which should allow any client application), TestFlight builds are still rejected for the blank white screen.
What I've already tried:
Verified Google Sheets/Maps API keys are correct in GCP.
Confirmed API keys are correctly passed from app.config.js (using process.env) and launch.json for local development.
Set GCP API key "Application restrictions" to "None".
Attempted various app.config.js version (1.0.0, 1.0.1, 1.0.2) and ios.buildNumber (8, 9, 10, 11, 100, 200) increments.
Ensured eas.json has autoIncrement: true for preview profile and cli.appVersionSource removed.
Updated eas-cli to @latest.
Updated all expo and react-native related dependencies using npx expo install --check.
Cleared npm cache and EAS build cache (--clear-cache).
Rebuilt native projects with npx expo prebuild --clean (though not yet built after this specific step, as I'm writing this post).
Confirmed iPhone connectivity to Mac for .ipa transfer.
My main questions are:
Given that API key restrictions are set to "None", what could still cause the app to fail loading content specifically in the TestFlight review environment?
Is it possible that TestFlight's internal bundle ID or network environment is somehow conflicting with Google API access even with no restrictions?
Why does App Store Connect consistently report the cfBundleVersion as "8" (or a small number) and reject on version conflicts, despite app.config.js and eas.json being configured for auto-incrementing/higher buildNumber? Is there a deeper cache or project state issue on Apple's side that prevents correct versioning?
Are there any specific logs (e.g., console logs from the review device) that can be provided from the App Review team to help debug this "blank white screen" issue?
What is the recommended approach to debug content loading issues in TestFlight builds when local Expo Go development works perfectly?
Any insights or suggestions from Apple engineers or experienced developers in the community would be greatly appreciated. I am truly struggling with this persistent rejection.
Thank you for your time and assistance.
Best regards,
Jiro26
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Hi everyone!
When I attempt the Post Request using Postman, as shown in my attached curl, I receive the error
"{
"errors": [
{
"status": "405",
"code": "METHOD_NOT_ALLOWED",
"title": "The request method is not valid for the resource path.",
"detail": "The request method used for this request is not valid for the resource path. Please consult the documentation."
}
]
}".
I have constructed the JWT correctly as an admin with correct private Key and Unix Times and I am able to send regular GET requests without issue and I can view the dashboards in App Store Connect.
The described POST request is being rejected, although it says so in the documentation: https://developer.apple.com/documentation/appstoreconnectapi/post-v1-analyticsreportrequests.
Curl:
curl --location 'https://api.appstoreconnect.apple.com/v1/analyticsReportRequests'
--header 'Content-Type: application/json'
--header 'Authorization: Bearer XXX'
--data '{
"data": {
"type": "analyticsReportRequests",
"attributes": {
"accessType": "ONGOING"
},
"relationships": {
"app": {
"data": {
"type": "apps",
"id": "XXXXXXXXXX"
}
}
}
}
}'
(using ONE_TIME_SNAPSHOT makes no difference)
Is this a documentation error ? I'd be happy to hear about a fix.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Connect API
Analytics & Reporting
I've been implementing in app purchases into an existing C++ app. I'm using the latest Swift StoreKit since the old ObjC interface is deprecated . There is a really weird problem where the swift/C++ bridging seems to get into a loop. After the Product structure is retrieved I have the following structure which I use to bridge to C++
public struct storeData
{
public var id : String
public var displayName : String
public var description : String
public var price : String
public var purchased : Bool = false
public var level : Int = 0
}
and this is passed back to the caller as follows
public func getProducts (bridge : StoreBridge) -> [storeData]
{
bridge.products.sort { $0.price > $1.price }
var productList : [storeData] = []
for product in bridge.products
{
let data : storeData = storeData(id: product.id,
displayName: product.displayName,
description: product.description,
price: product.displayPrice,
purchased: bridge.purchasedProductIds.contains(product.id)
)
productList.append(data)
}
return productList
}
the "bridge" variable is a bridging class where the guts of the bridge resides, and contains the "products" array as a publishable variable.
In the C++ code the data is retrieved by
outProd->id = String(inProd.getId());
outProd->displayName = String(inProd.getDisplayName());
outProd->description = String(inProd.getDescription());
outProd->price = String(String(inProd.getPrice()));
outProd->purchased = inProd.getPurchased();
The "String" is actually a JUCE string but that's not part of the problem. Testing this with a local StoreKit config file works fine but when I test with a sandbox AppStore the app hangs. Very specifically it hangs somewhere in the Swift thunk when retrieving the price. When I remove the line to retrieve the price everything works. And - and this is the weird bit - when I pad the price out with some random text, it now starts working (so I have a workaround). This is, however, slightly worrying behaviour. Ideas?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
StoreKit Test
Swift
StoreKit
We have recently ingested data using the App Store Connect API for:
App Store Discovery and Engagement
App Store Downloads
I'm unable to match figures from fairly basic reports and I can't understand where I'm going wrong.
For example:
Running figures from App Store Connect > Analytics > Metrics > Product Page Views, with no filters, for a given date (e.g. 1 July 2025) - I get a completely different figure (smaller, almost half the volume) than when I try to use the data from the App Store Discover and Engagement report for the same date. For reference, I am looking at the sum of counts when event = Page view and page type = Product page.
It's a similar thing for First-Time Downloads.
Am I missing something obvious?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Connect
Analytics & Reporting