# Open-Meteo

Open-Meteo turns weather models and reanalyses into one simple JSON API: hourly forecasts (for the Netherlands also the KNMI HARMONIE-AROME model at 2 km), and an archive from 1940 based on ERA5. You ask for a latitude and longitude, not a weather station. The data are CC BY 4.0, but the free API is for non-commercial use only and fewer than 10,000 calls a day. robots.txt on the API hosts disallows all bots, so the Open Data Index does not call Open-Meteo itself.

- Publisher: Open-Meteo
- Area: World · Finest detail: grid cell (2 km for the KNMI model, 9 to 25 km for the archive)
- Period: archief sinds 1940; verwachting tot 16 dagen vooruit · Refreshed: hourly
- Access: Open · Licence: Data CC BY 4.0; gratis API alleen niet-commercieel (commercieel = betaald abonnement)
- Join keys: coördinaten (breedte, lengte), tijd (uur, dag)
- Status: grijs
- URL: https://open-meteo.com/

## What can you do with it?
- **The weather where there is no station.** Ask for the daily maxima for your own village instead of the nearest KNMI station. Do say it is a model value.
- **Was it really the hottest day?.** The archive gives the daily maximum temperature since 1940. Check record claims, but put them next to the official KNMI measurements.
- **Forecast versus reality.** Save the KNMI forecast for tomorrow every day and compare it later with the De Bilt measurement. How often was the forecast off?
- **Sun and wind for energy stories.** Hourly solar radiation and wind show why power prices drop on sunny or windy days.

## How to process it
1. **Read the terms first.** Free for non-commercial use only: fewer than 10,000 calls a day, 5,000 an hour and 600 a minute. Misuse leads to a block without warning.
   `https://open-meteo.com/en/terms`
2. **Forecast with the KNMI model.** Choose models=knmi_seamless (on the site 'KNMI Seamless (with ECMWF)': HARMONIE-AROME Netherlands at 2 km and Europe, supplemented with ECMWF).
   `https://api.open-meteo.com/v1/forecast?latitude=52.09&longitude=5.12&daily=temperature_2m_max&timezone=Europe/Amsterdam&forecast_days=2&models=knmi_seamless`
3. **Look back in the archive.** The archive uses ERA5 (0.25°, from 1940), ERA5-Land (0.1°, from 1950) and ECMWF IFS (9 km, from 2017).
   `https://archive-api.open-meteo.com/v1/archive?latitude=52.09&longitude=5.12&start_date=2025-07-01&end_date=2025-07-02&daily=temperature_2m_max`
4. **Run it yourself.** The software is open source (AGPL-3.0). If you need many calls or work commercially, you can run it yourself or take a subscription.
   `https://github.com/open-meteo/open-meteo`

