New Version of the PurpleAir API on July 18th

2 questions:

  1. Lat, Long, and Altitude are all null when I pull them using the new API. Has anyone else has this issue? Will these fields be added soon?
  2. Do you have plans to extend the timeframes for pulling historical data? It would be helpful if I could pull at least 4 days worth of real-time/2-min data.


I second this: is it possible to retrieve more than 3 days worth of historical data with the API? Or do we just have to manually download it ourselves?

The number of days of data you can retrieve at a time depends on the average you use:

Real-time: 2 days
10 Minute : 3 days
30 minute: 7 days
1 hr: 14 days
6hr: 90 days
1 day: 1 year

I thought this was posted but am having trouble recalling where. If one was to loop, a call for real-time data, do you know if there is a limit?
Such as 26 PurpleAir sensors, looped to call real-time data for a month period?

Hi, I’m using the Python example mentioned at (Making API Calls in Other Languages) to download 1440 minutes-averaged historical data over the CONUS in 2021. I’m downloading historical data from all stations one by one in a for loop.
This is the URL I’m using in function “getSensorData” to download one station:
I ran the code and it used to download data, however, it’s now unable to get data and I get error “JSONDecodeError: Expecting value”.
Can anyone help me please?

After the function, I use below codes to retrieve data from JSON.
D = getSensorData(sensor_index) # sensor_index is 131075 here
One_Sensor_Info = D.json()

The error raises in line “One_Sensor_Info = D.json()”

Thanks in advance,

Hi @masoud_ghahremanloo, try removing the “sensor_index” field from your request, as that is not a valid field. It will return by default.

Dear Ethan, Thanks for the prompt response. There was a mistake in typing my question and I typed it again. I appreciate it if you can check it again.

No worries, thank you for that correction. I believe the error occurs due to the time you are trying to collect data. You are most likely receiving this status 400 error message, “10 minute average history maximum time span is three (3) days.” To display error messages, I believe you can print “D.text” to the terminal.

​If you go up a few comments, you can see one that includes the date ranges you can collect data for.

Dear Ethan. Thanks for checking.
I’m averaging in 1440 minutes (one day) in 2021 and the I think I can collect data up to 1 year this way.
I think the problem is with the line
One_Sensor_Info = D.json()
in the code.

Dear Ethan,
When I use “report = response.text”, I can see data (copied below) in the report. However the JSON file for the request is not working when I use “One_Sensor_Info = response.json()” or “One_Sensor_Info = json.loads(response.text)” and I get the error “JSONDecodeError: Expecting ‘,’ delimiter”.
I also realized that when I use “request” to pull data from PurpleAir servers, sometimes I get PM2.5 concentrations for that station, and sometimes not (for the same station). It seems that servers sometimes reject to send PM2.5 concentrations to users and data is empty.
Your help is really appreciated.

my_api_read_key = ***
my_url = “
my_headers = {‘X-API-Key’:my_api_read_key}
response = requests.get(my_url, headers=my_headers)

Report when using “response.text”:
“api_version” : “V1.0.11-0.0.31”,
“time_stamp” : 1659125099,
“sensor_index” : 131075,
“start_timestamp” : 1609459200,
“end_timestamp” : 1640995199,
“average” : 1440,
“fields” : [“time_stamp”,“pm2.5_atm”],
“data” : [

Is the Thingspeak historical endpoint deactivated already?

As I know, it’s been deactivated.

If true it’s unfortunate for me that they didn’t provide more time when both services would be available. A number of programs I’ve written will take time to rewrite not only due to the API change but the data is in one file now vs four.

No, the ThingSpeak API has not been deactivated. We do not have an exact date of when it will end, but it is expected to be sometime this month (August).

I’m getting an error when making API calls for sensor history all of a sudden.

  "api_version" : "V1.0.11-0.0.34",
  "time_stamp" : 1659966366,
  "error" : "ApiDisabledError",
  "description" : "API calls to this endpoint (get_sensor_history) have been restricted. Please try again later or contact PurpleAir for more information."

I’ve tried both the june2022.api.purpleair and the api.purpleair urls and they both give me the error.

I am having the same problem on my end.

1 Like

I am also getting this error the last few days now.
“api_version” : “V1.0.11-0.0.34”,
“time_stamp” : 1659971831,
“error” : “ApiDisabledError”,
“description” : "API calls to this endpoint (get_sensor_history) have been restricted.

1 Like

I’m also getting the ApiDisabledError on “Get Sensor History” as of Monday August 8th. @Bruno22 if these errors also match what you’re getting, there might not be anything to be done until PurpleAir can address it.

Hi @Jasmine_Bootman, I have been receiving information from the development team and working on a post. I am still waiting for a bit more information.

For context, I deleted a post just now that linked to an article I am working on. I’m not sure why it was visible, that may have been my mistake. I will link it here once it is completed.

Recently, the historical endpoints have become restricted due to extremely heavy use. To use the historical API, you will need to be granted access. You can email with your API keys and a description of your API usage to be granted access.

1 Like

The article is now listed, although it does not include much different information. You can read it here: Historical API Endpoints are now Restricted.