climatememory desarrolladores

Referencia de la API

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#

GEThttps://api.climatememory.com/v1/forecastscope: meteo1 crédito

Predicción horaria y diaria para una coordenada cualquiera.

Parámetros

ParámetroTipoPor defectoDescripción
latfloatLatitud, de −90 a 90. Obligatorio.
lonfloatLongitud, de −180 a 180. Obligatorio.
daysint7Se 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.
elevationfloat (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.
timezoneIANA zoneUTCEl huso sobre el que se cortan los agregados diarios, y el desplazamiento que lleva de vuelta cada marca de tiempo.
hourlycsvallSubconjunto de campos horarios, para reducir la carga útil. Los nombres son los de la referencia de campos.
include_dailybooltrueIncluir 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#

GEThttps://api.climatememory.com/v1/forecast/city/{country}/{slug}scope: meteo1 crédito

La 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#

GEThttps://api.climatememory.com/v1/currentscope: meteo1 crédito

Las condiciones en este instante para una coordenada, interpoladas entre dos pasos del modelo.

GEThttps://api.climatememory.com/v1/current/city/{country}/{slug}scope: meteo1 crédito

Lo 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#

GEThttps://api.climatememory.com/v1/fieldsno requiere clave0 créditos

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.

CampoUnidadNotas
temperature_2m°CCorregida por relieve cuando se conoce la altitud
apparent_temperature°CFormulación de Steadman; válida en todo el rango
relative_humidity_2m%
dewpoint_2m°C
precipitationmmAcumulado en el paso, descumulado
precipitation_probability_proxy%Heurística, no una probabilidad de conjunto. Véase más abajo.
weather_codeOMMCódigo de icono, umbralizado en mm/h y no en el acumulado del paso
cloud_cover%
wind_speed_10mm/s
wind_direction_10m°Dirección desde la que sopla el viento
wind_gust_10mm/sMáximo en el paso
pressure_mslhPaReducida al nivel del mar
surface_pressurehPaA la altitud del lugar
shortwave_radiationW/m²Media en el paso
uv_index0–11+Estimado. Véase más abajo.
capeJ/kgPotencial de tormenta
is_day0/1
visibilitymSolo ICON-EU e ICON-D2
cloud_cover_low%Solo modelos ICON
cloud_cover_mid%Solo modelos ICON
cloud_cover_high%Solo modelos ICON
precipitation_typeOMMSolo ECMWF Pídalo en hourly=
snow_depthmLo que hay en el suelo, no lo que cae. Solo ICON Pídalo en hourly=
snow_water_equivalentmmLo que el manto de nieve da al fundirse. Solo ICON Pídalo en hourly=
snow_line_altitudemVéase nieve. ICON-EU e ICON-D2 Pídalo en hourly=
freezing_level_altitudemIsoterma de 0 °C. Solo ICON Pídalo en hourly=
soil_temperature_0cm°CSuperficie. Solo ICON global e ICON-EU Pídalo en hourly=
soil_temperature_8cm°CZona radicular, capa de 7–28 cm. Solo ICON global e ICON-EU Pídalo en hourly=
shortwave_radiation_directW/m²Componente directa. Solo ICON Pídalo en hourly=
shortwave_radiation_diffuseW/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°CEn el paso, donde el modelo lo publica Pídalo en hourly=
temperature_2m_min°CEn el paso, donde el modelo lo publica Pídalo en hourly=
skin_temperature°CSuperficie del suelo, no el aire Pídalo en hourly=
heat_index°CUS NWS. Devuelve la temperatura sin más por debajo de 27 °C Pídalo en hourly=
wind_chill°CEnvironment Canada. Devuelve la temperatura sin más por encima de 10 °C Pídalo en hourly=
wind_speed_100mm/sAplicaciones eólicas Pídalo en hourly=
wind_direction_100m°Pídalo en hourly=
wind_beaufort0–12Pídalo en hourly=
cloud_cover_octas0–8Pídalo en hourly=
snowfallmmEquivalente en agua, no espesor de nieve reciente Pídalo en hourly=
total_column_water_vapourkg/m²Pídalo en hourly=
pressure_tendencyhPaPídalo en hourly=
weather_descriptiontextoPí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#

GEThttps://api.climatememory.com/v1/modelsno requiere clave0 créditos

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.modelModeloResoluciónPasadasHorizonte
mf_aromeMétéo-France AROME1.3 km8/día51 h
dwd_icon_d2DWD ICON-D22.2 km4/día48 h
noaa_hrrrNOAA HRRR3 km4/día48 h
dwd_icon_euDWD ICON-EU6.5 km2/día120 h
dwd_iconDWD ICON13 km2/día180 h
ecmwf_ifsECMWF IFS28 km2/día240 h
ecmwf_aifsECMWF AIFS28 km2/día360 h
ecmwf_waveECMWF wave28 km2/día240 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#

GEThttps://api.climatememory.com/v1/probabilityscope: meteo1 crédito

Percentiles 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#

GEThttps://api.climatememory.com/v1/air-qualityscope: meteo1 crédito

Partí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
CampoUnidadQué le dice
snow_depthmLo que hay en el suelo. Veinte centímetros pueden caer y fundirse, o posarse sobre ochenta que ya estaban.
snow_water_equivalentmmLo que da al fundirse. Medio metro de nieve polvo y medio metro de nieve compactada son cosas muy distintas.
snow_line_altitudemLa altitud por encima de la cual la precipitación cae en forma de nieve.
freezing_level_altitudemAltura 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#

GEThttps://api.climatememory.com/v1/marinescope: meteo1 crédito

Altura, 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#

GEThttps://api.climatememory.com/v1/hydrologyscope: meteo1 crédito

Caudal 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]
  }
}
CampoSignificado
river_dischargeCaudal 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_indexSaturació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.