/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?

Answered by App Store Connect Engineer in 853910022

Hi there, thank you for bringing this issue to our attention. We believe that this issue has been resolved. However, if you’re still encountering issues with this endpoint, please file a Feedback Assistant ticket and include the error logs. Kindly share the ticket number here, and we’ll be happy to investigate further.

Update: I get the same 400 Bad Request for my personal AppstoreConnect account with a different vendor number and private key. So this problem doesn't seem to be account specific.

Same for us, it's been running for years, it stopped working 2~3 days ago, returning 400 with no further explanation

Same, I have a cron job that run a JS script daily to retrieve data for my SaaS for different users and it stopped working on the 05 august. Nothing to do with permission as it stopped working for all my users.

No issue calling the API with curl or in my browser though, might resolve to that in the meantime.

Just adding that we started seeing the same problem starting on 8/7.

Accepted Answer

so it did work for me with curl, then I had to see what made it work, it seems the html formatting was the issue, not sure why it stopped working now from Apple's side, but I was able to make it work by changing my C# code from this:

        NameValueCollection queryParams = HttpUtility.ParseQueryString("");
        queryParams["filter[frequency]"]     = "DAILY";
        queryParams["filter[reportDate]"]    = day.ToString("yyyy-MM-dd");
        queryParams["filter[reportType]"]    = "SALES";
        queryParams["filter[reportSubType]"] = "SUMMARY";
        queryParams["filter[vendorNumber]"]  = VendorId;
        queryParams["filter[version]"]       = "1_0";

to this:

        string url = $"https://api.appstoreconnect.apple.com/v1/salesReports" +
                  $"?filter%5Bfrequency%5D=DAILY" +
                  $"&filter%5BreportDate%5D={day:yyyy-MM-dd}" +
                  $"&filter%5BreportType%5D=SALES" +
                  $"&filter%5BreportSubType%5D=SUMMARY" +
                  $"&filter%5BvendorNumber%5D={VendorId}" +
                  $"&filter%5Bversion%5D=1_0";

Just adding that we started seeing the same problem starting on 8/11.

Can confirm that this fix worked for us - reports stopped work on the 4th of Aug for us.

Our system is in PHP using cUrl

Changed our url from https://api.appstoreconnect.apple.com/v1/salesReports?filter[frequency]=DAILY&filter[reportSubType]=SUMMARY&filter[reportType]=SALES&filter[reportDate]=2025-08-09&filter[vendorNumber]=123XYZ

to https://api.appstoreconnect.apple.com/v1/salesReports?filter%5Bfrequency%5D=DAILY&filter%5BreportSubType%5D=SUMMARY&filter%5BreportType%5D=SALES&filter%5BreportDate%5D=2025-08-09&filter%5BvendorNumber%5D=123XYZ

Gonna be honest - this is pretty terrible - nothing in their docs, or no proper error messages back - just a blank 400 and hope that someone online has solved it already

Just waiting for Apple to realise that this is a bug on their system and then they change it back again without notice

Hi there, thank you for bringing this issue to our attention. We believe that this issue has been resolved. However, if you’re still encountering issues with this endpoint, please file a Feedback Assistant ticket and include the error logs. Kindly share the ticket number here, and we’ll be happy to investigate further.

/v1/salesReports API started returning 400 Bad Request
 
 
Q