API de Meteorología
Predicciones mundiales hasta 15 días desde el ECMWF y los modelos nacionales de alta resolución, corregidas por relieve a su altitud real. Un único scope — meteo — cubre toda esta página.
Predicción#
meteo1 créditoPredicción horaria y diaria para una coordenada cualquiera.
Parámetros
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
lat | float | — | Latitud, de −90 a 90. Obligatorio. |
lon | float | — | Longitud, de −180 a 180. Obligatorio. |
days | int | 7 | Se aceptan de 1 a 16, pero el horizonte servido es de 15 días, así que un 16 devuelve 15. Los días 11 a 15 son una tendencia, no una predicción — véase más abajo. |
elevation | float (m) | — | Altitud real del terreno en su punto. Facilítela y la temperatura se corrige por la diferencia con el relieve suavizado del modelo. En zonas de montaña suele valer entre 1 y 3 °C. |
timezone | IANA zone | UTC | El huso sobre el que se cortan los agregados diarios, y el desplazamiento que lleva de vuelta cada marca de tiempo. |
hourly | csv | all | Subconjunto de campos horarios, para reducir la carga útil. Los nombres son los de la referencia de campos. |
include_daily | bool | true | Incluir el bloque diario. |
Respuesta
{
"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 leer el bloque grid.
distance_km le dice a qué distancia está el centro de la celda del
modelo respecto del punto que pidió, y resolution_km lo gruesa que
es esa celda. Juntos indican con qué literalidad tomar las cifras: 0,4 km desde
una celda de 1,3 km es su calle; 12 km desde una celda de 28 km es
su región.
El bloque elevation dice lo que se hizo, no lo que se
pidió. applied: false significa que no hubo corrección —
o no pasó ninguna elevation, o el relieve del modelo ya coincidía.
Nunca dé por hecho que la corrección se aplicó solo porque usted la
solicitó.
Reducir la carga útil
El bloque horario completo a 15 días son unos 32 campos × 360 horas. Si va a representar tres, pida tres:
GET /v1/forecast?lat=48.85&lon=2.35&days=3
&hourly=temperature_2m,precipitation,weather_code
&include_daily=false
Mismo precio — el coste está en leer el archivo, no en serializarlo — pero la décima parte de los bytes y notablemente más rápido de analizar en un teléfono.
Predicción por ciudad#
meteo1 créditoLa misma respuesta, resuelta a través del catálogo de ciudades.
Prefiera esto a las coordenadas en bruto siempre que pueda. El catálogo aporta dos cosas que una coordenada no puede: la altitud real de la ciudad, con lo que la corrección de relieve se aplica sin que usted la facilite, y su huso horario, con lo que los agregados diarios se cortan en el día local correcto.
GET /v1/forecast/city/dz/alger # slug en francés
GET /v1/forecast/city/dz/algiers # slug en inglés — la misma ciudad
GET /v1/forecast/city/fr/paris
country es un código ISO-3166-1 alfa-2 en minúsculas.
slug es insensible a los acentos: bejaia encuentra
Béjaïa. Un slug desconocido devuelve 404 city_not_found con un
array suggestions — muéstrelo en lugar de un callejón sin
salida.
Siguen aplicándose todos los parámetros de consulta de
/v1/forecast salvo lat, lon y
elevation, que aporta el catálogo. Pasar timezone
anula el de la ciudad, que casi nunca es lo que se busca.
No incruste slugs adivinados. Resuelva el nombre una vez con /v1/geocode, guarde el país y el slug que devuelva, y use esos. El geocodificado no cuesta créditos, así que hacerlo bien es gratis.
Condiciones actuales#
meteo1 créditoLas condiciones en este instante para una coordenada, interpoladas entre dos pasos del modelo.
meteo1 créditoLo mismo, a través del catálogo de ciudades.
Temperatura, humedad, viento y presión se interpolan linealmente al instante actual, entre los dos pasos del modelo que lo enmarcan.
La precipitación no se interpola, y es deliberado. Un valor horario de precipitación es un acumulado sobre un intervalo, no una lectura en un instante. Interpolarlo inventaría lluvia en un minuto que el modelo había situado en otra hora. En su lugar obtiene el valor del paso que contiene el instante — una cifra real sobre un intervalo real.
Úselo para una vista de «ahora mismo». Para todo lo que vaya a comparar en el tiempo, use /v1/forecast y lea la hora que le interese: la serie es estable, mientras que ahora se le mueve bajo los pies entre dos llamadas.
Referencia de campos#
La misma tabla en JSON, con unidades y qué campos vienen por defecto. No requiere clave.
Campos horarios
21 de ellos vuelven por defecto. Los demás están a su disposición sin más que
pedirlos — nómbrelos en hourly=, separados por comas — y se retienen
por coste, no por desconfianza: cada campo almacenado es una lectura comprimida
distinta, de modo que una respuesta por defecto que llevara los 45 haría pagar a
todos los clientes por los pocos que quieren el espesor de nieve.
GET /v1/forecast?lat=45.19&lon=5.72&hourly=temperature_2m,snow_line_altitude,soil_temperature_8cm
Un campo que un modelo no publica vuelve como null en el tramo
de predicción de ese modelo, en lugar de desaparecer de la respuesta — de modo
que un encadenamiento que empieza en AROME y sigue en ICON-EU devuelve
visibility de principio a fin, a null durante las primeras 51
horas. Un nombre de campo desconocido da un
400 unknown_field, con la coincidencia más próxima como sugerencia;
antes se ignoraba en silencio.
| Campo | Unidad | Notas |
|---|---|---|
temperature_2m | °C | Corregida por relieve cuando se conoce la altitud |
apparent_temperature | °C | Formulación de Steadman; válida en todo el rango |
relative_humidity_2m | % | |
dewpoint_2m | °C | |
precipitation | mm | Acumulado en el paso, descumulado |
precipitation_probability_proxy | % | Heurística, no una probabilidad de conjunto. Véase más abajo. |
weather_code | OMM | Código de icono, umbralizado en mm/h y no en el acumulado del paso |
cloud_cover | % | |
wind_speed_10m | m/s | |
wind_direction_10m | ° | Dirección desde la que sopla el viento |
wind_gust_10m | m/s | Máximo en el paso |
pressure_msl | hPa | Reducida al nivel del mar |
surface_pressure | hPa | A la altitud del lugar |
shortwave_radiation | W/m² | Media en el paso |
uv_index | 0–11+ | Estimado. Véase más abajo. |
cape | J/kg | Potencial de tormenta |
is_day | 0/1 | |
visibility | m | Solo ICON-EU e ICON-D2 |
cloud_cover_low | % | Solo modelos ICON |
cloud_cover_mid | % | Solo modelos ICON |
cloud_cover_high | % | Solo modelos ICON |
precipitation_type | OMM | Solo ECMWF Pídalo en hourly= |
snow_depth | m | Lo que hay en el suelo, no lo que cae. Solo ICON Pídalo en hourly= |
snow_water_equivalent | mm | Lo que el manto de nieve da al fundirse. Solo ICON Pídalo en hourly= |
snow_line_altitude | m | Véase nieve. ICON-EU e ICON-D2 Pídalo en hourly= |
freezing_level_altitude | m | Isoterma de 0 °C. Solo ICON Pídalo en hourly= |
soil_temperature_0cm | °C | Superficie. Solo ICON global e ICON-EU Pídalo en hourly= |
soil_temperature_8cm | °C | Zona radicular, capa de 7–28 cm. Solo ICON global e ICON-EU Pídalo en hourly= |
shortwave_radiation_direct | W/m² | Componente directa. Solo ICON Pídalo en hourly= |
shortwave_radiation_diffuse | W/m² | Componente difusa. Solo ICON Pídalo en hourly= |
solar_elevation | ° | Calculada a partir de la marca de tiempo y la coordenada Pídalo en hourly= |
solar_azimuth | ° | Calculado a partir de la marca de tiempo y la coordenada Pídalo en hourly= |
temperature_2m_max | °C | En el paso, donde el modelo lo publica Pídalo en hourly= |
temperature_2m_min | °C | En el paso, donde el modelo lo publica Pídalo en hourly= |
skin_temperature | °C | Superficie del suelo, no el aire Pídalo en hourly= |
heat_index | °C | US NWS. Devuelve la temperatura sin más por debajo de 27 °C Pídalo en hourly= |
wind_chill | °C | Environment Canada. Devuelve la temperatura sin más por encima de 10 °C Pídalo en hourly= |
wind_speed_100m | m/s | Aplicaciones eólicas Pídalo en hourly= |
wind_direction_100m | ° | Pídalo en hourly= |
wind_beaufort | 0–12 | Pídalo en hourly= |
cloud_cover_octas | 0–8 | Pídalo en hourly= |
snowfall | mm | Equivalente en agua, no espesor de nieve reciente Pídalo en hourly= |
total_column_water_vapour | kg/m² | Pídalo en hourly= |
pressure_tendency | hPa | Pídalo en hourly= |
weather_description | texto | Pídalo en hourly= |
Campos diarios
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.
Agregados sobre días naturales locales, no UTC. Un día parcial en cualquiera de los extremos del rango se omite en lugar de informarse con un máximo engañoso — así que una solicitud de 7 días puede devolver legítimamente 6 filas diarias.
Dos campos son estimaciones, y preferimos decirlo a que usted lo descubra.
uv_index se deriva de la elevación solar y la radiación de banda
ancha, no de una columna de ozono. Preciso a ±1 unidad aproximadamente —
suficiente para «póngase un sombrero», no para una afirmación médica.
precipitation_probability_proxy es una estimación, no una
probabilidad. Un modelo determinista no tiene dispersión de la que derivar una.
Lleva el sufijo _proxy para que nadie lo confunda con el producto
de conjunto que sirve
/v1/probability, que sí es una
frecuencia real sobre 51 miembros.
Combina dos términos. El primero se pregunta si la lluvia de la celda alcanza su punto: la tasa almacenada es una media sobre toda la celda, de modo que a 28 km — 780 km² — una media escasa puede ser un chubasco real sobre una parte pequeña de ella. Tomando la distribución subrejilla de tasas como una Weibull, con una forma fijada por el tamaño de la celda y por la propia media del modelo, se obtiene en forma cerrada la probabilidad de que un punto de la celda supere 0,1 mm/h. El segundo término acota lo que un cielo cubierto y casi saturado puede reclamar allí donde el modelo no pone lluvia alguna en la celda. Ambos se ponderan después por el crédito que merece una pasada a ese plazo, y por eso la misma lluvia se lee más baja el día 9 que el día 1.
En consecuencia un mismo lugar puede leerse distinto según dos modelos, y debe hacerlo: una celda de 2,2 km y otra de 28 km discrepan realmente sobre lo que significa una media escasa. Las aplicaciones de consumo que dan una sola cifra ocultan esto.
Modelos y resolución#
Qué modelos están operativos, qué cubre cada uno y cómo de fresco es cada uno. No requiere clave.
Servimos el modelo más fino que cubre a la vez su punto y su plazo.
Usted nunca elige uno; la elección se informa en source.model, de
modo que siempre puede saber cuál respondió.
Los modelos de alta resolución son todos de corto plazo — a 1 km la atmósfera se vuelve caótica en menos de dos días, así que predecir más lejos no tendría sentido — y la resolución baja por escalones a medida que avanza la predicción:
día 0 ─────── día 2 ─────── día 5 ───────────────── día 15
AROME 1,3 km (Francia)
ICON-D2 2,2 km (Alemania, Alpes, Benelux)
HRRR 3 km (EE. UU. y sur de Canadá)
ICON-EU 6,5 km (Europa)
ICON 13 km · ECMWF 28 km (global)
AIFS (solo tendencia)
source.model | Modelo | Resolución | Pasadas | Horizonte |
|---|---|---|---|---|
mf_arome | Météo-France AROME | 1.3 km | 8/día | 51 h |
dwd_icon_d2 | DWD ICON-D2 | 2.2 km | 4/día | 48 h |
noaa_hrrr | NOAA HRRR | 3 km | 4/día | 48 h |
dwd_icon_eu | DWD ICON-EU | 6.5 km | 2/día | 120 h |
dwd_icon | DWD ICON | 13 km | 2/día | 180 h |
ecmwf_ifs | ECMWF IFS | 28 km | 2/día | 240 h |
ecmwf_aifs | ECMWF AIFS | 28 km | 2/día | 360 h |
ecmwf_wave | ECMWF wave | 28 km | 2/día | 240 h |
Las transiciones en el borde del dominio de un modelo se funden, de modo que dos localidades a ambos lados de una frontera nunca discrepan por un salto brusco.
Los días 11 a 15 son una tendencia, no una predicción. A ese plazo la destreza se aproxima a la climatología. La publicamos porque se pide; trátela como sentido de evolución, y si la muestra, dígalo.
/v1/models no necesita clave, lo que lo convierte en el endpoint
adecuado para consultar desde una página de estado o antes de comprar: informa
de la última pasada de cada modelo y de su antigüedad, así que «¿están frescos
los datos?» se responde sin gastar un crédito.
Probabilidades de conjunto#
meteo1 créditoPercentiles y probabilidades de lluvia del conjunto del ECMWF de 51 miembros.
Una predicción única dice 22 °C el jueves. Eso es una conjetura presentada como un hecho. Este endpoint responde a la pregunta con la que usted realmente decide: ¿cuán segura es, y qué probabilidad de lluvia merece que se organice en torno a ella?
Se calcula a partir del conjunto del ECMWF — el mismo modelo ejecutado 50 veces desde condiciones iniciales ligeramente distintas. Donde las pasadas coinciden, la predicción es firme. Donde se dispersan, es la propia atmósfera la que es incierta, y ningún modelo, por bueno que sea, puede decirle más.
{
"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]
}
}
Cómo leerlo
p10 y p90 enmarcan el 80 % central de los miembros:
uno de cada diez espera más frío que p10, uno de cada diez más
calor que p90. Un spread de 0,4 °C es una situación
asentada en la que puede confiar; 3 °C significa que los modelos discrepan y más
vale decírselo a sus usuarios que elegir uno.
Los umbrales de lluvia son decisiones y no cifras redondas — 0,1 mm es
mojado, sin más, 1 mm es coja un abrigo, 5 y 10 mm son
esto es un problema. precipitation_p90 es el caso
desfavorable: solo uno de cada diez miembros es más lluvioso.
Solo dos variables, temperatura y precipitación. Añadir nubosidad, viento y presión duplicaría el ancho de banda de toda la plataforma por cifras con las que nadie decide nada.
Calidad del aire#
meteo1 créditoPartículas, ozono, NO₂, SO₂, CO y polvo sahariano, desde Copernicus CAMS.
Este es el endpoint que más importa en el norte de África y el Mediterráneo. Un episodio de polvo lleva las PM10 por encima de los mil microgramos por metro cúbico durante días seguidos, lo que es una decisión de salud más que una cifra, y está mal cubierto por los servicios gratuitos de 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"}
}
Todas las concentraciones van en µg/m³, la unidad en la que
se cita la calidad del aire en todas partes. dust_aod_550nm es un
espesor óptico y no tiene unidad: por encima de 0,5 aproximadamente el cielo
está visiblemente turbio, por encima de 1,0 el sol queda atenuado.
Los valores guía a corto plazo de la OMS viajan en cada respuesta, de modo
que una cifra puede situarse sin ir a buscarla. band sigue el
índice europeo de calidad del aire para PM2,5: buena, razonable, media, mala,
muy mala, extremadamente mala.
La nieve y la cota de nieve#
Cuatro campos, y responden a preguntas distintas. snowfall es
cuánta cae; los demás describen lo que hay en el suelo, y dónde.
Pídalos por su nombre — no están en la respuesta por defecto:
GET /v1/forecast?lat=45.19&lon=5.72&hourly=snowfall,snow_depth,snow_water_equivalent,snow_line_altitude,freezing_level_altitude
| Campo | Unidad | Qué le dice |
|---|---|---|
snow_depth | m | Lo que hay en el suelo. Veinte centímetros pueden caer y fundirse, o posarse sobre ochenta que ya estaban. |
snow_water_equivalent | mm | Lo que da al fundirse. Medio metro de nieve polvo y medio metro de nieve compactada son cosas muy distintas. |
snow_line_altitude | m | La altitud por encima de la cual la precipitación cae en forma de nieve. |
freezing_level_altitude | m | Altura de la isoterma de 0 °C, típicamente unos cientos de metros por encima de la cota de nieve. |
La cota de nieve es la que merece leerse. «Llueve a 800 m y nieva a 1200» es algo sobre lo que una estación de esquí, una autoridad de carreteras o un conductor pueden actuar; «3 mm de precipitación» no lo es. También importa en el norte de África — el Atlas tiene estaciones de esquí en Chréa y Tikjda, y las mesetas altas de Sétif, Batna y Djelfa superan los 1000 m.
Los glaciares informan de decenas de metros de espesor de nieve, porque así representa el modelo el hielo permanente y no por un error de medición. La nieve estacional más profunda de la Tierra ronda los 11 m — trate cualquier cosa por encima de eso como hielo, no como meteorología.
Estos campos proceden de ICON, del DWD, que cubre el mundo a 13 km. Los datos
abiertos del ECMWF publican el espesor de nieve pero no la cota: este es, pues,
un caso en el que el modelo más grueso es el más útil.
snow_line_altitude es un producto regional — ICON-EU e ICON-D2 lo
publican, ICON global no, de modo que fuera de Europa obtiene la isoterma y el
espesor, pero no la cota en sí.
Mar — estado del mar#
meteo1 créditoAltura, dirección y periodo de las olas del modelo de oleaje del ECMWF, en todo el mundo, hasta 10 días.
{
"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]
}
}
La altura de ola es la altura significativa — la media del tercio de olas más altas, que es aproximadamente lo que informa un observador en el mar. Las olas individuales alcanzan cerca del doble, y esa es la cifra que importa si está decidiendo si salir. La dirección es aquella desde la que vienen las olas, como en la dirección del viento.
Un punto en tierra devuelve 404 not_at_sea en lugar de una lista
de valores null. El modelo de oleaje no tiene valor sobre tierra por
construcción, y decirlo es más útil que una respuesta que parece un fallo del
servicio. Si permite que sus usuarios coloquen un marcador, trate este código de
forma explícita.
Ríos#
meteo1 créditoCaudal de los ríos desde Copernicus GloFAS sobre una red fluvial a 0,05°, hasta 10 días.
Responde a lo que ningún modelo meteorológico puede: no cuánta lluvia cae aguas arriba, sino cuánta agua llega aquí — una cifra muy distinta, separada de la lluvia por una cuenca, un estado de humedad del suelo y uno o dos días de recorrido.
{
"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 | Significado |
|---|---|
river_discharge | Caudal medio en m³/s durante las 24 horas que terminan en ese instante. Cero significa que el modelo no tiene ningún río en esa celda, no que un río se haya secado. |
soil_wetness_index | Saturación de la cuenca, de 0 seco a 1 saturado. Los valores altos significan que la lluvia adicional escurre en lugar de infiltrarse. |
Esto no es un aviso de crecida y no debe presentarse como tal. La licencia de Copernicus reserva los avisos de crecida a las autoridades nacionales y regionales dentro de su ámbito de responsabilidad, y esa es la ordenación correcta — quienes están facultados para avisar son también quienes pueden cortar una carretera y evacuar un pueblo.
Caudal en m³/s, sí. Una alerta, un color de gravedad o una instrucción de actuar, no, tengan el aspecto que tengan las cifras ese día. La cláusula de exención viaja en cada cuerpo de respuesta, no solo aquí, y está ahí para que llegue a sus usuarios aunque esta página no lo haya hecho.