oneapi
Autentificare
Mediu v1 / Mediu

Calitatea aerului acum

Ultimele valori de la stațiile din apropiere, date prin siruta sau lat + lng.

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

Parametri de interogare

NumeTipDescriereValori acceptate
raza_kmopțional number | null Raza de căutare, în kilometri. Implicit 25, maximum 300. 1 – 300
limitaopțional integer | null Câte stații să întoarcă, maximum 50. Implicit 5. 1 – 50
latopțional number | null Latitudinea punctului. Cere lng. 41 – 50
lngopțional number | null Longitudinea punctului. Cere lat. 19 – 32
sirutaopțional integer | null Codul SIRUTA al localității sau UAT-ului. Alternativă la lat + lng. 1

Cum se comportă

  • Poluanţii nu se măsoară în aceleaşi staţii. PM10 are 171 de staţii, NO2 149, SO2 116, CO 99, O3 83, iar PM2.5 doar 78. Un clasament sau o comparaţie între doi poluanţi compară, de fapt, două reţele diferite — nu doar două substanţe. Când compari judeţe pe PM2.5, ţine minte că unele n-au nicio staţie care să-l măsoare.
  • Citește vechime_ore înainte de orice. Datele curente sunt neverificate și ajung la noi cu întârziere; o stație poate să nu fi raportat de zile întregi. Câmpul invechita marchează valorile mai vechi de 6 ore.
  • Se întorc stațiile din rază, ordonate după distanță, dar doar cele care au valori în fereastra importată. O stație activă în metadate fără nicio măsurătoare recentă nu apare — ar fi o promisiune goală.
  • Valoarea e măsurată la stație. La câțiva kilometri, sau lângă o arteră aglomerată, poate fi complet diferită. distanta_km și tip spun cât de reprezentativă e pentru locul cerut.
  • Punctul se dă fie ca siruta, fie ca lat + lng — nu amândouă. Raza implicită e 25 km.
  • Nu compara o valoare orară cu valoarea-limită fără să vezi la ce se aplică pragul: referinta_legala.se_aplica_la spune dacă e media zilnică, valoarea orară sau maximul pe 8 ore.

La ce folosește

  • Arăți într-o aplicație ce se măsoară acum lângă utilizator, pornind de la localitatea lui.
  • Decizi dacă o activitate în aer liber e rezonabilă azi, pe date măsurate, nu pe prognoză.
  • Verifici dacă o sesizare despre poluare coincide cu ce arată stațiile din zonă.

Structura răspunsului

CâmpTipDescriere
data.punct object Punctul folosit, cu sursa lui: coordonate date direct sau deduse dintr-un cod SIRUTA.
data.punct.lat number Latitudinea folosită.
data.punct.lng number Longitudinea folosită.
data.punct.sursa string siruta sau coordonate.
data.punct.cod_siruta integer Codul rezolvat, când s-a dat siruta.
data.punct.nume string Denumirea entității rezolvate.
data.punct.nivel string localitate (punct precis) sau uat_centroid (centrul unei suprafețe).
data.raza_km number Raza aplicată.
data.statii_gasite integer Câte stații cu valori au fost găsite în rază.
data.rezultate[].statie object Stația, cu aceleași câmpuri ca la /aer/statii.
data.rezultate[].distanta_km number Distanța de la punct până la stație.
data.rezultate[].valori[] object Ultimele valori ale stației, cu aceeași structură ca ultimele_valori la /aer/statii/{cod}.
data.observatie string Avertismentul despre reprezentativitate și date neverificate.
data.sursa object Sursa și licența.
data.rezultate[].statie.cod string Codul european al stației.
data.rezultate[].statie.cod_national string Codul folosit de rețeaua națională.
data.rezultate[].statie.latitudine number Latitudinea stației.
data.rezultate[].statie.longitudine number Longitudinea stației.
data.rezultate[].statie.altitudine integer Altitudinea, în metri.
data.rezultate[].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.
data.rezultate[].statie.zona string Zona: urbană, suburbană, rurală.
data.rezultate[].statie.localitate object Localitatea în care cade stația, legată la nomenclatorul Locations.
data.rezultate[].statie.judet string Județul.
data.rezultate[].statie.judet_cod string Indicativul auto al județului.
data.rezultate[].statie.prima_observatie string De când există date pentru stație.
data.rezultate[].statie.ultima_observatie null Ultima zi cu date. null înseamnă că stația n-are serie zilnică agregată.
data.rezultate[].statie.activa boolean Dacă stația mai raportează.
data.rezultate[].valori[].poluant string Poluantul măsurat.
data.rezultate[].valori[].valoare integer Valoarea orară.
data.rezultate[].valori[].unitate string Unitatea de măsură.
data.rezultate[].valori[].ora string Ora la care se referă valoarea.
data.rezultate[].valori[].vechime_ore integer De câte ore e valoarea. Sursa are întârziere — nu e o citire live.
data.rezultate[].valori[].invechita boolean Semnal explicit că valoarea e prea veche ca să fie tratată drept „acum".
meta.distanta object Cum sunt măsurate distanţele din răspuns. Apare pe orice răspuns care conţine o distanţă.
meta.distanta.metoda string Mereu linie_dreapta: distanţa geodezică pe suprafaţa Pământului, nu pe drum.
meta.distanta.detaliu string Aceeaşi informaţie, în cuvinte.

Exemple de răspuns

GEThttps://oneapi.ro/api/mediu/v1/aer/acum?siruta=54984
{
    "data": {
        "punct": {
            "lat": 46.78,
            "lng": 23.559444444444,
            "sursa": "siruta",
            "cod_siruta": 54984,
            "nume": "Cluj-Napoca",
            "nivel": "localitate"
        },
        "raza_km": 25,
        "statii_gasite": 5,
        "rezultate": [
            {
                "statie": {
                    "cod": "RO0075A",
                    "cod_national": "RO-CJ-3",
                    "latitudine": 46.765425,
                    "longitudine": 23.550258,
                    "altitudine": 346,
                    "tip": "background",
                    "zona": "suburban",
                    "localitate": {
                        "cod_siruta": 54975,
                        "nume": "Cluj-Napoca"
                    },
                    "judet": "Cluj",
                    "judet_cod": "CJ",
                    "prima_observatie": "2006-01-01",
                    "ultima_observatie": null,
                    "activa": true,
                    "date": {
                        "are": false,
                        "zile": 0,
                        "prima_zi": null,
                        "ultima_zi": null,
                        "poluanti": []
                    }
                },
                "distanta_km": 1.8,
                "valori": [
                    {
                        "poluant": "CO",
                        "valoare": 0,
                        "unitate": "mg/m³",
                        "ora": "2025-02-14 22: 00: 00+02",
                        "vechime_ore": 14377,
                        "invechita": true,
                        "referinta_legala": {
                            "prag": 10,
                            "se_aplica_la": "maxim_8h",
                            "observatie": "Pragul se aplică maximului mediilor pe 8 ore, nu acestei valori izolate — decât dacă e chiar o valoare orară."
                        }
                    }
                ]
            }
        ],
        "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."
        }
    },
    "meta": {
        "distanta": {
            "metoda": "linie_dreapta",
            "detaliu": "Distanţele sunt geodezice, în linie dreaptă pe suprafaţa Pământului (WGS84) — nu pe drum."
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
404negasitCodul SIRUTA nu a putut fi rezolvat la o coordonată.
422validareNiciun punct dat, ambele forme date deodată, sau o coordonată fără perechea ei.
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": "Niciun punct dat, ambele forme date deodată, sau o coordonată fără perechea ei.",
        "detalii": {
            "raza_km": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}