oneapi
Sign in
Locations v1 / Meteo

Nearby weather stations

The weather stations around a point, each with its distance — for picking the station that represents an address, rather than an arbitrary one.

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

Query parameters

NameTypeDescriptionAccepted values
sirutaoptional integer | null The SIRUTA code of the place (administrative unit or locality). Mutually exclusive with lat+lng. 1
latoptional number | null The latitude of the point. Given together with lng. 43 – 49
lngoptional number | null The longitude of the point. Given together with lat. 20 – 30
statieoptional string | null The code of a particular station. With it, the route returns that station directly, without searching by radius. max 32 car.
raza_kmoptional number | null The search radius in km (50 by default, 500 at most). 1 – 500
limitaoptional integer | null How many stations are returned (5 by default, 50 at most). 1 – 50

How it behaves

  • The place is given in exactly one of two forms: siruta, OR lat+lng. Both at once are rejected, so that we never silently pick one.
  • Stations come back ordered by great-circle distance. Distance is not everything, and we cannot give you altitude (ANM does not publish it in the open dataset): in varied terrain, check on a map where the station falls before taking its climate as your place's.

What it is for

  • Choosing a reference station for a place deliberately, instead of implicitly accepting the nearest one.
  • Checking whether a customer in an area has at least one station reasonably close by.
  • Comparing two or three stations around a point, when the terrain makes them differ.

Response structure

FieldTypeDescription
data.punct object The point searched around (lat/lng, plus the place it was derived from if you gave siruta).
data.punct.lat number Latitude, in decimal degrees (WGS 84).
data.punct.lng number Longitude, in decimal degrees (WGS 84).
data.punct.sursa string
data.punct.cod_siruta integer SIRUTA code of the territorial unit.
data.punct.nume string The name, exactly as the source publishes it.
data.punct.nivel string Level in the classification hierarchy — the deeper, the more detailed.
data.raza_km integer The radius actually used.
data.inregistrari integer How many records the response holds.
data.statii[].wsi string The station's WMO identifier (WSI). It is the public key: you pass it on to /meteo/zilnic?statie=.
data.statii[].nume string The station name, as ANM publishes it. null for stations with no catalogue record.
data.statii[].latitudine number The station's latitude (WGS 84). null for stations with no catalogue record.
data.statii[].longitudine number The station's longitude (WGS 84). null for stations with no catalogue record.
data.statii[].fara_catalog boolean true for stations the portal publishes a daily series for but no catalogue record: they have no name, no coordinates and do not appear in geographic searches. Their series is fetched with ?statie=<wsi>.
data.statii[].localitate object The administrative unit the station falls in ({cod_siruta, nume}) — a link we compute spatially, not one the source declares. null for stations outside every unit (e.g. the one on the Constanța harbour breakwater, which is at sea).
data.statii[].localitate.cod_siruta integer SIRUTA code of the territorial unit.
data.statii[].localitate.nume string The name, exactly as the source publishes it.
data.statii[].judet string The name of the county the station falls in.
data.statii[].judet_cod string The county's registration prefix (e.g. CJ).
data.statii[].primul_an integer The first year with measurements in the daily series. It varies enormously: some stations start in the 19th century, others in the 1960s.
data.statii[].ultimul_an integer The last year with measurements.
data.statii[].zile_cu_date integer How many measured days the station has in total — the raw robustness indicator for the series.
data.statii[].parametri array The codes of the parameters the station publishes, exactly as ANM names them: ta mean temperature, tn minimum, tx maximum (all at 2 m), r precipitation, ff mean wind speed (at 10 m), p sea-level pressure. A station can be missing whole years of a parameter it publishes today.
data.statii[].distanta_km number The distance from the point to the station, in km, rounded to 0.1.
data.observatie string A note on how to read the response: a computation convention or a limit of the data.
data.sursa object The data source: the National Meteorological Administration, official daily series, CC-BY-4.0 licence. It also carries the date of the last import.
data.sursa.nume string Name of the official source.
data.sursa.url string Public address of the source.
data.sursa.licenta string The licence under which the source allows reuse.
meta.distanta.metoda string Always linie_dreapta (straight line): the geodesic distance over the Earth's surface, not by road.
meta.distanta.detaliu string The same information, in words.

Response examples

GEThttps://oneapi.ro/api/locations/v1/meteo/langa?siruta=54984
{
    "data": {
        "punct": {
            "lat": 46.78,
            "lng": 23.559444444444,
            "sursa": "siruta",
            "cod_siruta": 54984,
            "nume": "Cluj-Napoca",
            "nivel": "localitate"
        },
        "raza_km": 50,
        "inregistrari": 5,
        "statii": [
            {
                "wsi": "0-20000-0-15120",
                "nume": "Cluj-Napoca",
                "latitudine": 46.777778,
                "longitudine": 23.571389,
                "fara_catalog": false,
                "localitate": {
                    "cod_siruta": 54975,
                    "nume": "Cluj-Napoca"
                },
                "judet": "Cluj",
                "judet_cod": "CJ",
                "primul_an": 1921,
                "ultimul_an": 2026,
                "zile_cu_date": 38525,
                "parametri": [
                    "ff",
                    "p",
                    "r",
                    "ta",
                    "tn",
                    "tx"
                ],
                "distanta_km": 0.9
            }
        ],
        "observatie": "Măsurătorile vin de la STAȚIE, nu din localitate. În relief variat — și România are mult — o vale și un vârf la 15 km distanță pot avea climă complet diferită. Folosește `distanta_km` ca să judeci cât de reprezentativă e. ANM nu publică altitudinea stațiilor în setul deschis, deci nu o putem da nici noi — la un loc de munte, verifică manual ce stație s-a ales.",
        "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": {
        "distanta": {
            "metoda": "linie_dreapta",
            "detaliu": "Distanţele sunt geodezice, în linie dreaptă pe suprafaţa Pământului (WGS84) — nu pe drum."
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitThe requested place has no coordinates (check siruta).
422validareYou gave no place, gave both forms at once, or gave statie (this route searches around a PLACE).
429cota_depasitaThe 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": "You gave no place, gave both forms at once, or gave statie (this route searches around a PLACE).",
        "detalii": {
            "siruta": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}