API reference
Sensors
Every sensor of the Atmy map with its location, network, quality check and readings: PM1, PM2.5, PM10, temperature, humidity, pressure and the other channels the device reports. No sign-up and no key: plain GET requests.
List sensors
GEThttps://api.atmy.ai/v1/sensors
Sensors with their latest reading, quality and rating, 100 a page
Query parameters
city string optional
City id or slug, for example serbia/belgrade
country string optional
Country slug, for example serbia
bbox string optional
min_lon,min_lat,max_lon,max_lat
lat number optional
Sensors around a point, up to 50 km
lon number optional
Sensors around a point, up to 50 km
radius_km number optional
Sensors around a point, up to 50 km
Default: 5
network string optional
sensor_community, airgradient or atmy
quality string optional
All or passed
Default: all
min_rating number optional
Only sensors rated at least this, from 0 to 10
sort string optional
Id or rating: the most reliable sensors first
Default: id
page integer optional
Pages of up to 500 sensors
Default: 1
limit integer optional
Pages of up to 500 sensors
Default: 100
curl "https://api.atmy.ai/v1/sensors?city=serbia/belgrade&sort=rating&limit=10"const response = await fetch("https://api.atmy.ai/v1/sensors?city=serbia/belgrade&sort=rating&limit=10");
const data = await response.json();import requests
data = requests.get("https://api.atmy.ai/v1/sensors?city=serbia/belgrade&sort=rating&limit=10").json(){
"api_version": "2.0",
"total": 31,
"page": 1,
"limit": 2,
"sensors": [
{
"id": 41504,
"uuid": "b4e7f10c-bd0b-4234-aff9-41d9222affd0",
"name": "Belgrade BIG Fashion Park",
"network": "AirGradient",
"network_id": "airgradient",
"license": "CC BY-SA 4.0",
"location": {
"lat": 44.81659101498,
"lon": 20.511912304712
},
"city": {
"id": 50068,
"slug": "serbia/belgrade",
"name": "Belgrade",
"country": "Serbia"
},
"quality": {
"status": "good",
"date": "2026-10-26",
"pm_eligible": true,
"rating": 10,
"rating_7d": 10,
"scores": {
"pm": 10,
"transport": 10,
"meteo": 10
},
"reasons": []
},
"latest": {
"time": "2026-10-27T11:03:35+00:00",
"pm1": 8.4,
"pm25": 13.8,
"pm10": 14.5,
"temperature_c": 14.4,
"humidity_percent": 47
}
},
{
"id": 41752,
"uuid": "611c7e92-5462-4f8c-8766-7cfaf69fba84",
"name": "for map",
"network": "AirGradient",
"network_id": "airgradient",
"license": "CC BY-SA 4.0",
"location": {
"lat": 44.790233610673,
"lon": 20.470308143789
},
"city": {
"id": 50068,
"slug": "serbia/belgrade",
"name": "Belgrade",
"country": "Serbia"
},
"quality": {
"status": "good",
"date": "2026-10-26",
"pm_eligible": true,
"rating": 10,
"rating_7d": 10,
"scores": {
"pm": 10,
"transport": 10,
"meteo": 10
},
"reasons": []
},
"latest": {
"time": "2026-10-27T11:03:34+00:00",
"pm1": 3,
"pm25": 6,
"pm10": 7,
"temperature_c": 17.7,
"humidity_percent": 40,
"tvoc": 117.4
}
}
],
"attribution": "Sensor data: Atmy (atmy.ai), from the networks named in each sensor's \"network\", under that network's license.",
"terms": "https://atmy.ai/legal/data/"
}Sensors of one network
GEThttps://api.atmy.ai/v1/networks/{network}/sensors
The same list for one network only, with the same filters.
Path parameters
network string required
sensor_community, airgradient or atmy.
Query parameters
city string optional
City id or slug, for example serbia/belgrade
country string optional
Country slug, for example serbia
bbox string optional
min_lon,min_lat,max_lon,max_lat
lat number optional
Sensors around a point, up to 50 km
lon number optional
Sensors around a point, up to 50 km
radius_km number optional
Sensors around a point, up to 50 km
Default: 5
quality string optional
All or passed
Default: all
min_rating number optional
Only sensors rated at least this, from 0 to 10
sort string optional
Id or rating: the most reliable sensors first
Default: id
page integer optional
Pages of up to 500 sensors
Default: 1
limit integer optional
Pages of up to 500 sensors
Default: 100
curl "https://api.atmy.ai/v1/networks/atmy/sensors?sort=rating"const response = await fetch("https://api.atmy.ai/v1/networks/atmy/sensors?sort=rating");
const data = await response.json();import requests
data = requests.get("https://api.atmy.ai/v1/networks/atmy/sensors?sort=rating").json(){
"api_version": "2.0",
"total": 31,
"page": 1,
"limit": 2,
"sensors": [
{
"id": 41504,
"uuid": "b4e7f10c-bd0b-4234-aff9-41d9222affd0",
"name": "Belgrade BIG Fashion Park",
"network": "AirGradient",
"network_id": "airgradient",
"license": "CC BY-SA 4.0",
"location": {
"lat": 44.81659101498,
"lon": 20.511912304712
},
"city": {
"id": 50068,
"slug": "serbia/belgrade",
"name": "Belgrade",
"country": "Serbia"
},
"quality": {
"status": "good",
"date": "2026-10-26",
"pm_eligible": true,
"rating": 10,
"rating_7d": 10,
"scores": {
"pm": 10,
"transport": 10,
"meteo": 10
},
"reasons": []
},
"latest": {
"time": "2026-10-27T11:03:35+00:00",
"pm1": 8.4,
"pm25": 13.8,
"pm10": 14.5,
"temperature_c": 14.4,
"humidity_percent": 47
}
},
{
"id": 41752,
"uuid": "611c7e92-5462-4f8c-8766-7cfaf69fba84",
"name": "for map",
"network": "AirGradient",
"network_id": "airgradient",
"license": "CC BY-SA 4.0",
"location": {
"lat": 44.790233610673,
"lon": 20.470308143789
},
"city": {
"id": 50068,
"slug": "serbia/belgrade",
"name": "Belgrade",
"country": "Serbia"
},
"quality": {
"status": "good",
"date": "2026-10-26",
"pm_eligible": true,
"rating": 10,
"rating_7d": 10,
"scores": {
"pm": 10,
"transport": 10,
"meteo": 10
},
"reasons": []
},
"latest": {
"time": "2026-10-27T11:03:34+00:00",
"pm1": 3,
"pm25": 6,
"pm10": 7,
"temperature_c": 17.7,
"humidity_percent": 40,
"tvoc": 117.4
}
}
],
"attribution": "Sensor data: Atmy (atmy.ai), from the networks named in each sensor's \"network\", under that network's license.",
"terms": "https://atmy.ai/legal/data/"
}Retrieve a sensor
GEThttps://api.atmy.ai/v1/sensors/{id}
One sensor
Path parameters
id string required
Sensor id, as in the list of sensors.
curl "https://api.atmy.ai/v1/sensors/41504"const response = await fetch("https://api.atmy.ai/v1/sensors/41504");
const data = await response.json();import requests
data = requests.get("https://api.atmy.ai/v1/sensors/41504").json(){
"api_version": "2.0",
"sensor": {
"id": 41504,
"uuid": "b4e7f10c-bd0b-4234-aff9-41d9222affd0",
"name": "Belgrade BIG Fashion Park",
"network": "AirGradient",
"network_id": "airgradient",
"license": "CC BY-SA 4.0",
"location": {
"lat": 44.81659101498,
"lon": 20.511912304712
},
"city": {
"id": 50068,
"slug": "serbia/belgrade",
"name": "Belgrade",
"country": "Serbia"
},
"quality": {
"status": "good",
"date": "2026-10-26",
"pm_eligible": true,
"rating": 10,
"rating_7d": 10,
"scores": {
"pm": 10,
"transport": 10,
"meteo": 10
},
"reasons": []
},
"latest": {
"time": "2026-10-27T11:03:35+00:00",
"pm1": 8.4,
"pm25": 13.8,
"pm10": 14.5,
"temperature_c": 14.4,
"humidity_percent": 47
}
},
"attribution": "Sensor data: Atmy (atmy.ai), from the networks named in each sensor's \"network\", under that network's license.",
"terms": "https://atmy.ai/legal/data/"
}