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.standardbecomesnull— 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_kmand inreprezentativitatehow good the approximation is. Beyond 35 km we flag the representativeness as poor, explicitly. - The averages ignore unmeasured days.
zile_cu_temperaturasays 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."
}
}
}
GEThttps://oneapi.ro/api/locations/v1/meteo/normale?statie=0-20000-0-15120
{
"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."
}
}
}
GEThttps://oneapi.ro/api/locations/v1/meteo/normale?statie=0-20000-0-15208
{
"data": {
"punct": null,
"statie": {
"wsi": "0-20000-0-15208",
"nume": "Alba Iulia",
"latitudine": 46.063911,
"longitudine": 23.563402,
"fara_catalog": false,
"localitate": {
"cod_siruta": 1017,
"nume": "Alba Iulia"
},
"judet": "Alba",
"judet_cod": "AB",
"primul_an": 1881,
"ultimul_an": 2026,
"zile_cu_date": 43155,
"parametri": [
"ff",
"p",
"r",
"ta",
"tn",
"tx"
]
},
"perioada": {
"de_la_anul": 1991,
"la_anul": 2020,
"standard": "OMM 1991–2020"
},
"normale": [
{
"luna": 1,
"temp_medie": -1.6,
"temp_minima_medie": -4.5,
"temp_maxima_medie": 2.2,
"temp_minima_absoluta": -22.4,
"temp_maxima_absoluta": 15.1,
"precipitatii_lunare_medii_mm": 22.7,
"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": "statie_ceruta",
"observatie": "Ai cerut stația explicit; nu se aplică nicio aproximare geografică."
},
"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."
}
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 404 | negasit | Three 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. |
| 422 | validare | No place given, or two forms at once. |
| 429 | cota_depasita | The 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."
]
}
}
}