# KNMI Data Platform

Het KNMI zet zijn ruwe en bewerkte data op één platform: 10-minutenwaarnemingen van alle weerstations, radarbeelden, HARMONIE-weerverwachtingen, klimaatreeksen en satellietdata. Op 16 oktober 2026 stonden er 449 datasets, de meeste onder CC BY 4.0. Je haalt bestanden (NetCDF, HDF5, GRIB) op met de Open Data API; daarvoor is een sleutel nodig, maar het KNMI publiceert zelf een anonieme sleutel om te proberen.

- Uitgever: Koninklijk Nederlands Meteorologisch Instituut
- Gebied: Nederland · Laagste detail: bestand per tijdstap (station of rastercel)
- Periode: per dataset (10-minutenwaarnemingen vanaf 2012) · Ververst: elke minuut
- Toegang: Gratis sleutel · Licentie: per dataset; 399 van de 449 CC BY 4.0, 15 gesloten
- Koppelsleutels: datasetnaam en versie, bestandsnaam (met tijdstip), stationsnummer
- Status: grijs · Open Data API: gedeelde quota van de anonieme sleutel op (429)
- URL: https://developer.dataplatform.knmi.nl/

## Wat kun je ermee?
- **Het weer van tien minuten geleden.** Elke 10 minuten komt er een NetCDF-bestand bij met de waarnemingen van alle automatische stations, ook op de BES-eilanden. Het bestand van 15 oktober 2026, 22:30 UTC, stond er om 22:33.
- **Zomerse dagen tellen.** Voor dagwaarden is de daggegevens-dienst van het KNMI eenvoudiger (geen sleutel). De grafiek op deze pagina komt daarvandaan: zomerse dagen in De Bilt sinds 1901.
- **Regenradar van de afgelopen bui.** De radardatasets geven per 5 minuten een neerslagbeeld van Nederland (HDF5). Tel hoeveel millimeter er boven jouw wijk viel.
- **Een eigen weerapp op de verwachting.** HARMONIE-AROME geeft de KNMI-verwachting als GRIB-bestanden. Met de Notification Service hoor je wanneer er een nieuwe run is, in plaats van steeds te vragen.

## Zo verwerk je het
1. **Vraag een sleutel of gebruik de anonieme.** Op de ontwikkelaarspagina staat een anonieme sleutel (geldig tot 1 augustus 2027), gedeeld door iedereen: 50 verzoeken per minuut, 3.000 per uur. Een eigen sleutel geeft 1.000 per uur voor jou alleen.
   `https://developer.dataplatform.knmi.nl/open-data-api`
2. **Bestanden van een dataset opvragen.** Stuur de sleutel mee in de kop Authorization. maxKeys, orderBy=created en sorting=desc geven de nieuwste bestanden; nextPageToken voor de volgende pagina.
   `curl -H "Authorization: <sleutel>" "https://api.dataplatform.knmi.nl/open-data/v1/datasets/10-minute-in-situ-meteorological-observations/versions/1.0/files?maxKeys=2&orderBy=created&sorting=desc"`
3. **Eén bestand downloaden.** .../files/<bestandsnaam>/url geeft een tijdelijke downloadlink; die haal je daarna zonder sleutel op.
   `curl -H "Authorization: <sleutel>" "https://api.dataplatform.knmi.nl/open-data/v1/datasets/10-minute-in-situ-meteorological-observations/versions/1.0/files/KMDS__OPER_P___10M_OBS_L2_202610152230.nc/url"`
4. **Kies je dataset in de catalogus.** De catalogus op dataplatform.knmi.nl noemt per dataset de licentie, de periode en welke API's er zijn (Open Data API, EDR, WMS, notificaties).
   `https://dataplatform.knmi.nl/dataset`

