Mediu v1 / Mediu
Pollutants and limit values
The code list, with the legal basis of each limit and the current data coverage.
GET
https://oneapi.ro/api/mediu/v1/aer/poluanti
Query parameters
This route accepts no query parameters.
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.
- Fetch it once and map locally.
- The list is restricted to the six pollutants that are regulated and consistently measured in Romania. The source also reports heavy metals and benzene, but with sparse coverage — we would have exposed them as "available" with missing data on most stations.
- Every limit declares the averaging period it applies to and how many exceedances the law tolerates per year. Comparing an hourly value with an annual limit is meaningless, and this structure exists to prevent exactly that.
acoperirestates which range of days is imported and how many stations have data — read it before requesting a series that would come back empty.
What it is for
- Populate a pollutant selector with exactly the values the other routes accept.
- Find the legal threshold and its basis before interpreting a measurement.
- Check data coverage before building an analysis.
Response structure
All fields below live inside data.
FieldTypeDescription
poluanti[].cod
integer
Codul EEA al poluantului.
poluanti[].poluant
string
Valoarea de folosit în parametrul
poluant.
poluanti[].denumire
string
Denumirea completă.
poluanti[].unitate
string
Unitatea de măsură.
poluanti[].limite[]
array
The applicable legal limits: type, value, how many exceedances are tolerated per year, and the legal basis.
poluanti[].limite[].tip
string
Perioada de mediere:
orar, zilnic, maxim_8h sau anual.
poluanti[].limite[].valoare
number
Pragul.
poluanti[].limite[].depasiri_tolerate_pe_an
integer
Câte depășiri tolerează legea pe an calendaristic.
poluanti[].limite[].temei
string
Actul normativ și anexa.
poluanti[].test_depasire_zilnica
object
Testul aplicat de
/aer/depasiri, sau null la poluanții fără limită zilnică.
acoperire.zile_agregate
integer
Câte rânduri zilnice sunt importate în total.
acoperire.prima_zi
string
Prima zi cu date.
acoperire.ultima_zi
string
Ultima zi cu date.
acoperire.statii_cu_date
integer
Câte stații au măsurători importate.
acoperire.poluanti_cu_date
integer
Câți poluanți au măsurători importate.
acoperire.ultima_valoare_orara
string
Cea mai recentă oră măsurată din toată rețeaua.
observatie
string
Avertismentul despre reprezentativitate și date neverificate.
sursa
object
Sursa și licența.
poluanti[].test_depasire_zilnica.camp
string
Which daily statistic the test uses: the mean, the maximum, or the maximum 8-hour mean. It differs by pollutant.
poluanti[].test_depasire_zilnica.prag
integer
The value above which the day counts as an exceedance.
poluanti[].test_depasire_zilnica.tolerate
integer
How many exceedances a year the law allows before it becomes a breach.
poluanti[].test_depasire_zilnica.descriere
string
The test written out in words.
Response examples
GEThttps://oneapi.ro/api/mediu/v1/aer/poluanti
{
"data": {
"poluanti": [
{
"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"
}
],
"test_depasire_zilnica": {
"camp": "media",
"prag": 50,
"tolerate": 35,
"descriere": "Media zilnică peste 50 µg/m³. Legea tolerează 35 de zile pe an calendaristic."
}
}
],
"acoperire": {
"zile_agregate": 363783,
"prima_zi": "2024-12-31",
"ultima_zi": "2026-09-22",
"statii_cu_date": 177,
"poluanti_cu_date": 6,
"ultima_valoare_orara": "2026-09-22 09: 00: 00+03"
},
"observatie": "Valorile sunt măsurate la STAȚIE, nu în localitate: la câțiva kilometri, sau lângă o arteră aglomerată, pot fi complet diferite. Datele din fereastra curentă sunt NEVERIFICATE — operatorul le poate corecta sau invalida ulterior. Mediile zilnice se publică doar când ziua are cel puțin 18 ore valide; `ore_valide` spune întotdeauna pe ce se sprijină cifra. O zi cu `masurare: zilnica` e o probă de laborator pe 24 de ore (PM10/PM2,5 gravimetric): media e chiar proba, fără minim, maxim ori ore.",
"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 | The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored. |
| 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": "The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored."
}
}