Empezar
Tres API, una sola clave: predicciones meteorológicas del ECMWF y de los modelos nacionales de alta resolución, grados-día de calefacción y de refrigeración, y 87 años de clima diario. Esta página contiene todo lo que necesita antes de la primera llamada. Los endpoints en sí están en las tres páginas de referencia.
De qué se trata#
Climate Memory sirve tres productos desde dos hosts, con una única clave de API.
| Producto | Host | Responde a | Referencia |
|---|---|---|---|
| Meteorología | https://api.climatememory.com | Qué hará el tiempo — predicción, condiciones actuales, conjuntos, calidad del aire, estado del mar, ríos | API de Meteorología |
| Grados-día | https://api.climatememory.com | Cuánto hubo que calentar o enfriar un edificio — desde 1950, en cualquier lugar | API de Grados-día |
| Clima | https://api.climatememory.com | Qué es normal aquí — 87 años de clima diario, normales OMM, tendencias | API de Clima |
Dos hosts en lugar de uno porque los grados-día leen otro archivo con un perfil de coste distinto, y separarlos permite que uno sea lento sin ralentizar al otro. No tiene que preocuparse por ello más allá de copiar la URL base correcta.
Todos los endpoints son GET. En esta API no hay
cuerpo de solicitud en ninguna parte, ni cursor de paginación, ni sesión. Una
llamada es una URL más una cabecera, lo que significa que puede probar
cualquiera de ellas en la barra de direcciones de un navegador o con una
herramienta como curl, y cachear cualquiera de ellas delante de
nosotros sin tratamiento especial.
Su primera llamada#
Tres pasos. Todo junto lleva alrededor de un minuto.
1. Obtener una clave
Cree una cuenta en developers.climatememory.com/signin. El plan
gratuito no pide tarjeta, le da 10 000 créditos al mes, y su clave aparece en
pantalla de inmediato. Guárdela en una variable de entorno — todos los ejemplos
de abajo leen $API_KEY.
export API_KEY="wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
2. Hacer la llamada
curl -sH "X-API-Key: $API_KEY" \
"https://api.climatememory.com/v1/forecast?lat=48.85&lon=2.35&days=3"
import os, httpx
r = httpx.get(
"https://api.climatememory.com/v1/forecast",
params={"lat": 48.85, "lon": 2.35, "days": 3},
headers={"X-API-Key": os.environ["API_KEY"]},
timeout=30,
)
r.raise_for_status()
data = r.json()
print(data["daily"]["temperature_2m_max"])
const res = await fetch(
"https://api.climatememory.com/v1/forecast?lat=48.85&lon=2.35&days=3",
{ headers: { "X-API-Key": process.env.API_KEY } },
);
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message}`);
}
const data = await res.json();
console.log(data.daily.temperature_2m_max);
req, _ := http.NewRequest("GET",
"https://api.climatememory.com/v1/forecast?lat=48.85&lon=2.35&days=3", nil)
req.Header.Set("X-API-Key", os.Getenv("API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil { return err }
defer res.Body.Close()
var out struct {
Daily struct {
TemperatureMax []float64 `json:"temperature_2m_max"`
} `json:"daily"`
}
json.NewDecoder(res.Body).Decode(&out)
3. Leer la respuesta
Toda serie vuelve orientada a columnas — arrays paralelos que
comparten un único índice time, y no una lista de objetos. Véase
convenciones de respuesta para saber por qué, y cómo
leerla.
A continuación: la misma llamada por nombre de ciudad suele
ser mejor — https://api.climatememory.com/v1/forecast/city/fr/paris lleva la altitud real y
el huso horario de la ciudad, cosa que una coordenada pelada no puede. Véase
predicción por ciudad.
Autenticación#
Envíe su clave en la cabecera X-API-Key en cada solicitud. No hay
flujo OAuth, ni token de portador que refrescar, ni firma que calcular.
X-API-Key: wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Las claves se almacenan cifradas mediante hash. Si pierde una, se renueva, no se recupera — no podemos volver a mostrársela, porque no la tenemos. La renovación se hace en la consola y emite una clave nueva de inmediato.
Scopes
Una clave lleva scopes, y el plan decide cuáles. Llamar a un endpoint fuera de
sus scopes devuelve 403 scope_denied — que es un problema de plan, no
de clave, y el mensaje así lo dice.
| Scope | Desbloquea |
|---|---|
meteo | Toda la API de Meteorología, complementos incluidos |
dju | Los grados-día y el histórico horario |
climate | El archivo climático diario y sus agregados |
normals | Las normales OMM y su comparación |
Los endpoints de geocodificado no exigen ninguno. Cualquier clave válida resuelve un nombre de lugar, en cualquier plan, porque todos los productos de aquí necesitan una coordenada antes de poder responder nada. Véase geocodificado.
No ponga nunca su clave en un navegador. Llame a la API desde su servidor y pase el resultado al cliente. Una clave en el JavaScript del navegador es una clave que cualquiera puede leer en la pestaña de red y gastar contra su cuota — y como es su clave, el uso es indistinguible del suyo.
Si necesita meteorología en una aplicación móvil, los endpoints móviles existen justo para eso: emiten un token por instalación en lugar de incrustar su clave.
Geocodificado#
Resolver un nombre de lugar a coordenadas, altitud y huso horario.
Parámetros
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
q | string | — | Nombre de lugar, en cualquier idioma. Acentos opcionales. Obligatorio. |
lang | ISO-639-1 | en | Solo visualización y ordenación — nunca qué es elegible. Un código desconocido recurre a los nombres locales en lugar de fallar. |
near | lat,lon | — | La posición de quien llama. El criterio de desempate más fuerte que existe. |
country | ISO-3166-1 alpha-2 | — | Restringir a un solo país. |
limit | int | 10 | De 1 a 50. |
El catálogo es la clase de entidad P de GeoNames al completo — cada lugar habitado del planeta, hasta aldeas de unas pocas docenas de personas, y no un extracto filtrado por población. Un pueblo de 528 habitantes está en él.
No cuesta créditos, en ningún plan, y no exige scope. Una clave vendida para grados-día también resuelve nombres, porque los grados-día no se pueden pedir sin coordenada. A cambio lleva un tope propio — cinco solicitudes de geocodificado por crédito de su plan — deliberadamente lo bastante generoso como para que un campo de búsqueda con sugerencias y antirrebote sea el uso previsto. Véase límites de ritmo y cuota.
La coincidencia nunca está restringida por el idioma
La consulta se prueba contra el nombre local, su transliteración ASCII y cada
alias localizado, diga lo que diga lang. Eso importa más de
lo que parece: el 98 % de los lugares no tiene ningún nombre localizado — el
francés cubre el 1,84 % del catálogo — de modo que una búsqueda filtrada por
idioma encontraría capitales y nada más. lang elige qué nombre
vuelve e influye en la ordenación; nunca decide qué es elegible.
GET /v1/geocode?q=ramillies&lang=fr
GET /v1/geocode?q=ramillies&lang=fr&near=50.63,3.06 # desde Lille
GET /v1/geocode?q=bruxelles&lang=fr # exónimo, vía el índice de alias
GET /v1/geocode?q=zuesch&lang=de # diéresis escrita en letras
Cómo se ordenan los resultados
Cada resultado lleva un score y, cuando se indicó
near, una distance_km. La ordenación combina cuatro
señales: lo bien que coincidió el nombre, lo destacado que es el lugar, lo cerca
que está de near, y si el nombre coincidente estaba en el idioma
solicitado.
Por qué existe near. Hay dos Ramillies — 5 749
habitantes en el Brabante Valón, 528 en Alta Francia, a 126 km de distancia.
Ninguna es la respuesta correcta en abstracto. Sin near se devuelve
la mayor; desde Lille, la francesa.
La relevancia no es solo población. El 90,7 % del catálogo no tiene población registrada — GeoNames no publica ninguna en absoluto para algunos países — de modo que el tipo de lugar (capital nacional, capital de una división administrativa, lugar corriente, barrio) sostiene la ordenación allí donde falta la población.
Las diéresis se escriben en letras, no se eliminan. Un
teclado alemán o danés sin diacríticos escribe Zuesch por
Züsch y Koeln por Köln. GeoNames no
recoge esa grafía — su forma ASCII es Zusch, con la diéresis
suprimida y no desarrollada — así que se genera aquí. Ambas grafías llegan al
lugar, y el resultado muestra el nombre real en los dos casos.
Búsqueda de ciudad#
Búsqueda por nombre antigua. Solo compara el nombre ASCII, ordena por población.
La ciudad catalogada más cercana a una coordenada.
/v1/cities/search es anterior a /v1/geocode y
mantiene su contrato para los clientes ya construidos sobre él: solo compara el
nombre ASCII y ordena por población.
Prefiera /v1/geocode para todo lo
que vea un usuario. La ruta antigua no sabe reconocer un exónimo —
Bruxelles no encontrará Brussel — y su ordenación es
indefinida para los nueve de cada diez lugares sin población registrada.
/v1/cities/nearest es el sentido inverso, y es lo que convierte
una posición GPS en un slug de ciudad que después puede pasar a los endpoints
por ciudad. Toma lat, lon y un max_km
opcional.
Ambos cuentan contra el mismo tope de geocodificado que
/v1/geocode, y ninguno cuesta créditos.
Convenciones de respuesta#
Seis reglas valen para todos los endpoints. Apréndalas una vez y el resto de esta documentación son solo nombres de campos.
1. Las series son columnas, no filas
Toda serie temporal es un conjunto de arrays paralelos que comparten un único
índice time, en lugar de un array de objetos:
"hourly": {
"time": ["2026-08-01T00:00:00+00:00", "2026-08-01T01:00:00+00:00"],
"temperature_2m": [18.4, 18.1],
"precipitation": [0.0, 0.2]
}
El índice i de cada array describe el mismo instante. Esto ocupa
de tres a cinco veces menos en la red que la forma en filas, se descodifica
directamente en un dataframe o en una biblioteca de gráficos sin transformación,
y es lo que los clientes con forma de Open-Meteo ya esperan. Para recorrerlo por
filas:
rows = zip(h["time"], h["temperature_2m"], h["precipitation"])
2. Las fechas son ISO 8601 con desplazamiento explícito
Siempre. 2026-08-01T00:00:00+00:00, nunca una cadena local
pelada ni un entero Unix. Allí donde usted pase una timezone, el
desplazamiento de la respuesta es el de ese huso — la cadena por sí sola es, pues,
inequívoca, y nunca tiene que saber qué supusimos nosotros.
3. Las unidades son SI, fijas y no negociables
°C, mm, m/s, hPa, W/m², metros. No hay ningún parámetro
units=imperial, y es a propósito: un conmutador de unidades es un
campo cuyo significado depende de otro campo, y así es como un cliente acaba
representando Fahrenheit sobre un eje Celsius tras un cambio de configuración
que nadie revisó. Convierta en su borde, allí donde está el lector.
Los endpoints que llevan unidades poco habituales incluyen en la respuesta un
bloque units que las nombra explícitamente, en lugar de esperar que
usted las recuerde.
4. null significa «desconocido», nunca «cero»
Una hora que falta es null en el array, y conserva su posición
para que los índices sigan alineados. Nunca se rellena en silencio con 0 — para
la precipitación son dos afirmaciones opuestas, y una de las dos es una mentira
sobre una sequía.
5. Cada respuesta dice de dónde viene
Un bloque source (meteorología) o un bloque quality
(archivos) viaja con los datos: qué modelo o qué pasada respondió, qué
antigüedad tiene, cómo de completo estaba el periodo. Nunca tiene que deducir la
frescura del reloj.
6. Caducado gana a ausente
Si nuestra pasada de modelo más reciente es más antigua de lo esperado,
respondemos igualmente — con "stale": true y
data_age_hours en el bloque source — en lugar de
devolver un 503. Una predicción de ocho horas de antigüedad es más útil que un
error. Compruebe el indicador si la frescura es determinante para usted;
ignórelo si no lo es.
No hay paginación en ninguna parte. Una solicitud devuelve su respuesta entera o falla con un error de rango que le indica el máximo. En su lugar los intervalos están acotados por endpoint — lo que significa que una lógica de reintento nunca tiene que tratar un conjunto de resultados leído a medias.
Límites de ritmo, créditos y cuota#
Se aplican tres límites independientes, y fallan de forma distinta a propósito. Cada respuesta correcta informa de dónde está usted:
| Cabecera | Significado |
|---|---|
X-RateLimit-Remaining | Solicitudes restantes en el minuto deslizante en curso |
X-Quota-Remaining | Créditos restantes este mes |
X-Quota-Resets-At | Marca de tiempo ISO del próximo reinicio mensual |
X-Geocode-Remaining | Solicitudes de geocodificado restantes este mes. Solo en los endpoints de catálogo, los únicos que acota. |
Créditos, no solicitudes
Una predicción de ciudad en caché es una lectura de 3 ms. Diez años de grados-día horarios sobre quinientos emplazamientos no lo es. Tarificar por solicitudes permitiría a un cliente permanecer dentro de su cuota y costar más de lo que paga, de forma enteramente legítima — así que lo que cuesta una llamada depende de cuánto archivo mueve.
| Endpoint | Créditos |
|---|---|
/v1/forecast, /v1/current y las variantes por ciudad | 1 |
/v1/probability, /v1/air-quality, /v1/marine, /v1/hydrology | 1 |
/v1/cells/resolve, /v1/climate/cells/resolve | 1 |
/v1/climate/normals | 3 |
/v1/climate/normals/compare | 6 — responde sobre dos periodos |
/v1/climate/daily, /v1/climate/monthly | 2, +1 por cada periodo completo de 365,25 días del intervalo |
/v1/climate/summary | 3, +1 por cada periodo completo de 365,25 días del intervalo — unos 89 sobre el archivo completo |
/v1/degree-days y sus variantes por ciudad y por celda | 2, +1 por cada periodo completo de 365,25 días del intervalo |
/v1/degree-days/monthly | 2 |
/v1/historical | (años + 1) × (variables ÷ 2), redondeado a la baja, mínimo 1 |
Cualquiera de los anteriores con format=csv | 4× el coste del JSON |
/v1/geocode, /v1/cities/search, /v1/cities/nearest | 0 — acotado por separado |
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing | 1, y no requiere clave |
El geocodificado no cuesta créditos. Todos los productos de aquí necesitan una coordenada antes de poder responder, así que resolver un nombre va incluido y no se vende. Un campo de búsqueda con sugerencias es el uso previsto: póngale antirrebote y déjelo funcionar.
Está acotado, eso sí, y por un tope propio en lugar de por sus créditos:
cinco solicitudes de geocodificado por crédito de su plan. En el
plan de 50 000 créditos son 250 000 búsquedas al mes, y un campo de búsqueda con
antirrebote gasta unas seis por lugar encontrado. Agotarlo devuelve
429 geocode_quota_exceeded y deja sus créditos intactos — que es
también por lo que son dos códigos distintos.
Qué hacer cuando alcanza cada uno
| Límite | Respuesta | Tratamiento |
|---|---|---|
| Ritmo (por minuto) | 429 rate_limited + Retry-After | Espere Retry-After segundos y reintente. Este es transitorio por construcción. |
| Créditos (por periodo) | 429 quota_exceeded + X-Quota-Resets-At | Reintentar no servirá de nada hasta el reinicio. Cambie de plan, o degrade su funcionalidad. |
| Tope de geocodificado | 429 geocode_quota_exceeded | Sus créditos están intactos y el resto de endpoints sigue funcionando. Refuerce el antirrebote. |
Su periodo de cuota va desde la fecha de su suscripción hasta el mismo día del
mes siguiente — el periodo que factura Stripe — y el contador vuelve a empezar
entero cada vez. X-Quota-Resets-At lleva esa fecha en cada
respuesta: léala en lugar de suponer el día uno del mes. Las cuentas sin
suscripción siguen el mes natural.
Cachee sin reparos — no nos molesta, y es cuota gratis. Una pasada de predicción cambia de 2 a 4 veces al día; un total de grados-día de un mes pasado no cambia nunca. Nada de aquí es específico de un usuario, así que una caché HTTP corriente delante de nosotros es segura. Los endpoints de archivo en particular merecen cachearse para siempre por debajo de los últimos cinco días.
Errores#
Todo error tiene la misma forma, en ambos hosts:
{
"error": {
"code": "range_too_long",
"message": "Requested span is 14.0 years; the maximum per request is 10.",
"max_years": 10
}
}
Construya su lógica de reintento sobre error.code, no
sobre el estado HTTP. Tres condiciones distintas devuelven
429 y requieren tres reacciones distintas: una quiere una espera
corta, otra un cambio de plan, y la tercera no debería detener su aplicación en
absoluto. El estado por sí solo no puede distinguirlas. Las claves adicionales —
max_years arriba — llevan el límite que usted cruzó, de modo que su
cliente pueda adaptarse en lugar de adivinar.
| Estado | Código | Qué hacer |
|---|---|---|
| 400 | invalid_latitude, invalid_longitude | Corrija las coordenadas. La latitud va de −90 a 90, la longitud de −180 a 180. |
| 400 | range_too_long | Divida en varias solicitudes. max_years indica el tope. |
| 400 | bad_request | La forma genérica, cuando una comprobación no tiene un código propio más preciso. Trátela como permanente — la solicitud no se volverá válida por reintentarla. |
| 400 | invalid_coordinates | El par está fuera de rango o no es un punto de la Tierra. |
| 400 | invalid_method, invalid_base | Véanse métodos de cálculo. |
| 400 | invalid_breakdown | No es daily, weekly, monthly ni yearly. |
| 400 | invalid_date | Una fecha que no es ISO YYYY-MM-DD. |
| 400 | invalid_range | end precede a start. |
| 400 | invalid_near | near no tiene la forma lat,lon. |
| 400 | unknown_field, unknown_variable | Pregunte a /v1/fields, /v1/climate/fields o /v1/historical/variables qué contiene ese producto — ninguno de los tres necesita clave. En /v1/forecast el mensaje nombra la coincidencia más próxima a lo que pidió. |
| 400 | unknown_period | No es un periodo de referencia OMM. Véanse normales. |
| 400 | period_not_covered | El archivo no abarca ese periodo de referencia en ese punto. |
| 401 | missing_api_key | Faltaba la cabecera X-API-Key. |
| 401 | invalid_api_key | La clave es desconocida o se ha renovado. |
| 401 | unauthorized | La forma genérica, cuando no aplica nada más preciso. |
| 402 | export_not_in_plan | La exportación CSV es exclusiva de los planes de pago. |
| 403 | scope_denied | Su plan no incluye esta API. Véanse scopes. |
| 403 | key_inactive | La clave existe pero ha sido revocada o desactivada. Renovar una clave hace justo eso con la antigua — revise la consola antes de dar por hecha una avería. |
| 404 | city_not_found | La respuesta incluye un array suggestions — muéstrelo. |
| 404 | cell_not_found | Una celda fijada que ya no existe. Véase fijar una celda. |
| 404 | not_at_sea | Una solicitud marina sobre tierra. El modelo de oleaje no tiene valor allí. |
| 404 | not_found | La forma genérica. Como arriba: permanente. |
| 404 | no_city_nearby | Nada catalogado a menos de max_km de ese punto. |
| 404 | outside_archive | Las fechas quedan fuera de lo que contiene el archivo. /v1/climate/coverage dice qué contiene, y no necesita clave. |
| 429 | rate_limited | Espere Retry-After segundos. |
| 429 | quota_exceeded | Espere al reinicio o cambie de plan. Reintentar antes no puede funcionar. |
| 429 | geocode_quota_exceeded | Solo el tope de geocodificado. Sus créditos están intactos; ponga antirrebote a su campo de búsqueda. |
| 503 | data_unavailable | Transitorio. Reintente con retroceso exponencial. |
| 503 | load_shed | Rechazo deliberado para proteger el servicio bajo carga. La criticidad de su plan decide a quién se descarta primero. Reintente con retroceso; se resuelve en segundos. |
| 503 | catalogue_unavailable | El catálogo de ciudades está brevemente fuera de alcance. Las coordenadas siguen funcionando — recurra a ellas en lugar de hacer fallar la solicitud. |
Esa es la lista completa, y se comprueba contra el código fuente en cada compilación: un código publicado aquí que ningún handler lanza hace fallar la batería de pruebas, y lo mismo un handler que lance uno que esta tabla no recoja. Si se topa con un código que no está arriba, es un defecto de esta página y no un valor que deba tratar de forma especial.
Una política de reintento que funciona
RETRY = {"rate_limited", "data_unavailable"}
def should_retry(status, code, attempt):
if code == "quota_exceeded":
return False # nada cambia hasta el reinicio
if code == "geocode_quota_exceeded":
return False # y no se detenga: los créditos siguen
if code in RETRY:
return attempt < 5
return status >= 500
Precisión — qué esperar#
Preferimos fijar bien las expectativas a que usted descubra los límites en producción.
Dónde la predicción es sólida
Temperatura, presión, viento sinóptico, humedad, insolación. El error típico de la temperatura a 2 m a 24 horas ronda 1 a 1,5 °C. El ECMWF es el mejor modelo determinista global del mundo, y es el que usted obtiene.
Dónde es más débil
Las tormentas convectivas — una celda de 28 km no puede resolver una tormenta, e incluso 3 km apenas la insinúan. La ubicación y el momento exactos de los chubascos. Los microclimas costeros y de montaña por debajo de la resolución del modelo. Las brisas marinas y las bolsas de aire frío de valle, que la corrección de relieve no modela.
Honestidad geográfica
En Francia, Alemania, Estados Unidos y Canadá servimos modelos nacionales de 1,3 a 3 km, y un pueblo pequeño obtiene realmente su propia celda. En el resto de Europa obtiene 6,5 km. En África, Oriente Medio y la mayor parte de Asia el mejor modelo público disponible es de 13 a 28 km, así que obtiene la meteorología de la zona en lugar de la de la calle. La corrección de relieve reduce esa brecha, pero no la cierra.
Grados-día
Un reanálisis en malla cubre todas partes, incluidos lugares sin estación meteorológica en 60 km a la redonda — esa es su ventaja frente a los proveedores basados en estaciones. Su debilidad son los centros urbanos, que el reanálisis subestima; los endpoints por ciudad aplican una corrección calibrada, los endpoints por coordenada no.
Dos campos son estimaciones, y preferimos decirlo
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.
precipitation_probability_proxy es una estimación, no una
probabilidad; la auténtica está en /v1/probability.
Ambos se explican por extenso en la referencia de
campos.
Planes#
| Plan | Precio | Créditos / mes | Ritmo | Claves | Scopes |
|---|---|---|---|---|---|
| Gratuito | 0 € | 10 000 | 20 / min | 1 | meteorología, más grados-día y clima durante 30 días |
| Starter | 19 € / mes | 50 000 | 60 / min | 3 | meteorología + grados-día + clima |
| Pro | 79 € / mes | 400 000 | 300 / min | 10 | meteorología + grados-día + clima + normales |
| Business | desde 299 € / mes | Acordado por contrato | Acordado por contrato | 50 | meteorología + grados-día + clima + normales |
El geocodificado queda fuera de esta tabla: no cuesta créditos en ningún plan y lleva su propio tope de cinco solicitudes por crédito. Véanse límites de ritmo y cuota.
La facturación anual regala dos meses. El catálogo vigente está en developers.climatememory.com/pricing — esa página lee el sistema de facturación directamente, así que si ambos llegaran a discrepar, manda ella.
No hay endpoint de exportación masiva en ningún plan. La exportación CSV existe para los archivos de grados-día y de clima, está acotada al mismo intervalo que la llamada JSON equivalente, y devuelve solo filas agregadas — nunca la serie horaria.
Atribución y licencias#
El texto exacto requerido, legible por máquina. No requiere clave.
La tabla de licencias que hay detrás de cada conjunto de datos. No requiere clave.
La atribución es una condición de uso, no una cortesía. Los datos subyacentes nos están licenciados bajo condiciones que la exigen, y esas condiciones se le transmiten a usted. Muestre un aviso allí donde aparezcan los datos, incluidos los productos derivados. Basta con una línea a pie de página:
Weather data: ECMWF, DWD, NOAA, Météo-France · Climate data: Copernicus/ERA5-Land · Places: GeoNames
Ninguno de los dos endpoints anteriores necesita clave, así que puede
renderizar el aviso desde la API en lugar de incrustar una cadena que quedará
obsoleta cuando cambie una fuente. La atribución de la pasada concreta que
respondió viaja además en cada respuesta de datos, en
source.attribution y en la cabecera
X-Data-Attribution.
Puede declarar que utiliza estos datos. No puede dar a entender que alguna de estas organizaciones ha producido, aprobado o respalda su producto.
Descargo de responsabilidad
Las predicciones se facilitan sin garantía. Ni la Comisión Europea, ni el ECMWF, ni el DWD, ni la NOAA, ni Météo-France son responsables del uso que se haga de esta información. No la utilice como base única de decisiones en las que estén en juego la vida, la seguridad o los bienes.
Hay una restricción que no nos corresponde levantar: la licencia de Copernicus reserva los avisos de crecida a las autoridades nacionales y regionales. Véase ríos.