# Water authority data (IMWA and DAMO)

Six map services from Het Waterschapshuis with the assets of all 21 Dutch water authorities in one national model (IMWA): structures such as pumping stations, weirs, locks and culverts, flood defences and how they are built, surface water, water level areas, protection zones and the wastewater chain (sewage pumping stations, treatment plants, pipes). On 16 October 2026 it held 8,566 pumping stations, 53,137 weirs, 626,869 culverts, 37,419 water level areas and 317 wastewater treatment plants. Every object names its water authority. Via PDOK as OGC API, and for five of the six also as WFS and WMS.

- Publisher: Het Waterschapshuis, Publieke Dienstverlening Op de Kaart
- Area: Netherlands · Finest detail: object (pumping station, weir, water level area …)
- Period: actuele stand · Refreshed: weekly
- Access: Open · Licence: Gemengd: CC0 1.0 (keringen, oppervlaktewateren), CC BY-SA 4.0 (kunstwerken, waterbeheergebieden, zoneringen, waterketen DAMO)
- Join keys: nen3610id, waterbeheerder, code, coördinaten
- Status: ok (2026-10-16) · 18 collecties · gemaal
- URL: https://www.pdok.nl/introductie/-/article/waterschappen-kunstwerken-imwa

## What can you do with it?
- **Every pumping station in the Netherlands on one map.** 8,566 pumping stations, each with name, code and water authority. Hollands Noorderkwartier registers 2,293, De Dommel 60: the low-lying west pumps, the higher south and east hardly do.
- **Where is sewage treated?.** The wastewater chain API has 317 treatment plants, 2,815 sewage pumping stations and 101 emergency outlets. Find the plant near you and follow the pressure mains to it.
- **Which water level applies where?.** Water level areas (37,419) and water level decision areas (3,937) show how the land is divided into compartments with their own level. Overlay them on the AHN to see how far the water is below ground level.
- **Mapping fish migration.** 1,526 fish passes against 53,137 weirs and 8,566 pumping stations. Work out per watercourse whether a fish can get past, or where the bottlenecks are.

## How to process it
1. **Pick the right API.** There are six OGC APIs under api.pdok.nl/hwh/: structures (v2, 18 collections), flood defences (27), surface waters (5), water management areas (7), zoning (8) and wastewater chain DAMO (18). The collection list and dates are under /collections.
   `https://api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v2/collections?f=json`
2. **Pumping stations of one water authority.** Filter on waterbeheerder (exactly the name as in the data), at most 1,000 per page; the next link in the response gives the following page. GeoJSON in degrees (CRS84).
   `https://api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v2/collections/gemaal/items?f=json&limit=1000&waterbeheerder=Wetterskip%20Frysl%C3%A2n`
3. **Counting with the WFS.** The OGC API gives no total. The WFS of the same dataset does: resultType=hits returns numberMatched, also with a filter.
   `https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=stuw`
4. **Which fields are there?.** /schema lists all fields with their type; /queryables the fields you can filter on (for gemaal only naam, guid, nen3610id and waterbeheerder).
   `https://api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v2/collections/gemaal/queryables?f=json`

