API Meteo
Previsioni mondiali fino a 15 giorni dal CEPMMT e dai modelli nazionali ad alta risoluzione, corrette per il rilievo alla sua quota reale. Un solo scope — meteo — copre l'intera pagina.
Previsione#
meteo1 creditoPrevisione oraria e giornaliera per una coordinata qualsiasi.
Parametri
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
lat | float | — | Latitudine, da −90 a 90. Obbligatorio. |
lon | float | — | Longitudine, da −180 a 180. Obbligatorio. |
days | int | 7 | Da 1 a 16 sono accettati, ma l'orizzonte servito è di 15 giorni, quindi un 16 restituisce 15. I giorni da 11 a 15 sono una tendenza, non una previsione — si veda più sotto. |
elevation | float (m) | — | Quota reale del terreno nel suo punto. La fornisca e la temperatura viene corretta per la differenza rispetto al rilievo levigato del modello. In collina vale tipicamente da 1 a 3 °C. |
timezone | IANA zone | UTC | Il fuso su cui sono tagliati gli aggregati giornalieri, e lo scarto che ogni marca temporale riporta. |
hourly | csv | all | Sottoinsieme dei campi orari, per alleggerire il payload. I nomi sono quelli del riferimento dei campi. |
include_daily | bool | true | Includere il blocco giornaliero. |
Risposta
{
"latitude": 48.85,
"longitude": 2.35,
"timezone": "Europe/Paris",
"grid": {
"latitude": 48.85, "longitude": 2.35,
"distance_km": 0.42, "resolution_km": 1.3
},
"elevation": {
"applied": true,
"model_elevation_m": 91.0,
"location_elevation_m": 113,
"temperature_offset_c": -0.14
},
"source": {
"model": "mf_arome",
"model_run": "20260801T00Z",
"reference_time": "2026-08-01T00:00:00+00:00",
"data_age_hours": 3.95,
"stale": false,
"attribution": "Data: Météo-France (etalab-2.0)"
},
"hourly": {
"time": ["2026-08-01T00:00:00+02:00", "..."],
"temperature_2m": [18.1, 17.9, 17.6, "..."],
"apparent_temperature": [17.4, "..."],
"weather_code": [0, 1, 2, "..."]
},
"daily": {
"date": ["2026-08-01", "..."],
"temperature_2m_max": [26.6, "..."],
"temperature_2m_min": [16.2, "..."],
"precipitation_sum": [0.0, "..."],
"uv_index_max": [7.6, "..."],
"sunrise": ["2026-08-01T06:24:00+02:00", "..."],
"sunset": ["2026-08-01T21:24:00+02:00", "..."],
"daylight_hours": [15.0, "..."]
}
}
Vale la pena leggere il blocco grid.
distance_km le dice quanto dista il centro della cella del modello
dal punto richiesto, e resolution_km quanto è grossolana quella
cella. Insieme indicano quanto alla lettera prendere le cifre: 0,4 km da una
cella di 1,3 km è la sua via; 12 km da una cella di 28 km è la sua
regione.
Il blocco elevation dice cosa è stato fatto, non cosa è
stato chiesto. applied: false significa che nessuna
correzione ha avuto luogo — o non ha passato alcuna elevation,
oppure il rilievo del modello coincideva già. Non dia mai per scontato che la
correzione sia stata applicata solo perché l'ha richiesta.
Alleggerire il payload
Il blocco orario completo su 15 giorni è di circa 32 campi × 360 ore. Se ne rappresenta tre, ne chieda tre:
GET /v1/forecast?lat=48.85&lon=2.35&days=3
&hourly=temperature_2m,precipitation,weather_code
&include_daily=false
Stesso prezzo — il costo è leggere l'archivio, non serializzarlo — ma un decimo dei byte e un'analisi nettamente più rapida su un telefono.
Previsione per città#
meteo1 creditoLa stessa risposta, risolta tramite il catalogo delle città.
Preferisca questo alle coordinate grezze quando può. Il catalogo fornisce due cose che una coordinata non può dare: la quota reale della città, così la correzione per il rilievo si applica senza che lei la fornisca, e il suo fuso orario, così gli aggregati giornalieri sono tagliati sulla giornata locale giusta.
GET /v1/forecast/city/dz/alger # slug francese
GET /v1/forecast/city/dz/algiers # slug inglese — stessa città
GET /v1/forecast/city/fr/paris
country è un codice ISO-3166-1 alfa-2 in minuscolo.
slug è insensibile agli accenti: bejaia trova Béjaïa.
Uno slug sconosciuto restituisce 404 city_not_found con un array
suggestions — lo mostri anziché un vicolo cieco.
Tutti i parametri di query di /v1/forecast si
applicano ancora, tranne lat, lon ed
elevation, che il catalogo fornisce. Passare timezone
sovrascrive quello della città, il che non è quasi mai ciò che si vuole.
Non scriva a codice slug indovinati. Risolva il nome una volta con /v1/geocode, memorizzi il paese e lo slug che restituisce, e usi quelli. La geocodifica non costa crediti, quindi farlo bene è gratis.
Condizioni attuali#
meteo1 creditoLe condizioni in questo istante per una coordinata, interpolate tra due passi del modello.
meteo1 creditoLo stesso, tramite il catalogo delle città.
Temperatura, umidità, vento e pressione sono interpolati linearmente all'istante attuale, tra i due passi del modello che lo racchiudono.
Le precipitazioni non sono interpolate, ed è deliberato. Un valore orario di precipitazione è un cumulato su un intervallo, non una lettura in un istante. Interpolarlo inventerebbe pioggia in un minuto che il modello aveva collocato in un'altra ora. Ottiene invece il valore del passo che contiene l'istante — una cifra reale su un intervallo reale.
Lo usi per una visualizzazione «in questo momento». Per tutto ciò che confronterà nel tempo, usi /v1/forecast e legga l'ora che le interessa: la serie è stabile, mentre adesso le si muove sotto i piedi tra due chiamate.
Riferimento dei campi#
La stessa tabella in JSON, con le unità e quali campi sono predefiniti. Nessuna chiave necessaria.
Campi orari
21 di essi tornano per impostazione predefinita. Gli altri sono a sua
disposizione a richiesta — li nomini in hourly=, separati da
virgole — e sono trattenuti per una questione di costo, non di affidabilità:
ogni campo memorizzato è una lettura compressa distinta, quindi una risposta
predefinita che portasse tutti e 45 farebbe pagare ogni chiamante per i pochi
che vogliono lo spessore della neve.
GET /v1/forecast?lat=45.19&lon=5.72&hourly=temperature_2m,snow_line_altitude,soil_temperature_8cm
Un campo che un modello non pubblica torna come null per il
tratto di previsione di quel modello, anziché sparire dalla risposta — così una
catena che comincia su AROME e prosegue su ICON-EU restituisce
visibility dall'inizio alla fine, a null per le prime 51 ore. Un
nome di campo sconosciuto dà un 400 unknown_field,
con la corrispondenza più vicina suggerita; prima veniva ignorato in
silenzio.
| Campo | Unità | Note |
|---|---|---|
temperature_2m | °C | Corretta per il rilievo quando la quota è nota |
apparent_temperature | °C | Formulazione di Steadman; valida su tutto l'intervallo |
relative_humidity_2m | % | |
dewpoint_2m | °C | |
precipitation | mm | Cumulato sul passo, decumulato |
precipitation_probability_proxy | % | Euristica, non una probabilità d'insieme. Si veda più sotto. |
weather_code | OMM | Codice icona, soglia su mm/h e non sul cumulato del passo |
cloud_cover | % | |
wind_speed_10m | m/s | |
wind_direction_10m | ° | Direzione da cui soffia il vento |
wind_gust_10m | m/s | Massimo sul passo |
pressure_msl | hPa | Ridotta al livello del mare |
surface_pressure | hPa | Alla quota del luogo |
shortwave_radiation | W/m² | Media sul passo |
uv_index | 0–11+ | Stimato. Si veda più sotto. |
cape | J/kg | Potenziale temporalesco |
is_day | 0/1 | |
visibility | m | Solo ICON-EU e ICON-D2 |
cloud_cover_low | % | Solo modelli ICON |
cloud_cover_mid | % | Solo modelli ICON |
cloud_cover_high | % | Solo modelli ICON |
precipitation_type | OMM | Solo CEPMMT Lo chieda in hourly= |
snow_depth | m | Ciò che è al suolo, non ciò che cade. Solo ICON Lo chieda in hourly= |
snow_water_equivalent | mm | Ciò che il manto nevoso rende sciogliendosi. Solo ICON Lo chieda in hourly= |
snow_line_altitude | m | Si veda neve. ICON-EU e ICON-D2 Lo chieda in hourly= |
freezing_level_altitude | m | Isoterma di 0 °C. Solo ICON Lo chieda in hourly= |
soil_temperature_0cm | °C | Superficie. Solo ICON globale e ICON-EU Lo chieda in hourly= |
soil_temperature_8cm | °C | Zona radicale, strato 7–28 cm. Solo ICON globale e ICON-EU Lo chieda in hourly= |
shortwave_radiation_direct | W/m² | Componente diretta. Solo ICON Lo chieda in hourly= |
shortwave_radiation_diffuse | W/m² | Componente diffusa. Solo ICON Lo chieda in hourly= |
solar_elevation | ° | Calcolata dalla marca temporale e dalla coordinata Lo chieda in hourly= |
solar_azimuth | ° | Calcolato dalla marca temporale e dalla coordinata Lo chieda in hourly= |
temperature_2m_max | °C | Sul passo, dove il modello lo pubblica Lo chieda in hourly= |
temperature_2m_min | °C | Sul passo, dove il modello lo pubblica Lo chieda in hourly= |
skin_temperature | °C | Superficie del suolo, non l'aria Lo chieda in hourly= |
heat_index | °C | US NWS. Restituisce la temperatura semplice sotto i 27 °C Lo chieda in hourly= |
wind_chill | °C | Environment Canada. Restituisce la temperatura semplice sopra i 10 °C Lo chieda in hourly= |
wind_speed_100m | m/s | Applicazioni eoliche Lo chieda in hourly= |
wind_direction_100m | ° | Lo chieda in hourly= |
wind_beaufort | 0–12 | Lo chieda in hourly= |
cloud_cover_octas | 0–8 | Lo chieda in hourly= |
snowfall | mm | Equivalente in acqua, non spessore di neve fresca Lo chieda in hourly= |
total_column_water_vapour | kg/m² | Lo chieda in hourly= |
pressure_tendency | hPa | Lo chieda in hourly= |
weather_description | testo | Lo chieda in hourly= |
Campi giornalieri
date, temperature_2m_max,
temperature_2m_min, temperature_2m_mean,
precipitation_sum, wind_speed_max,
wind_gust_max, shortwave_radiation_sum (MJ/m²),
uv_index_max, sunrise, sunset,
daylight_hours, weather_code.
Aggregati su giornate solari locali, non UTC. Una giornata parziale a un estremo dell'intervallo viene omessa anziché riportata con un massimo fuorviante — quindi una richiesta di 7 giorni può legittimamente restituire 6 righe giornaliere.
Due campi sono stime, e preferiamo dirlo piuttosto che lasciarglielo scoprire.
uv_index è derivato dall'elevazione solare e dalla radiazione a
banda larga, non da una colonna di ozono. Preciso a circa ±1 unità — abbastanza
per «si metta un cappello», non per un'affermazione medica.
precipitation_probability_proxy è una stima, non una
probabilità. Un modello deterministico non ha dispersione da cui ricavarne una.
Porta il suffisso _proxy perché nessuno lo confonda con il prodotto
d'insieme servito da
/v1/probability, che è una vera
frequenza su 51 membri.
Combina due termini. Il primo si chiede se la pioggia della cella raggiunge il suo punto: il tasso memorizzato è una media sull'intera cella, quindi a 28 km — 780 km² — una media debole può essere un vero rovescio su una piccola parte di essa. Assumendo la distribuzione sotto-griglia dei tassi come una Weibull, con una forma fissata dalla dimensione della cella e dalla media del modello stesso, si ottiene in forma chiusa la probabilità che un punto della cella superi 0,1 mm/h. Il secondo termine limita ciò che un cielo coperto e quasi saturo può pretendere là dove il modello non mette alcuna pioggia nella cella. Entrambi vengono poi ponderati per quanto credito merita una corsa a quella scadenza, ed è per questo che la stessa pioggia si legge più bassa al giorno 9 che al giorno 1.
Di conseguenza uno stesso luogo può leggersi diversamente secondo due modelli, ed è giusto così: una cella di 2,2 km e una di 28 km sono realmente in disaccordo su cosa significhi una media debole. Le applicazioni di largo consumo che danno una sola cifra nascondono questo.
Modelli e risoluzione#
Quali modelli sono attivi, cosa copre ciascuno, quanto è fresco ciascuno. Nessuna chiave necessaria.
Serviamo il modello più fine che copre sia il suo punto sia la sua
scadenza. Lei non ne sceglie mai uno; la scelta è riportata in
source.model, così può sempre sapere quale ha risposto.
I modelli ad alta risoluzione sono tutti a breve termine — a 1 km l'atmosfera diventa caotica entro due giorni, quindi prevedere oltre non avrebbe senso — e la risoluzione scende perciò a gradini man mano che la previsione avanza:
giorno 0 ──── giorno 2 ──── giorno 5 ─────────────── giorno 15
AROME 1,3 km (Francia)
ICON-D2 2,2 km (Germania, Alpi, Benelux)
HRRR 3 km (USA e Canada meridionale)
ICON-EU 6,5 km (Europa)
ICON 13 km · CEPMMT 28 km (globale)
AIFS (solo tendenza)
source.model | Modello | Risoluzione | Corse | Orizzonte |
|---|---|---|---|---|
mf_arome | Météo-France AROME | 1.3 km | 8/giorno | 51 h |
dwd_icon_d2 | DWD ICON-D2 | 2.2 km | 4/giorno | 48 h |
noaa_hrrr | NOAA HRRR | 3 km | 4/giorno | 48 h |
dwd_icon_eu | DWD ICON-EU | 6.5 km | 2/giorno | 120 h |
dwd_icon | DWD ICON | 13 km | 2/giorno | 180 h |
ecmwf_ifs | ECMWF IFS | 28 km | 2/giorno | 240 h |
ecmwf_aifs | ECMWF AIFS | 28 km | 2/giorno | 360 h |
ecmwf_wave | ECMWF wave | 28 km | 2/giorno | 240 h |
Le transizioni al bordo del dominio di un modello sono sfumate, così due località ai due lati di un confine non divergono mai per un salto netto.
I giorni da 11 a 15 sono una tendenza, non una previsione. A quella scadenza l'abilità si avvicina alla climatologia. La pubblichiamo perché viene richiesta; la tratti come una direzione di evoluzione, e se la mostra, lo dica.
/v1/models non richiede chiave, il che ne fa l'endpoint giusto
da interrogare da una pagina di stato o prima di acquistare: riporta l'ultima
corsa di ogni modello e la sua età, così «i dati sono freschi?» si risponde
senza spendere un credito.
Probabilità d'insieme#
meteo1 creditoPercentili e probabilità di pioggia dall'insieme del CEPMMT a 51 membri.
Una previsione singola dice 22 °C giovedì. È una congettura presentata come un fatto. Questo endpoint risponde alla domanda su cui lei decide davvero: quanto è sicura, e quale probabilità di pioggia merita di organizzarsi attorno.
È calcolato dall'insieme del CEPMMT — lo stesso modello eseguito 50 volte da condizioni iniziali leggermente diverse. Dove le corse concordano, la previsione è sicura. Dove si disperdono, è l'atmosfera stessa a essere incerta, e nessun modello per quanto buono può dirle di più.
{
"members": 50,
"hourly": {
"time": ["2026-08-01T00:00:00+00:00"],
"temperature_2m_p10": [26.4],
"temperature_2m_p50": [26.78],
"temperature_2m_p90": [27.3],
"temperature_2m_spread": [0.4],
"precipitation_probability_0_1mm": [10.0],
"precipitation_probability_1_0mm": [0.0],
"precipitation_probability_5_0mm": [0.0],
"precipitation_probability_10_0mm": [0.0],
"precipitation_p90": [0.1]
}
}
Come leggerlo
p10 e p90 racchiudono l'80 % centrale dei membri:
uno su dieci si aspetta più freddo di p10, uno su dieci più caldo
di p90. Uno spread di 0,4 °C è una situazione
consolidata di cui può fidarsi; 3 °C significa che i modelli divergono e conviene
dirlo ai suoi utenti anziché sceglierne uno.
Le soglie di pioggia sono decisioni e non cifre tonde — 0,1 mm è
bagnato, punto, 1 mm è prenda un cappotto, 5 e 10 mm sono
questo è un problema. precipitation_p90 è il caso
sfavorevole: solo un membro su dieci è più piovoso.
Solo due variabili, temperatura e precipitazioni. Aggiungere nuvolosità, vento e pressione raddoppierebbe la banda dell'intera piattaforma per cifre su cui nessuno decide nulla.
Qualità dell'aria#
meteo1 creditoParticolato, ozono, NO₂, SO₂, CO e polvere sahariana, da Copernicus CAMS.
Questo è l'endpoint che conta di più in Nordafrica e nel Mediterraneo. Un episodio di polvere spinge le PM10 oltre i mille microgrammi per metro cubo per giorni interi, il che è una decisione di salute più che una cifra, ed è coperto male dai servizi gratuiti di largo consumo.
{
"current": {
"pm2_5": 38.7,
"band": "poor",
"who_guidelines_ug_m3": {"pm2_5": 15.0, "pm10": 45.0,
"nitrogen_dioxide": 25.0, "ozone": 100.0}
},
"hourly": {
"time": ["2026-08-01T00:00:00+00:00"],
"pm2_5": [38.7], "pm10": [85.8], "ozone": [43.4],
"nitrogen_dioxide": [19.0], "dust_aod_550nm": [0.24]
},
"units": {"pm2_5": "ug/m3", "pm10": "ug/m3", "dust_aod_550nm": "1"}
}
Tutte le concentrazioni sono in µg/m³, l'unità in cui la
qualità dell'aria viene citata ovunque. dust_aod_550nm è uno
spessore ottico e non ha unità: sopra circa 0,5 il cielo è visibilmente velato,
sopra 1,0 il sole è attenuato.
I valori guida a breve termine dell'OMS viaggiano in ogni risposta, così una
cifra può essere collocata senza andarla a cercare. band segue
l'indice europeo di qualità dell'aria per il PM2,5: buona, discreta, media,
scadente, molto scadente, estremamente scadente.
La neve e il limite delle nevicate#
Quattro campi, e rispondono a domande diverse. snowfall è quanta
ne cade; gli altri descrivono ciò che è al suolo, e dove.
Li chieda per nome — non sono nella risposta predefinita:
GET /v1/forecast?lat=45.19&lon=5.72&hourly=snowfall,snow_depth,snow_water_equivalent,snow_line_altitude,freezing_level_altitude
| Campo | Unità | Cosa le dice |
|---|---|---|
snow_depth | m | Ciò che è al suolo. Venti centimetri possono cadere e sciogliersi, oppure posarsi su ottanta già presenti. |
snow_water_equivalent | mm | Ciò che rende sciogliendosi. Mezzo metro di neve farinosa e mezzo metro di neve compatta sono cose molto diverse. |
snow_line_altitude | m | La quota sopra la quale la precipitazione cade come neve. |
freezing_level_altitude | m | Altezza dell'isoterma di 0 °C, tipicamente qualche centinaio di metri sopra il limite delle nevicate. |
È il limite delle nevicate che vale la pena leggere. «Piove a 800 m e nevica a 1200» è un'informazione su cui una stazione sciistica, un ente stradale o un automobilista possono agire; «3 mm di precipitazione» no. Conta anche in Nordafrica — l'Atlante ha comprensori sciistici a Chréa e Tikjda, e gli altipiani di Sétif, Batna e Djelfa superano i 1000 m.
I ghiacciai riportano decine di metri di spessore nevoso, perché è così che il modello rappresenta il ghiaccio perenne e non per un errore di misura. La neve stagionale più profonda della Terra si aggira sugli 11 m — consideri qualsiasi cosa oltre come ghiaccio, non come meteorologia.
Questi campi provengono da ICON, del DWD, che copre il mondo a 13 km. I dati
aperti del CEPMMT pubblicano lo spessore nevoso ma non il limite delle nevicate:
è quindi un caso in cui il modello più grossolano è il più utile.
snow_line_altitude è un prodotto regionale — ICON-EU e ICON-D2 lo
pubblicano, ICON globale no, quindi fuori dall'Europa ottiene l'isoterma e lo
spessore, ma non il limite stesso.
Mare — stato del mare#
meteo1 creditoAltezza, direzione e periodo delle onde dal modello di moto ondoso del CEPMMT, in tutto il mondo, fino a 10 giorni.
{
"hourly": {
"time": ["2026-08-01T00:00:00+00:00"],
"wave_height": [0.32],
"wave_direction": [264.3],
"wave_period": [3.79],
"wave_peak_period": [4.21]
}
}
L'altezza d'onda è l'altezza significativa — la media del terzo di onde più alte, che è più o meno ciò che riferisce un osservatore in mare. Le onde singole raggiungono circa il doppio, ed è quella la cifra che conta se sta decidendo se uscire. La direzione è quella da cui provengono le onde, come per il vento.
Un punto a terra restituisce 404 not_at_sea anziché una lista di
null. Il modello di moto ondoso non ha alcun valore sulla terraferma per
costruzione, e dirlo è più utile di una risposta che sembra un guasto del
servizio. Se lascia che i suoi utenti posizionino un segnaposto, gestisca questo
codice in modo esplicito.
Fiumi#
meteo1 creditoPortata dei fiumi da Copernicus GloFAS su una rete idrografica a 0,05°, fino a 10 giorni.
Risponde a ciò che nessun modello meteorologico può dare: non quanta pioggia cade a monte, ma quanta acqua arriva qui — una cifra del tutto diversa, separata dalla pioggia da un bacino idrografico, da uno stato di umidità del suolo e da uno o due giorni di percorso.
{
"disclaimer": "Information only. Only national and regional authorities
are authorised to issue flood warnings.",
"daily": {
"time": ["2026-08-01T00:00:00+00:00"],
"river_discharge": [4.953],
"soil_wetness_index": [0.448]
}
}
| Campo | Significato |
|---|---|
river_discharge | Portata media in m³/s sulle 24 ore che terminano in quell'istante. Zero significa che il modello non ha alcun fiume in quella cella, non che un fiume si sia prosciugato. |
soil_wetness_index | Saturazione del bacino, da 0 secco a 1 saturo. Valori alti significano che la pioggia ulteriore scorre via anziché infiltrarsi. |
Questo non è un avviso di piena e non va presentato come tale. La licenza Copernicus riserva gli avvisi di piena alle autorità nazionali e regionali nel loro ambito di competenza, ed è l'assetto giusto — chi è autorizzato ad allertare è anche chi può chiudere una strada ed evacuare un paese.
Portata in m³/s, sì. Un'allerta, un colore di gravità o un'istruzione ad agire, no, qualunque aspetto abbiano le cifre quel giorno. La clausola di esclusione viaggia in ogni corpo di risposta, non solo qui, ed è lì perché raggiunga i suoi utenti anche se questa pagina non l'ha fatto.