oneapi
Autentificare
Locations v1 / Meteo

Stații meteo

Reţeaua de staţii meteo, cu poziţia, localitatea, anii acoperiţi şi parametrii măsuraţi de fiecare. Nu toate măsoară tot.

GET
https://oneapi.ro/api/locations/v1/meteo/statii

Parametri de interogare

NumeTipDescriereValori acceptate
judetopțional string | null Indicativul auto al județului (ex. CJ). Filtrează stațiile după județul în care cad. max 4 car.
sirutaopțional integer | null Codul SIRUTA al unui UAT — doar stațiile care cad în interiorul lui. 1
cu_dateopțional boolean | null 1 păstrează doar stațiile care au efectiv serie zilnică importată. ex. 1
per_paginaopțional text Câte stații pe pagină (implicit 100, maxim 200). ex. 5
paginaopțional text Pagina, numărată de la 1. ex. 2

Cum se comportă

  • Legătura stație→UAT e calculată SPAȚIAL de noi (punctul stației intersectat cu limita UAT), nu vine din sursă. O stație poate cădea în afara oricărui UAT — cazul real e stația de pe digul portului Constanța, care e pe mare.
  • Portalul publică serie zilnică pentru mai multe stații decât are în catalogul cu coordonate. Diferența sunt stații cu istoric care nu mai figurează în catalogul curent. Nu le aruncăm seria: primesc un rând marcat fara_catalog, fără nume și fără poziție. Le poți interoga prin ?statie=<wsi>, dar nu apar în /meteo/langa și nu pot fi alese automat ca stație de referință — n-avem unde să le punem pe hartă.
  • Rețeaua nu e uniformă. Înainte de a lua o normală de bună pentru un loc, uită-te la primul_an al stației pe care se sprijină și la distanța până la ea. ANM nu publică altitudinea stațiilor în setul deschis, deci nu o expunem — în zonă de munte, verifică manual ce stație s-a ales, fiindcă relieful contează mai mult decât distanța în linie dreaptă.

La ce folosește

  • Alegi stația de referință pentru un studiu, uitându-te la altitudine și la lungimea seriei, nu doar la distanță.
  • Verifici ce stații are un județ înainte de a promite acoperire meteo unui client de acolo.
  • Construiești un selector de stații într-o interfață, paginat.

Structura răspunsului

CâmpTipDescriere
data.statii[].wsi string Identificatorul OMM al stației (WSI). E cheia publică: se dă mai departe la /meteo/zilnic?statie=.
data.statii[].nume string Denumirea stației, așa cum o publică ANM. null la stațiile fără fișă de catalog.
data.statii[].latitudine number Latitudinea stației (WGS84). null la stațiile fără fișă de catalog.
data.statii[].longitudine number Longitudinea stației (WGS84). null la stațiile fără fișă de catalog.
data.statii[].fara_catalog boolean true pentru stațiile cărora portalul le publică serie zilnică dar nu și fișă de catalog: n-au nume, n-au coordonate și nu apar în căutările geografice. Seria lor se ia prin ?statie=<wsi>.
data.statii[].localitate object UAT-ul în care cade stația ({cod_siruta, nume}) — legătură calculată spațial de noi, nu declarată de sursă. null pentru stațiile din afara oricărui UAT (ex. cea de pe digul portului Constanța, care e pe mare).
data.statii[].localitate.cod_siruta integer Codul SIRUTA al unităţii teritoriale.
data.statii[].localitate.nume string Numele, aşa cum îl publică sursa.
data.statii[].judet string Numele județului în care cade stația.
data.statii[].judet_cod string Indicativul auto al județului (ex. CJ).
data.statii[].primul_an integer Primul an cu măsurători în seria zilnică. Variază enorm: unele stații pornesc din secolul XIX, altele din anii 1960.
data.statii[].ultimul_an integer Ultimul an cu măsurători.
data.statii[].zile_cu_date integer Câte zile măsurate are stația în total — indicatorul brut de robustețe al seriei.
data.statii[].parametri array Codurile parametrilor pe care îi publică stația, exact cum le numește ANM: ta temperatura medie, tn minima, tx maxima (toate la 2 m), r precipitații, ff viteza medie a vântului (la 10 m), p presiunea la nivelul mării. O stație poate lipsi ani întregi la un parametru pe care îl publică azi.
data.sursa object Sursa datelor: Administrația Națională de Meteorologie, seria zilnică oficială, licență CC-BY-4.0. Conține și data ultimei importări.
data.sursa.nume string Denumirea sursei oficiale.
data.sursa.url string Adresa publică a sursei.
data.sursa.licenta string Licenţa sub care sursa permite reutilizarea.
meta.paginare.pagina integer Pagina curentă, numărată de la 1.
meta.paginare.per_pagina integer Câte înregistrări are o pagină.
meta.paginare.total integer Totalul înregistrărilor care se potrivesc, dincolo de pagina curentă.
meta.paginare.pagini integer Câte pagini are lista.

Exemple de răspuns

GEThttps://oneapi.ro/api/locations/v1/meteo/statii?judet=CJ
{
    "data": {
        "statii": [
            {
                "wsi": "0-20000-0-15163",
                "nume": "Baisoara",
                "latitudine": 46.535556,
                "longitudine": 23.310278,
                "fara_catalog": false,
                "localitate": {
                    "cod_siruta": 55918,
                    "nume": "Băișoara"
                },
                "judet": "Cluj",
                "judet_cod": "CJ",
                "primul_an": 1941,
                "ultimul_an": 2026,
                "zile_cu_date": 30110,
                "parametri": [
                    "ff",
                    "p",
                    "r",
                    "ta",
                    "tn",
                    "tx"
                ]
            }
        ],
        "sursa": {
            "nume": "Administrația Națională de Meteorologie (ANM) — date climatologice zilnice, controlate calitativ",
            "url": "https://odp.meteoromania.ro/",
            "licenta": "CC BY 4.0, cu indicarea sursei."
        }
    },
    "meta": {
        "paginare": {
            "pagina": 1,
            "per_pagina": 100,
            "total": 6,
            "pagini": 1
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422validareUn parametru nedeclarat ori o valoare care nu trece validarea (judet, siruta, cu_date). Câmpul vinovat e în detalii.
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": "Un parametru nedeclarat ori o valoare care nu trece validarea (judet, siruta, cu_date). Câmpul vinovat e în detalii.",
        "detalii": {
            "judet": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}