
Waterinfo and Water Web Services
Rijkswaterstaat's measurements in the major rivers, along the coast and in the North Sea: water level, discharge, water temperature, waves and more. A new value every ten minutes, and for some stations a series going back to 1900. Waterinfo is the website, the Water Web Services are the API behind it.
Rhine discharge at Lobith (monthly mean): 683 cubic metres per second in September 2026, 61% less than in September 2025
Rhine discharge at Lobith (monthly mean), September 2025 – September 2026, in cubic metres per second. The highest point was February 2026 (3,269). Figures marked * are provisional.
What you can build with it1
What can you do with it?4 ideas
How much higher than the tide?
Besides the measurement, Rijkswaterstaat provides the astronomical water level: what the tide alone would give. The difference is the surge caused by wind and air pressure. In a storm you see the surge build up over hours.
The Rhine at Lobith
Follow the discharge in cubic metres per second where the Rhine enters the Netherlands. Put a dry summer next to a wet winter and you see how far apart they are.
Sea level since 1900
Calculate annual mean water levels at Hoek van Holland from 1900. Mind the switch in method from manual readings to automatic ten-minute values.
Wind and water level
Join the highest water level per day to the wind KNMI measured at Hoek van Holland. Which wind direction and strength give the highest surge?
How to process it4 steps
Fetch the catalogue
One POST with JSON returns all monitoring locations (2,499 on 15 October 2026) and the combinations of quantity, unit and compartment. That is how you find a location code, for example hoekvanholland or lobith.bovenrijn.tolkamer. The response is about 1.75 MB.
curl -X POST -H 'Content-Type: application/json' -d '{"CatalogusFilter":{"Grootheden":true,"Eenheden":true,"Compartimenten":true}}' https://ddapi20-waterwebservices.rijkswaterstaat.nl/METADATASERVICES/OphalenCatalogusRequest the latest value
OphalenLaatsteWaarnemingen returns the last value per series. Old series come along too (the last manual reading from 1900, 1953 …). Keep only ProcesType meting and take the newest timestamp.
curl -X POST -H 'Content-Type: application/json' -d '{"LocatieLijst":[{"Code":"hoekvanholland"}],"AquoPlusWaarnemingMetadataLijst":[{"AquoMetadata":{"Compartiment":{"Code":"OW"},"Grootheid":{"Code":"WATHTE"}}}]}' https://ddapi20-waterwebservices.rijkswaterstaat.nl/ONLINEWAARNEMINGENSERVICES/OphalenLaatsteWaarnemingenFetch a period, with ProcesType
OphalenWaarnemingen returns all values between start and end. Set ProcesType to meting, otherwise you also get the forecast and the astronomical tide.
curl -X POST -H 'Content-Type: application/json' -d '{"Locatie":{"Code":"lobith.bovenrijn.tolkamer"},"AquoPlusWaarnemingMetadata":{"AquoMetadata":{"Compartiment":{"Code":"OW"},"Grootheid":{"Code":"Q"},"ProcesType":"meting"}},"Periode":{"Begindatumtijd":"2026-10-14T00:00:00.000+01:00","Einddatumtijd":"2026-10-14T01:00:00.000+01:00"}}' https://ddapi20-waterwebservices.rijkswaterstaat.nl/ONLINEWAARNEMINGENSERVICES/OphalenWaarnemingenCount first, then fetch
OphalenAantalWaarnemingen counts how many values there are per year or month. One year of ten-minute values is 52,561 values per series. Fetch long series one year at a time.
curl -X POST -H 'Content-Type: application/json' -d '{"LocatieLijst":[{"Code":"hoekvanholland"}],"AquoMetadataLijst":[{"Compartiment":{"Code":"OW"},"Grootheid":{"Code":"WATHTE"}}],"Groeperingsperiode":"Jaar","Periode":{"Begindatumtijd":"2020-01-01T00:00:00.000+01:00","Einddatumtijd":"2026-01-01T00:00:00.000+01:00"}}' https://ddapi20-waterwebservices.rijkswaterstaat.nl/ONLINEWAARNEMINGENSERVICES/OphalenAantalWaarnemingen
Interesting combinations


Which wind gives the highest water level?
Take the highest measured water level per day and join it to FHX (highest hourly mean wind) and DDVEC (wind direction) from KNMI station 330.


