Concepten
Begrijp de structuur van BAG-data en de gebruikte coordinatenstelsels.
De BAG is de officiële Nederlandse registratie van alle adressen en gebouwen. De data is gestructureerd in acht objecttypes.
Gemeente
(Municipality)Een gemeente, geïdentificeerd door haar 4-cijferige CBS-code; het hoogste bestuurlijke niveau in BAG
Amsterdam (CBS-code 0363), Rotterdam (0599)Woonplaats
(City/Town)Een officieel erkende plaats of stad in Nederland
's-Gravenhage, Amsterdam, RotterdamOpenbare Ruimte
(Public Space)Een benoemde openbare ruimte zoals een straat, plein of park
Kneuterdijk, Damrak, CoolsingelNummeraanduiding
(Address Designation)Een officieel adres met postcode en huisnummer
2514GL 78, 1012AB 1Verblijfsobject
(Dwelling/Premises)Een eenheid voor verblijf zoals een woning of kantoor
Appartement, kantoor, winkelLigplaats
(Mooring Berth)Een ligplaats voor woonschepen op het water; kan net als een verblijfsobject een adres dragen
Woonbootligplaatsen aan grachtenStandplaats
(Caravan Site)Een standplaats op een kampeerterrein of vergelijkbaar terrein; kan net als een verblijfsobject een adres dragen
Vaste standplaatsen op kampeerterreinenPand
(Building)Een fysiek gebouw met een eigen geometrie
Fysieke gebouwconstructieDe API levert coordinaten in twee stelsels: WGS84 voor wereldwijde compatibiliteit en Rijksdriehoek voor Nederlandse precisie.
WGS84
EPSG:4326Wereldwijd GPS-stelsel, gebruikt door Google Maps en de meeste apps
latitude, longitude52.0815, 4.3118Rijksdriehoek (RD)
EPSG:28992Nederlands nationaal stelsel met hoge precisie voor Nederland
rd_x, rd_y81548, 454640Gebouwgeometrie wordt geretourneerd in GeoJSON-formaat, compatibel met de meeste mapping-bibliotheken.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [4.3118, 52.0815]
},
"properties": {
"nummeraanduiding_id": "0518200000123456",
"full_address": "Kneuterdijk 78, 2514GL 's-Gravenhage",
"postcode": "2514GL",
"huisnummer": 78,
"straatnaam": "Kneuterdijk",
"woonplaats": "'s-Gravenhage",
"source": "BAG"
}
}Spaties worden weggehaald, letters worden in hoofdletters gezet. Je kunt 1234 ab, 1234AB of 1234ab doorgeven — ze worden allemaal omgezet naar de canonieke vorm van 6 tekens. Dit geldt voor postcode querystring-parameters, padsegmenten (/postcodes/{postcode}) en de request body van POST /export/addresses.
1234 AB → 1234AB
1234ab → 1234AB
1234 ab → 1234AB
1234AB → 1234ABfilter[key]=value.Filtersleutels staan per endpoint gedocumenteerd in de OpenAPI-specificatie. Typefouten en niet-ondersteunde sleutels worden afgewezen met HTTP 422 — ze worden niet stilzwijgend genegeerd. Sorteervelden zijn ook beperkt; gebruik - als prefix voor aflopend.
# Filter syntax — supported on /cities, /municipalities, /streets, /buildings/within-bbox
GET /api/v1/cities?filter[provincie_naam]=Noord-Holland
GET /api/v1/municipalities?filter[gemeente_naam]=Amsterdam
GET /api/v1/streets?filter[naam]=Damrak&filter[type]=Weg
GET /api/v1/buildings/within-bbox?north=...&filter[bouwjaar_min]=1900
# Ergonomic alias on /streets — `q` maps to filter[naam]
GET /api/v1/streets?q=Damrak
# Sort: prefix with - for descending
GET /api/v1/cities?sort=-naam
# Unknown filter[…] keys are rejected with 422 (catches typos like `provence`)/addresses/nearby en /geocode/reverse accepteren WGS84 (lat/lng) of Nederlands RD (rd_x/rd_y) — kies wat aansluit op je bestaande data. Intern wordt alles omgezet naar WGS84 voor de ruimtelijke query.
RD-invoer wordt gevalideerd tegen het Nederlandse bereik: rd_x moet tussen 7000 en 300000 liggen, rd_y tussen 289000 en 629000. Coordinaten buiten dat bereik (een veelgemaakte fout met WGS84 in het RD-veld) worden afgewezen met een 422 in plaats van een leeg resultaat te geven.
Voor gebruik aan de serverzijde zijn geen CORS-headers nodig — de standaard Bearer-token werkt. Voor browserfrontends maak je een browsersleutel aan en voeg je de origins toe waarvan je wilt aanroepen aan de whitelist. De API echoot Access-Control-Allow-Origin alleen voor die origins; andere origins worden door de browser geblokkeerd. Herhaalde querystring-parameters gebruiken laatste-wint-gedrag (?postcode=A&postcode=B gebruikt B).
# Server-side: standard Bearer token, no CORS needed.
curl https://postcodetools.nl/api/v1/version \
-H "Authorization: Bearer <api-key>"
# Browser frontend: use a Browser Key with a domain whitelist.
# The API echoes Access-Control-Allow-Origin only for whitelisted origins.
fetch("https://postcodetools.nl/api/v1/addresses/lookup?postcode=1012JS&number=1", {
headers: { Authorization: "Bearer <api-key>" }
})