oneapi
Autentificare
Mediu v1 / Mediu

Seria zilnică a unui poluant

Media, minimul, maximul și — la ozon și monoxid de carbon — maximul mediilor pe 8 ore.

GET
https://oneapi.ro/api/mediu/v1/aer/zilnic

Parametri de interogare

NumeTipDescriereValori acceptate
statieobligatoriu string Codul EoI al stației. Obligatoriu. max 32 car.
poluantobligatoriu string Poluantul. Obligatoriu. PM10PM2.5NO2O3SO2CO
de_laopțional string | null Prima zi inclusă, AAAA-LL-ZZ. ex. 2026-01-01
pana_laopțional string | null Ultima zi inclusă, AAAA-LL-ZZ. ex. 2026-06-30
limitaopțional integer | null Câte zile să întoarcă, maximum 1000. Implicit 90. 1 – 1000

Cum se comportă

  • date spune ce avem NOI, nu ce spune catalogul. Câmpurile activa, prima_observatie şi ultima_observatie descriu staţia aşa cum o publică EEA — şi nu coincid cu acoperirea noastră. 10 din cele 187 de staţii n-au nicio măsurătoare importată, deşi apar activa: true cu o primă observaţie din 2008; iar ultima_observatie e null pe 186 din 187, fiindcă sursa lasă capătul deschis la staţiile în funcţiune. Ramura date — are, zile, prima_zi, ultima_zi, poluanti — e calculată din măsurătorile noastre. Verific-o înainte de a cere serii pentru o staţie.
  • ore_valide nu e un detaliu. O zi are 24 de ore posibile; media se publică doar dacă ziua are cel puțin 18 ore valide, altfel media e null, dar minimul, maximul și numărătoarea rămân. O „medie zilnică" din trei ore nu e comparabilă cu valoarea-limită.
  • Se rețin doar valorile pe care operatorul le-a marcat VALIDE. Măsurătorile invalidate (defect, calibrare, ieșire din domeniu) sunt excluse — includerea lor ar strica exact mediile pe care se calculează depășirile.
  • maxim_8h există doar la ozon și monoxid de carbon, unde indicatorul legal e maximul mediilor glisante pe 8 ore. La restul e null, nu zero.
  • peste_limita aplică testul corect pentru fiecare poluant (vezi test_depasire), nu o comparație uniformă cu media. Când valoarea pe care se face testul lipsește, câmpul e null, nu false: „nu știm" și „nu s-a depășit" sunt lucruri diferite.
  • Două feluri de zile. masurare: orara e agregatul valorilor orare (media, minimul, maximul, orele valide). masurare: zilnica e o probă de laborator pe 24 de ore — PM10 și PM2,5 gravimetric, la stațiile care nu au analizor automat: media e chiar proba, iar minim, maxim și ore_valide nu există (null, respectiv 0). Când o stație are pentru aceeași zi ambele feluri, rămâne ziua orară cu medie.
  • Seria pe ore, cu vârfurile pe care media zilei le netezește, e la /aer/orar.
  • Ordinea e descrescătoare după zi.

La ce folosește

  • Trasezi evoluția PM10 la o stație pe ultimele luni.
  • Verifici în ce zile s-a depășit pragul legal la o stație anume, cu valoarea care a produs depășirea.
  • Alimentezi un grafic sau un raport cu date oficiale, nu cu capturi de pe un site.

Structura răspunsului

Toate câmpurile de mai jos sunt în data.

CâmpTipDescriere
statie object Stația, cu aceleași câmpuri ca la /aer/statii.
poluant.cod integer Codul EEA al poluantului.
poluant.poluant string Notația.
poluant.denumire string Denumirea completă.
poluant.unitate string Unitatea de măsură.
poluant.limite[] object Valorile-limită aplicabile, cu tipul, pragul, depășirile tolerate și temeiul legal.
test_depasire.camp string Ce câmp din serie se compară cu pragul: media, maxim sau maxim_8h.
test_depasire.prag number Pragul zilnic.
test_depasire.tolerate integer Câte depășiri pe an tolerează legea.
test_depasire.descriere string Formularea testului, în clar.
inregistrari integer Câte zile conține răspunsul.
serie[] array Ziua, cu media, minimul, maximul, maximul mediei pe 8 ore, câte ore au date și dacă ziua e depășire.
serie[].zi string Ziua.
serie[].media number Media zilnică. null sub 18 ore valide.
serie[].minim number Cea mai mică valoare orară din zi.
serie[].maxim number Cea mai mare valoare orară din zi.
serie[].maxim_8h number Maximul mediilor glisante pe 8 ore. Doar la O3 și CO.
serie[].ore_valide integer Câte ore valide stau în spatele cifrelor zilei. 0 la o probă zilnică.
serie[].masurare string orara (agregat din ore) ori zilnica (o probă pe 24 de ore).
serie[].unitate string Unitatea.
serie[].peste_limita boolean Dacă ziua depășește pragul legal. null când valoarea de test lipsește.
observatie string Avertismentul despre reprezentativitate și date neverificate.
sursa object Sursa și licența.
statie.cod string Codul european al stației.
statie.cod_national string Codul folosit de rețeaua națională.
statie.latitudine number Latitudinea stației.
statie.longitudine number Longitudinea stației.
statie.altitudine integer Altitudinea, în metri.
statie.tip string Tipul stației: trafic, industrial, fond. Contează la comparații: o stație de trafic nu se compară cu una de fond.
statie.zona string Zona: urbană, suburbană, rurală.
statie.localitate object Localitatea în care cade stația, legată la nomenclatorul Locations.
statie.judet string Județul.
statie.judet_cod string Indicativul auto al județului.
statie.prima_observatie string De când există date pentru stație.
statie.ultima_observatie null Ultima zi cu date. null înseamnă că stația n-are serie zilnică agregată.
statie.activa boolean Dacă stația mai raportează.

Exemple de răspuns

GEThttps://oneapi.ro/api/mediu/v1/aer/zilnic?statie=RO0008R&poluant=PM10
{
    "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"
                }
            ]
        },
        "test_depasire": {
            "camp": "media",
            "prag": 50,
            "tolerate": 35,
            "descriere": "Media zilnică peste 50 µg/m³. Legea tolerează 35 de zile pe an calendaristic."
        },
        "inregistrari": 0,
        "serie": [],
        "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."
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
404negasitNu există o stație cu acest cod.
422validareLipsește statie sau poluant, ori poluantul e necunoscut.
429cota_depasitaCota lunară a planului a fost depăşită (vezi Retry-After).

Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "Lipsește statie sau poluant, ori poluantul e necunoscut.",
        "detalii": {
            "statie": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}