Which floodplains flood at this water level?
Both are in centimetres or metres relative to NAP. Lay the measured river level over the elevation model and see which land lies lower. This is a first estimate: dikes and flow are not taken into account.
Similar sources
- PUPEGELONLINE (Wasserstraßen- und Schifffahrtsverwaltung) not in the index yet
Water levels on German rivers, with a simple REST API. Emmerich lies just upstream of Lobith: that is where you see the Rhine coming.
- PSPSMSL (Permanent Service for Mean Sea Level) not in the index yet
Monthly and annual mean sea levels worldwide, already cleaned. Less detail, easier for trends.
KNMI daily weather dataWeather instead of water. Needed to explain high water levels.
What to watch out for
- Times without summer time
The API uses fixed Dutch winter time (+01:00), also in summer. You must give start and end times that way too, or you get an error.
- Unchecked, checked, final
Every value has a Statuswaarde. Recent measurements are unchecked. On 15 October 2026 the 2025 values for Hoek van Holland were checked.
- Nothing before 1900
A start date before 1900 gives an error, even if you only want to know whether data exists.
- Large responses
One year of water levels at Hoek van Holland is about 32 MB of JSON, because measurement, forecast and astronomical tide are all included and every value carries the full metadata.
- Old example code no longer works
The old address waterwebservices.rijkswaterstaat.nl redirects to a page about the switch. Use ddapi20-waterwebservices.rijkswaterstaat.nl. Many scripts and packages online still use the old address.
APIREST (POST met JSON), DDAPI 2.0 · read 16 Oct 2026
No key or account (tested). tested
monitoring locations in the catalogue, with 202 quantity/unit/compartment combinations (137 quantities) and 21,085 location × measurement links (16 Oct 2026) tested
json
Base URL
https://ddapi20-waterwebservices.rijkswaterstaat.nl
Endpoints 5
- POST
/METADATASERVICES/OphalenCatalogusWhole catalogue (~1.75 MB): LocatieLijst, AquoMetadataLijst, AquoMetadataLocatieLijst (which measurement where), status values, reference levels, commissioning bodies. - POST
/ONLINEWAARNEMINGENSERVICES/OphalenLaatsteWaarnemingenLatest value per series for one or more locations and quantities (LocatieLijst + AquoPlusWaarnemingMetadataLijst). - POST
/ONLINEWAARNEMINGENSERVICES/OphalenWaarnemingenAll values in a period for one location and quantity (Locatie + AquoPlusWaarnemingMetadata + Periode). - POST
/ONLINEWAARNEMINGENSERVICES/OphalenAantalWaarnemingenNumber of values per year or month (Groeperingsperiode), separately per ProcesType and instrument. - POST
/ONLINEWAARNEMINGENSERVICES/CheckWaarnemingenAanwezigAre there values in this period? Answer {"WaarnemingenAanwezig": "true"} (a string, not a boolean).
Filtering tested
No query language: the JSON body names the location(s), the Aquo metadata (compartment, quantity, process type …) and the period.
Parameters 7
Locatie.Code / LocatieLijst[].Code | Location code from the catalogue, lower case: hoekvanholland, lobith.bovenrijn.tolkamer. Unknown code: 400 with 'Locatie … niet gevonden'. | tested |
AquoMetadata.Compartiment.Code | OW = surface water (also LT air, BS soil …). | tested |
AquoMetadata.Grootheid.Code | WATHTE water level, Q discharge, T temperature, Hm0 wave height … (137 codes). | tested |
AquoMetadata.ProcesType | Without it you get measurement, forecast and astronomical tide mixed together. | tested |
Periode.Begindatumtijd / Einddatumtijd | ISO 8601 with time and zone (2026-10-15T00:00:00.000+01:00; Z and +02:00 are converted). Date only: 400. End is inclusive. | tested |
Groeperingsperiode | Only for OphalenAantalWaarnemingen. | experience |
CatalogusFilter | Which lists the catalogue returns, each true/false: Grootheden, Eenheden, Compartimenten, Hoedanigheden, Parameters, ProcesTypes, Typeringen, Organen, BioTaxon, Groeperingen, WaardeBewerkingsMethoden. | from the description |
Fields in the OphalenWaarnemingen response (selection) 7
| Name | Type | Meaning |
|---|---|---|
Locatie.Code / Naam / Lat / Lon | tekst / getal · ETRS89 (graden) | Meetlocatie |
AquoMetadata.Grootheid / Eenheid / Hoedanigheid | code + omschrijving | Wat er gemeten is, in welke eenheid (cm, m3/s …) en ten opzichte van wat (NAP) |
MetingenLijst[].Tijdstip | datetime · +01:00 (wintertijd, het hele jaar) | Tijdstip van de waarde |
MetingenLijst[].Meetwaarde.Waarde_Numeriek | getal | De waarde (Waarde_Alfanumeriek als tekst) |
WaarnemingMetadata.Statuswaarde | tekst | Ongecontroleerd, Gecontroleerd of Definitief |
WaarnemingMetadata.Kwaliteitswaardecode | tekst | 00 = normaal; andere codes markeren twijfelachtige waarden |
AquoMetadata.WaardeBepalingsMethode | code + omschrijving | Hoe de waarde tot stand kwam (bv. gemiddelde over 10 minuten) |
Limits and pitfalls
- No limit seen, but every value comes with full metadata: one year of Hoek van Holland water levels (3 series × ~52,600) is ~32 MB. Request per year or month and count first with OphalenAantalWaarnemingen. experience
- Dates before 1900 give a parse error. experience
- Response times are always in +01:00, also in summer. Convert to Europe/Amsterdam yourself. tested
- OphalenLaatsteWaarnemingen also returns closed series (last manual reading from 1900, 1953 …): take the newest timestamp. experience
- Sometimes two series for the same quantity (BemonsteringsSoort SB continuous and NVT with Bemonsteringshoogte -999999999); at Lobith NVT gave a tenth of SB. Use SB. experience
- Errors come as JSON with a Dutch message ('Het parsen van Begindatumtijd is mislukt …', 'Locatie … niet gevonden'). No OpenAPI; GET on the paths returns 404 problem+json. tested
- The old host waterwebservices.rijkswaterstaat.nl redirects to a migration page; old scripts must move to DDAPI 2.0. experience
Try it HTTP 200 · 515 ms · 16 Oct
curl -X POST "https://ddapi20-waterwebservices.rijkswaterstaat.nl/ONLINEWAARNEMINGENSERVICES/OphalenWaarnemingen" \
-d '{"Locatie":{"Code":"hoekvanholland"},"AquoPlusWaarnemingMetadata":{"AquoMetadata":{"Compartiment":{"Code":"OW"},"Grootheid":{"Code":"WATHTE"},"ProcesType":"meting"}},"Periode":{"Begindatumtijd":"2026-10-15T00:00:00.000+01:00","Einddatumtijd":"2026-10-15T00:30:00.000+01:00"}}'{
"Succesvol": true,
"WaarnemingenLijst": [
{
"AquoMetadata": {
"BemonsteringsApparaat": {
"Code": "8000",
"Omschrijving": "NVT"
},
"BemonsteringsMethode": {
"Code": "NVT",
"Omschrijving": "NVT"
},
"BemonsteringsSoort": {
"Code": "SB",
"Omschrijving": "Steekbemonstering"
},
"BioTaxon": {
"Code": "NVT",
"Omschrijving": "NVT"
},
"BioTaxonType": {
"Code": "",
"Omschrijving": ""
},
"Compartiment": {
"Code": "OW",
"Omschrijving": "Oppervlaktewater"
},
"Eenheid": {
"Code": "cm",
"Omschrijving": "centimeter"
},
"Groepering": {
"Code": "",
"Omschrijving": ""
},
"Grootheid": {
"Code": "WATHTE",
"Omschrijving": "Waterhoogte"Shortened response, saved at harvest time. Click the URL for the real, current response.
Read from The catalogue itself (POST): locations, quantities, units, compartments and which combination is measured where · ddlpy (Deltares, Python): the DDAPI 2.0 endpoints with example requests. RWS's own documentation on rijkswaterstaatdata.nl was not read: robots.txt forbids everything there. Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
How to fetch it
curl -X POST -H 'Content-Type: application/json' -d '{"LocatieLijst":[{"Code":"hoekvanholland"}],"AquoPlusWaarnemingMetadataLijst":[{"AquoMetadata":{"Compartiment":{"Code":"OW"},"Grootheid":{"Code":"WATHTE"}}}]}' https://ddapi20-waterwebservices.rijkswaterstaat.nl/ONLINEWAARNEMINGENSERVICES/OphalenLaatsteWaarnemingenMore from Rijkswaterstaat in our index
6,621 datasets in Nationaal Georegister, data.overheid.nl, ArcGIS Online Rijkswaterstaat, 4TU.ResearchData (via DataCite). These changed most recently.
- FIS_VNDS - Ferrylandingpoint - punten2026-10-30
- FIS_VNDS - Cardropoff - punten2026-10-30
- FIS_VNDS - Vtssector - vlakken2026-10-30
- FIS_VNDS - Waterlevelnap - punten2026-10-30
- getijdegebied2026-10-30
- FIS_VNDS - Overheadcable - punten2026-10-30
More in this topic
See how this page is built
bron: rws-waterinfo blokken: [] secties: - ideeen - verwerken - koppelingen - vergelijkbaar - beperkingen - code cache: tag: bron:rws-waterinfo ververs: na statuscheck, als de bron nieuwer is statuscheck: methode: nieuwste gemeten waterhoogte in Hoek van Holland (OphalenLaatsteWaarnemingen) verwacht: elk uur
Source: content/bronnen/rws-waterinfo.yaml · Markdown


