A free JSON API for Dutch postcodes and addresses. No key, no sign-up: call it straight from your browser or server.
Base URL
https://api.dutchzipcodes.com
Every answer is JSON over HTTPS. Field names are the Dutch names from the address register (straat = street, woonplaats = town, gemeente = municipality, provincie = province, buurt = neighbourhood, wijk = district).
Postcode to address
GET /v1/postcode/{postcode}, for example /v1/postcode/1012AB. Spaces and lower case are allowed. Example answer, shortened:
{
"postcode": {
"postcode": "1012AB",
"straat": "Damrak",
"woonplaats": "Amsterdam",
"gemeente": "Amsterdam",
"provincie": "Noord-Holland",
"huisnummerVan": 1,
"huisnummerTot": 99,
"aantalAdressen": 57,
"lat": 52.3745, "lon": 4.8961,
"buurt": "...", "wijk": "...",
"reeksen": [
{ "straat": "Damrak", "reeks": "oneven", "huisnummerVan": 1, "huisnummerTot": 99 },
{ "straat": "Damrak", "reeks": "even", "huisnummerVan": 2, "huisnummerTot": 98 }
]
},
"attribution": "..."
}
reeksen lists the house-number ranges behind the postcode, per street and side (even or oneven = odd). aantalAdressen is the number of addresses, aantalWoningen the number of homes.
Address to postcode
GET /v1/address?street=&number=&place=, for example /v1/address?street=Damrak&number=42&place=Amsterdam. place is optional; without it you may get one result per town that has the street.
{ "results": [ { "postcode": "1012AB", "straat": "Damrak", "woonplaats": "Amsterdam",
"reeks": "even", "huisnummerVan": 2, "huisnummerTot": 98, ... } ] }
Area (four digits)
GET /v1/postcode4/{digits}, for example /v1/postcode4/1012: the main town, municipality and province of the area, and how many postcodes, addresses and homes it has.
Towns
GET /v1/places?q=ams&limit=8: towns starting with the text, for a search box (at most 25).GET /v1/place/{name}: one town by name (accents and case ignored), with its municipality and province.GET /v1/meta: the date of the data and the counts.
Errors and limits
- 400: the input is not a postcode, or a required field is missing.
- 404: no such postcode, address or town.
- 429: too many requests. The limit is 2 requests per second per visitor, with short bursts allowed. That is plenty for a search box or a form; it is not meant for downloading the whole register.
- 503: the data is being refreshed; try again in a minute.
Browsers may call the API from these pages; for your own site, call it from your server, or ask us to allow your domain.
Licence and attribution
The data is open: BAG (Kadaster, CC0) and CBS wijk- en buurtindeling (CC BY 4.0). If you show it, mention the source, for example: Source: BAG (Kadaster) and CBS. Every answer carries an attribution field with this text. The API comes without guarantees; for a full copy or bulk use, contact us.