Mediu v1 / Mediu
Limit value exceedances
How many days each station exceeded the legal threshold for a pollutant, over a period.
GET
https://oneapi.ro/api/mediu/v1/aer/depasiri
Query parameters
NameTypeDescriptionAccepted values
poluantrequired
string
The pollutant. Required.
PM10PM2.5NO2O3SO2CO
judetoptional
string | null
Restrict to one county (vehicle-registration code).
max 4 car.
de_laoptional
string | null
First day included,
YYYY-MM-DD.
e.g. 2026-01-01
pana_laoptional
string | null
Last day included,
YYYY-MM-DD.
e.g. 2026-12-31
How it behaves
- Pollutants are not measured at the same stations. PM10 has 171 stations, NO2 149, SO2 116, CO 99, O3 83, and PM2.5 only 78. A ranking or a comparison between two pollutants is in fact comparing two different networks, not just two substances. When comparing counties on PM2.5, remember that some have no station measuring it at all.
- Every pollutant has a different test, because the law has a different test. PM10 is judged on the daily mean (50 µg/m³), NO2 on the hourly value (200), ozone on the maximum 8-hour running mean (120), SO2 on the daily mean (125), CO on the 8-hour maximum (10 mg/m³). The
testfield states exactly what was applied. - PM2.5 does not appear here. It only has an annual limit value, so a "daily exceedance" would have no legal basis. The request returns
aplicabil: falsewith the explanation, not an empty list that would read as "zero exceedances". - The count covers only the requested period and only days with data. The figure the law tolerates refers to the whole calendar year — compare only if the period covers the full year.
zile_cu_datetells you how complete the basis is. - For NO2 we count DAYS with at least one hour above the threshold, whereas the law tolerates 18 HOURS per year. Our figure is therefore less than or equal to the legal one, never greater — but it is not the same quantity.
- Results are ordered descending by number of exceedances.
What it is for
- Document in a report how many days a station exceeded the legal threshold in a period.
- Compare counties by number of exceedances, on official data.
- Check whether an area is approaching the number of exceedances tolerated per year.
Response structure
All fields below live inside data.
FieldTypeDescription
poluant
object
Poluantul, cu unitatea și valorile-limită.
aplicabil
boolean
false la poluanții fără valoare-limită zilnică.
motiv
string
De ce nu se aplică, când
aplicabil e false.
test.camp
string
Câmpul comparat cu pragul.
test.prag
number
Pragul.
test.tolerate
integer
Depășiri tolerate pe an calendaristic.
test.descriere
string
Formularea testului.
perioada
object
The interval analysed;
null means the whole series.
perioada.de_la
string
Începutul perioadei cerute.
perioada.pana_la
string
Sfârșitul perioadei cerute.
inregistrari
integer
Câte stații conține răspunsul.
rezultate[].statie
string
Codul EoI al stației.
rezultate[].localitate
string
UAT-ul în care cade stația.
rezultate[].judet
string
Județul.
rezultate[].judet_cod
string
Indicativul auto.
rezultate[].tip
string
Tipul stației — schimbă interpretarea.
rezultate[].zona
string
Mediul de amplasare.
rezultate[].zile_cu_date
integer
Câte zile cu date au intrat în numărătoare.
rezultate[].depasiri
integer
Câte dintre ele au depășit pragul.
rezultate[].valoare_maxima
number
Cea mai mare valoare de test din perioadă.
rezultate[].media_perioadei
number
Media mediilor zilnice din perioadă.
rezultate[].prima_zi
string
Prima zi cu date.
rezultate[].ultima_zi
string
Ultima zi cu date.
observatie
string
Avertismentul despre compararea cu cifra tolerată anual.
sursa
object
Sursa și licența.
poluant.cod
integer
The numeric pollutant code, as used by the EEA.
poluant.poluant
string
The symbol: PM10, NO2, O3, SO2, CO, PM2.5.
poluant.denumire
string
The name spelled out.
poluant.unitate
string
The unit of measure.
poluant.limite[]
array
The applicable legal limits: type, value, how many exceedances are tolerated per year, and the legal basis.
Response examples
GEThttps://oneapi.ro/api/mediu/v1/aer/depasiri?poluant=PM10
{
"data": {
"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"
}
]
},
"aplicabil": true,
"test": {
"camp": "media",
"prag": 50,
"tolerate": 35,
"descriere": "Media zilnică peste 50 µg/m³. Legea tolerează 35 de zile pe an calendaristic."
},
"perioada": {
"de_la": null,
"pana_la": null
},
"inregistrari": 171,
"rezultate": [
{
"statie": "RO0151A",
"localitate": "Rovinari",
"judet": "Gorj",
"judet_cod": "GJ",
"tip": "industrial",
"zona": "suburban",
"zile_cu_date": 382,
"depasiri": 89,
"valoare_maxima": 205.036,
"media_perioadei": 40.34,
"prima_zi": "2025-09-06",
"ultima_zi": "2026-09-22"
}
],
"observatie": "Numărătoarea acoperă DOAR perioada cerută și doar zilele cu date. Cifra tolerată de lege („35 pe an\") se referă la anul calendaristic întreg — compar-o cu numărul de aici doar dacă perioada acoperă tot anul. Verifică `zile_cu_date` înainte de orice concluzie.",
"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/depasiri?poluant=O3&judet=CJ
{
"data": {
"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ă"
}
]
},
"aplicabil": true,
"test": {
"camp": "maxim_8h",
"prag": 120,
"tolerate": 25,
"descriere": "Maximul zilnic al mediilor glisante pe 8 ore, peste 120 µg/m³. Valoare-țintă, cu 25 de zile tolerate pe an, mediat pe trei ani."
},
"perioada": {
"de_la": null,
"pana_la": null
},
"inregistrari": 4,
"rezultate": [
{
"statie": "RO0074A",
"localitate": "Cluj-Napoca",
"judet": "Cluj",
"judet_cod": "CJ",
"tip": "background",
"zona": "urban",
"zile_cu_date": 584,
"depasiri": 17,
"valoare_maxima": 185.738,
"media_perioadei": 42.44,
"prima_zi": "2024-12-31",
"ultima_zi": "2026-09-22"
}
],
"observatie": "Numărătoarea acoperă DOAR perioada cerută și doar zilele cu date. Cifra tolerată de lege („25 pe an\") se referă la anul calendaristic întreg — compar-o cu numărul de aici doar dacă perioada acoperă tot anul. Verifică `zile_cu_date` înainte de orice concluzie.",
"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/depasiri?poluant=PM2.5
{
"data": {
"poluant": {
"cod": 6001,
"poluant": "PM2.5",
"denumire": "Pulberi în suspensie PM2,5",
"unitate": "µg/m³",
"limite": [
{
"tip": "anual",
"valoare": 25,
"depasiri_tolerate_pe_an": 0,
"temei": "Directiva 2008/50/CE, anexa XIV"
}
]
},
"aplicabil": false,
"motiv": "Poluantul nu are valoare-limită pe zi, doar anuală — o „depășire zilnică\" n-ar avea temei legal. Folosește /aer/clasament pentru media perioadei.",
"rezultate": [],
"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/depasiri?poluant=NO2
{
"data": {
"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"
}
]
},
"aplicabil": true,
"test": {
"camp": "maxim",
"prag": 200,
"tolerate": 18,
"descriere": "O valoare orară peste 200 µg/m³ în ziua respectivă. Legea tolerează 18 ore pe an — aici numărăm ZILE cu cel puțin o depășire, deci cifra e mai mică sau egală cu numărul de ore."
},
"perioada": {
"de_la": null,
"pana_la": null
},
"inregistrari": 149,
"rezultate": [
{
"statie": "RO0182A",
"localitate": "Satu Mare",
"judet": "Satu Mare",
"judet_cod": "SM",
"tip": "background",
"zona": "urban",
"zile_cu_date": 615,
"depasiri": 11,
"valoare_maxima": 276.817,
"media_perioadei": 28.99,
"prima_zi": "2025-01-16",
"ultima_zi": "2026-09-22"
}
],
"observatie": "Numărătoarea acoperă DOAR perioada cerută și doar zilele cu date. Cifra tolerată de lege („18 pe an\") se referă la anul calendaristic întreg — compar-o cu numărul de aici doar dacă perioada acoperă tot anul. Verifică `zile_cu_date` înainte de orice concluzie.",
"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. |
| 422 | validare | poluant is missing or unknown. |
| 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": "poluant is missing or unknown.",
"detalii": {
"poluant": [
"The value sent does not satisfy the parameter rule."
]
}
}
}