## Interesting combinations
- How high is the land in each water level area? → [ahn](https://www.opendataindex.nl/en/bron/ahn.md) via coördinaten. Compute the average ground level per water level area from the AHN. Large differences within one area point to wet or dry spots.
- Do pumping stations work harder at high water? → [rws-waterinfo](https://www.opendataindex.nl/en/bron/rws-waterinfo.md) via coördinaten (gemaal bij meetpunt). Find pumping stations near a Waterinfo station and compare the outside water level with the pump capacity (field maximalecapaciteit, often empty).

## Similar sources
- [rws-waterinfo](https://www.opendataindex.nl/en/bron/rws-waterinfo.md): Water level and discharge measurements in national waters; the water authority data are the assets themselves, without measurements.
- [Basisregistratie Topografie (TOP10NL, waterdelen)](https://www.pdok.nl/introductie/-/article/basisregistratie-topografie-brt-topnl): National topographic map of all water, but without pumping stations, weirs or water levels.
- [klimaateffectatlas](https://www.opendataindex.nl/en/bron/klimaateffectatlas.md): Maps of flooding and flood risk; the water authority data show which structures hold back or drain the water.

## What to watch out for
- **Licences differ per API.** Flood defences and surface waters are CC0. Structures, water management areas, zoning and wastewater chain DAMO are CC BY-SA 4.0: attribute and share alike. The INSPIRE version Waterschappen Hydrografie (api.pdok.nl/hwh/waterschappen-hydrografie) is CC BY-NC-ND 4.0 and therefore not open.
- **Many fields empty.** The model has dozens of fields per object, but water authorities fill them differently. For the first pumping station in the API, name, capacity and function are empty; water level areas often lack the levels themselves.
- **No totals in the OGC API.** The OGC API returns no numberMatched. Count with the WFS (resultType=hits), which exists for structures (v2_0), surface waters, water management areas, zoning (v2_0) and wastewater chain DAMO (v1_0), not for flood defences.
- **Registration differs per authority.** A comparison between water authorities also reflects how finely they register. Hollands Noorderkwartier includes many small polder pumping stations.
- **Few filter fields.** Each collection can be filtered on only a few fields (naam, guid, nen3610id, waterbeheerder, sometimes code). For other selections, fetch everything or use the WFS with a FES filter.

## API (OGC WFS 2.0.0)

- Base: https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0
- Access: No key. Fees: none; access constraints: https://creativecommons.org/publicdomain/zero/1.0/deed.nl. (from the description)
- Formats: application/gml+xml; version=3.2, text/xml; subtype=gml/3.2.1, text/xml; subtype=gml/3.1.1, application/json; subtype=geojson, application/json
- Size: 8520 features in waterschappen-kunstwerken-imwa:gemaal (tested)
- Filtering: OGC Filter Encoding (FES 2.0); PropertyIsEqualTo, PropertyIsNotEqualTo, PropertyIsLessThan, PropertyIsGreaterThan, PropertyIsLessThanOrEqualTo, PropertyIsGreaterThanOrEqualTo, PropertyIsLike, PropertyIsBetween, PropertyIsNull, Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, Contains, DWithin, Beyond, BBOX, During

### Endpoints
- `GET ?request=GetCapabilities`: service description
- `GET ?request=DescribeFeatureType`: fields of a layer (XSD)
- `GET ?request=GetFeature`: the features themselves, with geometry
- `GET ?request=ListStoredQueries`: stored queries
- `GET ?request=DescribeStoredQueries`: stored query details

### Parameters
- `typeNames`: which layer: waterschappen-kunstwerken-imwa:put, waterschappen-kunstwerken-imwa:sluis, waterschappen-kunstwerken-imwa:vuilvang, waterschappen-kunstwerken-imwa:coupure, waterschappen-kunstwerken-imwa:vispassage, waterschappen-kunstwerken-imwa:hevel, waterschappen-kunstwerken-imwa:bodemval, waterschappen-kunstwerken-imwa:duiker, waterschappen-kunstwerken-imwa:brug, waterschappen-kunstwerken-imwa:stuw, waterschappen-kunstwerken-imwa:zandvang, waterschappen-kunstwerken-imwa:aquaduct, waterschappen-kunstwerken-imwa:voorde, waterschappen-kunstwerken-imwa:vastedam, waterschappen-kunstwerken-imwa:afsluitmiddel, waterschappen-kunstwerken-imwa:gemaal, waterschappen-kunstwerken-imwa:sifon, waterschappen-kunstwerken-imwa:verbeterinstallatie (from the description)
- `outputFormat`: e.g. application/json for GeoJSON (from the description)
- `srsName`: projection, e.g. EPSG:4326 for web maps (default EPSG:28992, RD) (from the description)
- `count / startIndex`: paging (from the description)
- `filter`: FES XML filter on fields or geometry (from the description)
- `bbox`: box in the chosen projection (platform)

### Fields (33)
`geom` geometrie, `aantaldoorstroomopeningen` long, `afslagpeil` double, `afvoercoefficient` double, `breedteopening` double, `categoriewaterkering` string, `code` string, `drempelpeil` double, `filteruitstroming` string, `functiegebiedgemaal` string, `functiegemaal` string, `guid` string, `indicatiewaterkerend` string, `isonderdeelvanwaterkering` string, `kerendehoogte` double, `maximalecapaciteit` double, `naam` string, `nen3610id` string, `ontwerpbuitenwaterstand` double, `openingspeil` double, `openkeerpeil` double, `opmerking` string, `richting` double, `signaleringspeil` double, `sluitpeil` double, `statusleggerwatersysteem` string, `statusleggerwaterveiligheid` string, `statusobject` string, `typeregelbaarheid` string, `typewaterkerendeconstructie` string, `url` string, `waterbeheerder` string, `fuuid` string

### Limits and pitfalls
- At most 1,000 features per request (CountDefault). (from the description)
- Paging supported: count and startIndex (ImplementsResultPaging). (from the description)
- The same data are also an OGC API: https://api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v2 (GeoJSON, 1,000 per page, cursor paging). It gives no total; the WFS does. (tested)
- GetPropertyValue returns one field without geometry, at most 1,000 values per request; page with startIndex and sortBy=nen3610id. (tested)

### Example
```
https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0?request=GetFeature&service=WFS&version=2.0.0&typeNames=waterschappen-kunstwerken-imwa:gemaal&outputFormat=application/json&srsName=EPSG:4326&count=1&propertyName=naam,code,waterbeheerder,maximalecapaciteit,statusobject
```

## How to fetch it

### curl
```bash
curl "https://api.pdok.nl/hwh/waterschappen-kunstwerken-imwa/ogc/v2/collections/gemaal/items?f=json&limit=5"
```

### python
```python
import requests

wfs = "https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0"
for laag in ["gemaal", "stuw", "sluis", "vispassage"]:
    r = requests.get(wfs, params={"service": "WFS", "version": "2.0.0", "request": "GetFeature",
                                  "resultType": "hits", "typeNames": laag})
    print(laag, r.text.split('numberMatched="')[1].split('"')[0])
```


## Examples with real figures (2)

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

- **Pumping stations per water authority: most Hoogheemraadschap Hollands Noorderkwartier (2,293 pumping stations), then Wetterskip Fryslân and Hoogheemraadschap van Rijnland** (oktober 2026). Table waterschappen-kunstwerken-imwa. [Example](https://www.opendataindex.nl/en/voorbeeld/waterschappen-gemalen-per-waterschap)
  - `https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=gemaal&valueReference=waterbeheerder&sortBy=nen3610id&count=1000&startIndex=0`
  - `https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=gemaal`
- **Water authority structures by type: most culverts (626,955 objects), then bridges and fixed dams** (oktober 2026). Table waterschappen-kunstwerken-imwa. [Example](https://www.opendataindex.nl/en/voorbeeld/waterschappen-kunstwerken-soorten)
  - `https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=duiker`
  - `https://service.pdok.nl/hwh/waterschappen-kunstwerken-imwa/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=gemaal`