## Interessante koppelingen
- Hoe verliep de warmste dag van het jaar uur voor uur? → [knmi-daggegevens](https://www.opendataindex.nl/bron/knmi-daggegevens.md) via stationsnummer (06260 in de 10-minutendata, 260 in de daggegevens). Zoek de dag in de daggegevens en haal voor die dag de 10-minutenbestanden op.
- Smog bij windstilte? → [luchtmeetnet](https://www.opendataindex.nl/bron/luchtmeetnet.md) via tijd en plaats. Zet de windsnelheid uit de 10-minutenwaarnemingen naast de uurwaarden van stikstofdioxide of fijnstof van een station in de buurt.

## Vergelijkbare bronnen
- [knmi-daggegevens](https://www.opendataindex.nl/bron/knmi-daggegevens.md): Dagwaarden per station sinds 1901 met één eenvoudige aanroep en zonder sleutel. Voor de meeste vragen over het weer genoeg.
- [era5](https://www.opendataindex.nl/bron/era5.md): Heropname van het weer voor de hele wereld per uur sinds 1940, op een raster van ongeveer 30 km.
- [knmi-aardbevingen](https://www.opendataindex.nl/bron/knmi-aardbevingen.md): Draait op dezelfde server (api.dataplatform.knmi.nl), maar de aardbevingsdiensten werken zonder sleutel.

## Waar je op moet letten
- **Sleutel nodig, en de anonieme is gedeeld.** Met de anonieme sleutel kregen wij op 16 oktober 2026 afwisselend een 200 en een 429 ("Rate Limit Exceeded": de gedeelde quota waren op). Voor alles wat regelmatig draait: vraag een eigen sleutel aan.
- **EDR en WMS alleen met een eigen sleutel.** De EDR-API (CoverageJSON per punt of gebied) en de WMS geven met de anonieme sleutel 403: "Access to this API has been disallowed" (getest 16 oktober 2026).
- **Niet blijven vragen of er iets nieuws is.** KNMI noemt het herhaald pollen van de Open Data API op nieuwe bestanden misbruik. Gebruik daarvoor de Notification Service (MQTT).
- **De catalogus-API is voor robots afgesloten.** robots.txt van dataplatform.knmi.nl sluit /api/ (de CKAN-catalogus) uit, met Crawl-Delay 1. Daarom oogsten wij de catalogus niet; de bladerpagina's mogen wel.
- **Niet alles is open.** 15 datasets zijn gesloten, 17 vallen onder EUMETSAT-voorwaarden en 5 onder een niet-commerciële of no-derivatives-licentie. Kijk per dataset.

## API (REST (JSON, bestanden) + OGC EDR, WMS en MQTT)

- Basis: https://api.dataplatform.knmi.nl/open-data/v1
- Toegang: Sleutel in de kop Authorization (zonder 'Bearer'). Zonder sleutel: HTTP 401 {"error": "Authorization field missing"} (getest). Drie soorten: anoniem (staat op de ontwikkelaarspagina, gedeeld, geldig tot 1 augustus 2027), geregistreerd (gratis account in het Tyk-portaal) en bulk (per mail aan opendata@knmi.nl, één keer een hele dataset). Open Data Index gebruikt de anonieme sleutel alleen op de server. (getest)
- Formaten: json, netcdf, hdf5, grib, csv
- Omvang: 449 datasetversies in de sitemap van de catalogus (412 met een toegangspagina; 16 okt 2026) (getest)
- Filteren: Alleen op bestandsniveau: sorteer op naam of tijd en kies een bereik met begin en end. De inhoud van een bestand filter je met de EDR API.; 

### Endpoints
- `GET /datasets/{datasetName}/versions/{versionId}/files`: Bestanden in een dataset, gepagineerd (naam, grootte, created, lastModified). Naam en versie staan in de catalogus, tab Access.
- `GET /datasets/{datasetName}/versions/{versionId}/files/{filename}/url`: Tijdelijke downloadlink voor één bestand (temporaryDownloadUrl); die haal je zonder sleutel op.

### Parameters
- `maxKeys`: Aantal bestanden per pagina, standaard 10, maximaal 1.000. (uit de beschrijving)
- `orderBy`: Sorteerveld, standaard filename. (uit de beschrijving)
- `sorting`: Richting, standaard asc. orderBy=created&sorting=desc geeft het nieuwste bestand eerst. (uit de beschrijving)
- `begin / end`: Bereikfilter op het sorteerveld: een bestandsnaam bij orderBy=filename, een tijdstip bij lastModified of created. (uit de beschrijving)
- `nextPageToken`: Volgende pagina; staat in het antwoord zolang isTruncated true is. (uit de beschrijving)
- `startAfterFilename`: Verouderd; niet te combineren met orderBy, begin, end of sorting. (uit de beschrijving)

### Velden in het antwoord (volgens de OpenAPI) (7)
`files[].filename` tekst, `files[].size` integer, `files[].created` datetime, `files[].lastModified` datetime, `isTruncated` boolean, `resultCount / maxResults` integer, `temporaryDownloadUrl` url

### Limieten en valkuilen
- Anonieme sleutel: 50 verzoeken per minuut en 3.000 per uur, gedeeld door alle anonieme gebruikers. Geregistreerd: 200 per seconde en 1.000 per uur voor jou alleen. Bulk: 100 per seconde, één keer zoveel als de dataset bestanden heeft. (uit de beschrijving)
- De gedeelde anonieme quota is vaak op: wij kregen na twee aanroepen al HTTP 429. Voor iets serieus een eigen sleutel aanvragen. (ervaring)
- Pagina's van hoogstens 1.000 bestanden (maxKeys). (uit de beschrijving)
- Pollen om nieuwe bestanden te vinden noemt het KNMI misbruik. Gebruik de Notification Service (MQTT op mqtt.dataplatform.knmi.nl:443, topic dataplatform/file/v1/<dataset>/<versie>/created); die vraagt een geregistreerde sleutel als wachtwoord. (uit de beschrijving)
- Een kop X-KNMI-Deprecation in het antwoord meldt dat een dataset of API-versie gaat verdwijnen. (uit de beschrijving)
- De catalogus zelf is CKAN op dataplatform.knmi.nl, maar robots.txt verbiedt /api/ daar. Kies datasets via de website (tab Access geeft de juiste naam en versie) of de sitemap. (getest)
- De EDR API gaf met de anonieme Open Data-sleutel HTTP 403: vraag er een eigen sleutel voor aan in de API-catalogus. (ervaring)
- Bestanden zijn meestal NetCDF of HDF5 (radar, modellen); lees ze met xarray of netCDF4. Voor dagwaarden per station is KNMI daggegevens veel eenvoudiger. (ervaring)

### Voorbeeld
```
https://api.dataplatform.knmi.nl/open-data/v1/datasets/10-minute-in-situ-meteorological-observations/versions/1.0/files?maxKeys=3&orderBy=created&sorting=desc
```

## Zo haal je het op

### curl
```bash
curl -H "Authorization: <sleutel>" "https://api.dataplatform.knmi.nl/open-data/v1/datasets/10-minute-in-situ-meteorological-observations/versions/1.0/files?maxKeys=1&orderBy=created&sorting=desc"
```

### python
```python
import requests

SLEUTEL = "<anonieme of eigen sleutel van developer.dataplatform.knmi.nl>"
basis = "https://api.dataplatform.knmi.nl/open-data/v1/datasets/10-minute-in-situ-meteorological-observations/versions/1.0/files"
kop = {"Authorization": SLEUTEL}
nieuwste = requests.get(basis, headers=kop, params={"maxKeys": 1, "orderBy": "created", "sorting": "desc"}).json()["files"][0]
link = requests.get(f"{basis}/{nieuwste['filename']}/url", headers=kop).json()["temporaryDownloadUrl"]
open(nieuwste["filename"], "wb").write(requests.get(link).content)
```

## Wat je ermee kunt bouwen
- [Weer-app voor je eigen plek: warmer, natter of zonniger dan normaal?](https://www.opendataindex.nl/bouwen/lokale-weer-app.md): Een kleine app die het dichtstbijzijnde KNMI-station kiest en zegt hoe de laatste dag zich verhoudt tot dezelfde tijd van het jaar in 1991-2020: in graden, millimeters en zonuren, en als percentiel.


## Voorbeelden met echte cijfers (1)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Zomerse dagen (25 °C of warmer) in De Bilt (KNMI-metingen): gemiddeld 29 dagen per jaar in 1996–2025, 87% meer dan in 1901–1930** (2025). Tabel daggegevens. [Voorbeeld](https://www.opendataindex.nl/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`
