Mediu v1 / Mediu
Hourly series for a pollutant
The valid hourly values, most recent first — the 8 a.m. peak the daily mean smooths out.
GET
https://oneapi.ro/api/mediu/v1/aer/orar
Query parameters
NameTypeDescriptionAccepted values
limitaoptional
integer | null
How many hours to return, maximum 2000. Defaults to 168.
1 – 2000
statierequired
string
EoI code of the station. Required.
max 32 car.
poluantrequired
string
The pollutant. Required.
PM10PM2.5NO2O3SO2CO
de_laoptional
string | null
First day included,
YYYY-MM-DD, on the station's standard time.
e.g. 2026-09-01
pana_laoptional
string | null
Last day included,
YYYY-MM-DD.
e.g. 2026-09-03
How it behaves
- The daily mean smooths out exactly what matters in a city: a 180 µg/m³ peak at 8 a.m. vanishes into a mean of 45. The hourly series shows it.
- The hour is on the station's standard time (
+02:00, no daylight saving — the EEA convention). In summer,08:00+02:00is 9 o'clock on the wall. The absolute moment is correct: the offset is written into the value. de_laandpana_laare whole days on the same standard time;limitacounts hours (168 by default, one week; 2,000 at most). Ordering is descending, most recent hour first.- Only values the operator marked VALID are kept, and data in the current window is unverified. A missing hour means there was no valid value, not zero.
- Gravimetric PM10/PM2.5 samples are one value per day, not per hour: they do not appear here but in
/aer/zilnic, withmasurare: zilnica. A station with no automatic analyser for a pollutant therefore has a daily series but no hourly one. - An hourly threshold exists only for NO2 and SO2. For PM10 the legal test is on the daily mean, for O3 and CO on the 8-hour running mean — there
peste_limita_oraraisnull, and the correct test is in/aer/zilnic.
What it is for
- See the morning rush-hour NO2 peak at the station next to the school.
- Pick the hour to run or cycle on the day with the cleanest morning.
- Check the hours that exceeded the NO2 or SO2 hourly threshold — the legal test is per hour, not per day.
Response structure
All fields below live inside data.
FieldTypeDescription
statie
object
Stația, cu aceleași câmpuri ca la
/aer/statii.
poluant
object
Poluantul, ca la
/aer/zilnic.
limita_orara
object
Pragul orar
{valoare, depasiri_tolerate_pe_an, temei}, ori null.
inregistrari
integer
Câte ore conține răspunsul.
serie[].ora
string
Începutul orei, ISO 8601 cu decalaj.
serie[].valoare
number
Valoarea orară.
serie[].peste_limita_orara
boolean
Depășirea pragului orar;
null fără prag.
observatie
string
Avertismentul despre oră și date neverificate.
sursa
object
Sursa și licența.
Response examples
GEThttps://oneapi.ro/api/mediu/v1/aer/orar?statie=RO0008R&poluant=PM10&limita=5
{
"data": {
"statie": {
"cod": "RO0008R",
"cod_national": "RO-EM-3",
"latitudine": 47.324686,
"longitudine": 25.134839,
"altitudine": 912,
"tip": "background",
"zona": "rural",
"localitate": {
"cod_siruta": 149851,
"nume": "Poiana Stampei"
},
"judet": "Suceava",
"judet_cod": "SV",
"prima_observatie": "2010-01-01",
"ultima_observatie": null,
"activa": true,
"date": {
"are": true,
"zile": 326,
"prima_zi": "2026-07-01",
"ultima_zi": "2026-09-22",
"poluanti": [
"CO",
"NO2",
"O3",
"SO2"
]
}
},
"poluant": {
"cod": 5,
"poluant": "PM10",
"denumire": "Pulberi în suspensie PM10",
"unitate": "µg/m³",
"limite": [
{
"tip": "zilnic",
"valoare": 50,
"depasiri_tolerate_pe_an": 35,
"temei": "Directiva 2008/50/CE, anexa XI"
}
]
},
"limita_orara": null,
"inregistrari": 0,
"serie": [],
"observatie": "Valori orare valide, cea mai recentă prima. `ora` e începutul orei, pe ora standard a staţiei (+02: 00, fără ora de vară — convenţia EEA); vara, ora 08: 00 de aici e 09: 00 pe ceas. Datele sunt NEVERIFICATE — operatorul le poate corecta ori invalida. Probele gravimetrice de PM10/PM2,5 sunt o valoare pe zi şi apar doar în seria zilnică, cu `masurare: zilnica`.",
"sursa": {
"nume": "European Environment Agency — Air Quality Download Service (date raportate de România prin RNMCA/ANPM)",
"url": "https://eeadmz1-downloads-webapp.azurewebsites.net/",
"licenta": "Politica de reutilizare a EEA — reutilizare permisă cu indicarea sursei."
}
}
}
GEThttps://oneapi.ro/api/mediu/v1/aer/orar?statie=RO0065A&poluant=NO2&limita=5
{
"data": {
"statie": {
"cod": "RO0065A",
"cod_national": "RO-B1",
"latitudine": 44.447275,
"longitudine": 26.036694,
"altitudine": 91,
"tip": "background",
"zona": "urban",
"localitate": {
"cod_siruta": 179132,
"nume": "București"
},
"judet": "București",
"judet_cod": "B",
"prima_observatie": "2004-01-01",
"ultima_observatie": null,
"activa": true,
"date": {
"are": true,
"zile": 3773,
"prima_zi": "2024-12-31",
"ultima_zi": "2026-09-22",
"poluanti": [
"CO",
"NO2",
"O3",
"PM10",
"PM2.5",
"SO2"
]
}
},
"poluant": {
"cod": 8,
"poluant": "NO2",
"denumire": "Dioxid de azot",
"unitate": "µg/m³",
"limite": [
{
"tip": "orar",
"valoare": 200,
"depasiri_tolerate_pe_an": 18,
"temei": "Directiva 2008/50/CE, anexa XI"
}
]
},
"limita_orara": {
"valoare": 200,
"depasiri_tolerate_pe_an": 18,
"temei": "Directiva 2008/50/CE, anexa XI"
},
"inregistrari": 5,
"serie": [
{
"ora": "2026-09-22T08: 00: 00+02: 00",
"valoare": 24.438,
"peste_limita_orara": false
}
],
"observatie": "Valori orare valide, cea mai recentă prima. `ora` e începutul orei, pe ora standard a staţiei (+02: 00, fără ora de vară — convenţia EEA); vara, ora 08: 00 de aici e 09: 00 pe ceas. Datele sunt NEVERIFICATE — operatorul le poate corecta ori invalida. Probele gravimetrice de PM10/PM2,5 sunt o valoare pe zi şi apar doar în seria zilnică, cu `masurare: zilnica`.",
"sursa": {
"nume": "European Environment Agency — Air Quality Download Service (date raportate de România prin RNMCA/ANPM)",
"url": "https://eeadmz1-downloads-webapp.azurewebsites.net/",
"licenta": "Politica de reutilizare a EEA — reutilizare permisă cu indicarea sursei."
}
}
}
GEThttps://oneapi.ro/api/mediu/v1/aer/orar?statie=RO0008R&poluant=O3&limita=5
{
"data": {
"statie": {
"cod": "RO0008R",
"cod_national": "RO-EM-3",
"latitudine": 47.324686,
"longitudine": 25.134839,
"altitudine": 912,
"tip": "background",
"zona": "rural",
"localitate": {
"cod_siruta": 149851,
"nume": "Poiana Stampei"
},
"judet": "Suceava",
"judet_cod": "SV",
"prima_observatie": "2010-01-01",
"ultima_observatie": null,
"activa": true,
"date": {
"are": true,
"zile": 326,
"prima_zi": "2026-07-01",
"ultima_zi": "2026-09-22",
"poluanti": [
"CO",
"NO2",
"O3",
"SO2"
]
}
},
"poluant": {
"cod": 7,
"poluant": "O3",
"denumire": "Ozon",
"unitate": "µg/m³",
"limite": [
{
"tip": "maxim_8h",
"valoare": 120,
"depasiri_tolerate_pe_an": 25,
"temei": "Directiva 2008/50/CE, anexa VII — valoare-țintă"
}
]
},
"limita_orara": null,
"inregistrari": 5,
"serie": [
{
"ora": "2026-09-22T08: 00: 00+02: 00",
"valoare": 15.911,
"peste_limita_orara": null
}
],
"observatie": "Valori orare valide, cea mai recentă prima. `ora` e începutul orei, pe ora standard a staţiei (+02: 00, fără ora de vară — convenţia EEA); vara, ora 08: 00 de aici e 09: 00 pe ceas. Datele sunt NEVERIFICATE — operatorul le poate corecta ori invalida. Probele gravimetrice de PM10/PM2,5 sunt o valoare pe zi şi apar doar în seria zilnică, cu `masurare: zilnica`.",
"sursa": {
"nume": "European Environment Agency — Air Quality Download Service (date raportate de România prin RNMCA/ANPM)",
"url": "https://eeadmz1-downloads-webapp.azurewebsites.net/",
"licenta": "Politica de reutilizare a EEA — reutilizare permisă cu indicarea sursei."
}
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 404 | negasit | No station with this code exists. |
| 422 | validare | statie or poluant missing, the pollutant is unknown or limita exceeds 2000. |
| 429 | cota_depasita | The plan's monthly quota has been exceeded (see Retry-After). |
All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.
{
"eroare": {
"cod": "validare",
"mesaj": "statie or poluant missing, the pollutant is unknown or limita exceeds 2000.",
"detalii": {
"limita": [
"The value sent does not satisfy the parameter rule."
]
}
}
}