oneapi
Sign in
Locations v1 / Meteo

Climate normals

The monthly climate normals: each month's multi-year average for a station or for the point nearest the given coordinates. The reference against which one says "it was a warm month".

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

Query parameters

NameTypeDescriptionAccepted values
sirutaoptional integer | null The SIRUTA code of the place. Mutually exclusive with lat+lng and with statie. 1
latoptional number | null The latitude of the point (with lng). 43 – 49
lngoptional number | null The longitude of the point (with lat). 20 – 30
statieoptional string | null The WSI code, if you want a particular station instead of the nearest one. max 32 car.
de_la_anuloptional integer | null The first year of the reference period (1991 by default). 1850 – 2100
la_anuloptional integer | null The last year of the reference period (2020 by default). 1850 – 2100

How it behaves

  • By default the WMO standard period 1991–2020 is used, so the figures stay comparable with the climate literature. When you change it, perioada.standard becomes null — a sign that the result is no longer a standard normal.
  • If you give a place, we pick the nearest station WITH DATA and say in statie.distanta_km and in reprezentativitate how good the approximation is. Beyond 35 km we flag the representativeness as poor, explicitly.
  • The averages ignore unmeasured days. zile_cu_temperatura says how many days each month rests on — a month with three measurements looks just as smooth as a complete one unless you look there.

What it is for

  • Sizing an installation from the mean temperature of the coldest month.
  • Writing the climate section of a feasibility study, on the WMO standard period.
  • Comparing the climate of two places over the same reference period.

Response structure

FieldTypeDescription
data.punct object The point requested; null if you asked for a station directly.
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.statie object The station the response rests on, with distanta_km when we chose it.
data.statie.wsi string The station's WMO identifier.
data.statie.nume string The name, exactly as the source publishes it.
data.statie.latitudine number Latitude, in decimal degrees (WGS 84).
data.statie.longitudine number Longitude, in decimal degrees (WGS 84).
data.statie.fara_catalog boolean true if the station has a series but no catalogue record (no name, no coordinates, invisible in geographic searches).
data.statie.localitate.cod_siruta integer SIRUTA code of the territorial unit.
data.statie.localitate.nume string The name, exactly as the source publishes it.
data.statie.judet string The county the value refers to.
data.statie.judet_cod string County code, two letters.
data.statie.primul_an integer The first year with measurements.
data.statie.ultimul_an integer The last year with measurements.
data.statie.zile_cu_date integer How many measured days the station has in total.
data.statie.parametri array The codes of the parameters published: ta/tn/tx temperatures, r precipitation, ff wind, p sea-level pressure.
data.statie.distanta_km number Distance in kilometres, as the crow flies.
data.perioada object The range of years used and, where applicable, the label OMM 1991–2020.
data.perioada.de_la_anul integer
data.perioada.la_anul integer
data.perioada.standard string
data.normale[].luna integer The month, 1–12.
data.normale[].temp_medie number The month's mean temperature, °C.
data.normale[].temp_minima_medie number The mean of the daily minima, °C — not the absolute minimum.
data.normale[].temp_maxima_medie number The mean of the daily maxima, °C.
data.normale[].temp_minima_absoluta number The lowest temperature recorded in that month, across the whole period.
data.normale[].temp_maxima_absoluta number The highest temperature recorded in that month, across the whole period.
data.normale[].precipitatii_lunare_medii_mm number The month's mean precipitation, mm.
data.normale[].zile integer How many days in the period have a measurement of any kind.
data.normale[].zile_cu_temperatura integer How many days the temperature averages rest on.
data.observatie string A note on how to read the response: a computation convention or a limit of the data.
data.reprezentativitate object How well the station describes the requested place: how it was chosen, the distance and, where needed, an explicit warning.
data.reprezentativitate.sursa string
data.reprezentativitate.distanta_km number Distance in kilometres, as the crow flies.
data.reprezentativitate.buna boolean
data.reprezentativitate.observatie string A note on how to read the value next to it.
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/normale?siruta=54975
{
    "data": {
        "punct": {
            "lat": 46.775869737866465,
            "lng": 23.60115997499754,
            "sursa": "siruta",
            "cod_siruta": 54975,
            "nume": "Cluj-Napoca",
            "nivel": "uat_centroid"
        },
        "statie": {
            "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": 2.3
        },
        "perioada": {
            "de_la_anul": 1991,
            "la_anul": 2020,
            "standard": "OMM 1991–2020"
        },
        "normale": [
            {
                "luna": 1,
                "temp_medie": -2.5,
                "temp_minima_medie": -5.2,
                "temp_maxima_medie": 0.9,
                "temp_minima_absoluta": -19.9,
                "temp_maxima_absoluta": 14.1,
                "precipitatii_lunare_medii_mm": 27.3,
                "zile": 930,
                "zile_cu_temperatura": 930
            }
        ],
        "observatie": "Mediile ignoră zilele nemăsurate — `zile_cu_temperatura` spune pe câte zile se sprijină fiecare lună. O lună cu trei măsurători apare la fel de „netedă\" ca una completă dacă nu te uiți acolo.",
        "reprezentativitate": {
            "sursa": "cea_mai_apropiata_statie",
            "distanta_km": 2.3,
            "buna": true,
            "observatie": "Stația e suficient de aproape pentru o estimare rezonabilă a climei locului."
        },
        "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.
404negasitThree distinct causes, which the message keeps apart: the station does not exist, the place has no coordinates in the nomenclature, or no station has a daily series imported.
422validareNo place given, or two forms at once.
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": "No place given, or two forms at once.",
        "detalii": {
            "siruta": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}