## Interesting combinations
- How well does the model match the measurement? → [knmi-daggegevens](https://www.opendataindex.nl/en/bron/knmi-daggegevens.md) via datum en coördinaat van het station. Request the archive for the coordinate of De Bilt and compare the daily maxima with TX from station 260. The difference is what you know when using the model where there is no station.

## Similar sources
- [knmi-daggegevens](https://www.opendataindex.nl/en/bron/knmi-daggegevens.md): The official measurements of KNMI stations, daily since 1901 (De Bilt). Real observations, but only where a station stands.
- [era5](https://www.opendataindex.nl/en/bron/era5.md): The reanalysis the Open-Meteo archive largely rests on, directly from Copernicus. Needs an account, but can also be used commercially.
- [knmi-dataplatform](https://www.opendataindex.nl/en/bron/knmi-dataplatform.md): The KNMI Data Platform has the model output and observations themselves, as files. Needs a (free) key.

## What to watch out for
- **robots.txt disallows bots.** api.open-meteo.com and archive-api.open-meteo.com have 'Disallow: /' for all user agents, while the API is meant for programs. We do not call it ourselves; the chart here comes from KNMI.
- **Non-commercial.** The free API may not be used for commercial applications. What counts as non-commercial follows the Creative Commons definition. Commercial use goes through a paid subscription with its own API address.
- **Model, not measurement.** All values are model output or reanalysis. Local extremes (an urban heat spike, a cloudburst) often disappear in a grid cell several kilometres wide.
- **Attribution required.** CC BY 4.0 requires attribution. Credit Open-Meteo as the source and preferably also the underlying model (for example KNMI or ECMWF).

## API (REST (GET, JSON))

- Base: https://api.open-meteo.com/v1
- Access: No key for non-commercial use. Commercial: paid subscription, apikey parameter and the host prefixed with customer- (customer-api.open-meteo.com, customer-archive-api.open-meteo.com). (from the description)
- Formats: json
- Filtering: No query language: choose point, variables, period and model with query parameters.; 

### Endpoints
- `GET /forecast`: Forecast up to 16 days per coordinate (api.open-meteo.com; default 7), hourly, daily, 15-minutely or 'current'; with models= also KNMI HARMONIE-AROME (knmi_seamless, knmi_harmonie_arome_netherlands).
- `GET https://archive-api.open-meteo.com/v1/archive`: Historical weather per coordinate from reanalyses: ERA5 from 1940 (0.25°), ERA5-Land from 1950 (0.1°), CERRA 1985–June 2021 (5 km), ECMWF IFS from 2017 (9 km).
- `GET https://air-quality-api.open-meteo.com/v1/air-quality`: Hourly air quality from CAMS (domains: auto, cams_europe, cams_global).
- `GET marine, ensemble, climate, flood, seasonal, elevation`: Other APIs, each with its own host and OpenAPI file (waves, ensembles, climate scenarios, river discharge, seasonal forecast, elevation).

### Parameters
- `latitude / longitude`: WGS84; several points comma-separated in one call. (from the description)
- `hourly / daily / current / minutely_15`: Variables, e.g. hourly=temperature_2m,precipitation or daily=temperature_2m_max. (from the description)
- `start_date / end_date`: YYYY-MM-DD; required for /archive. (from the description)
- `past_days / forecast_days / past_hours / forecast_hours`: Window around now: forecast_days 0–16 (default 7), past_days 0–92. (from the description)
- `timezone`: IANA zone (Europe/Amsterdam) or auto. Set it for daily values that match a Dutch day. (from the description)
- `models`: Pick a model (knmi_seamless, ecmwf_ifs025, era5, era5_land …); without, Open-Meteo chooses ('best match'). (from the description)
- `temperature_unit / wind_speed_unit / precipitation_unit / timeformat`: Units (celsius, kmh, mm) and iso8601 or unixtime. (from the description)
- `cell_selection`: Which grid cell near the coast. (from the description)
- `tilt / azimuth`: Tilt and orientation for global_tilted_irradiance (solar panels). (from the description)

### Fields in the response (per the documentation) (7)
`latitude / longitude` getal, `elevation` getal, `utc_offset_seconds / timezone` geheel getal / tekst, `hourly.time` lijst van tijden, `hourly.<variabele>` lijst van getallen, `hourly_units` object, `generationtime_ms` getal

### Limits and pitfalls
- Free: fewer than 600 calls per minute, 5,000 per hour, 10,000 per day and 300,000 per month; non-commercial only. Abuse: app or IP blocked without notice. (from the description)
- robots.txt of api.open-meteo.com and archive-api.open-meteo.com is 'Disallow: /'. Open Data Index therefore does not call these APIs automatically; everything here comes from the documentation and the OpenAPI files on GitHub. (tested)
- An error returns HTTP 400 with {"error": true, "reason": "…"}. (from the description)
- ERA5 and ERA5-Land lag 5 days. CERRA stops in June 2021. (from the description)
- The KNMI models (HARMONIE-AROME) only reach 2.5 days ahead; knmi_seamless then appends ECMWF IFS (9 km) up to 15 days. (from the description)
- The software is open source (AGPL); heavy or commercial users can run Open-Meteo themselves. (from the description)


## Examples with real figures (1)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Summer days (25 °C or warmer) in De Bilt (KNMI measurements): an average of 29 days a year in 1996–2025, 87% more than in 1901–1930** (2025). Table daggegevens. [Example](https://www.opendataindex.nl/en/voorbeeld/knmi-zomerse-dagen-de-bilt)
  - `curl -d "stns=260&vars=TX&start=19010101&end=20251231&fmt=json" https://www.daggegevens.knmi.nl/klimatologie/daggegevens`
