Documentatie

Elke API op nederland.cloud is individueel aanspreekbaar en levert antwoorden in hetzelfde vaste formaat. Hieronder per API: het endpoint, de parameters, de responsvelden, een voorbeeld en de link naar de documentatie van de onderliggende bron.

Algemene conventies

ConventieBetekenis
Alles is een APInederland.cloud biedt alles als API aan: zes directe bron-API's én elke dataset uit de landelijke catalogus (20.304 stuks). Het responsformaat is identiek; het label bron_type in de envelop vermeldt de herkomst.
bron-APIAchter dit endpoint staat een onderliggende API van de instantie zelf (PDOK, CBS, RDW, …). Wij houden een eigen adapter bij die de brontaal vertaalt naar de standaard — volledige veldcuratie, paging, historie waar de bron die biedt.
datasetAchter dit endpoint staat een onderliggende dataset uit de landelijke catalogus (data.overheid.nl). nederland.cloud haalt de dataset live op bij de publicerende instantie en ontsluit de inhoud universeel: CSV als tabel, ArcGIS als features, JSON direct. Zie GET /v1/datasets/{id}/data.
snake_caseAlle veldnamen zijn snake_case, in elke API.
ISO-8601 (UTC)Alle tijdstempels als 2026-08-20T19:00:00Z.
WGS84 + RDCoördinaten standaard in WGS84 (lon/lat), waar beschikbaar aangevuld met Rijksdriehoek.
nullBetekent "onbekend of afgeschermd bij de bron". Broncodes zoals "." worden nooit doorgestuurd.
AuthenticatieIn de bètafase geen sleutel vereist. CORS staat open (*), zodat u direct uit een browser kunt ontwikkelen.
ActualiteitAntwoorden worden live bij de bron opgevraagd en maximaal 24 uur gecached (luchtkwaliteit 30 minuten).

De envelop

Elk succesvol antwoord heeft dezelfde buitenkant, ongeacht de API:

{
  "api": "nederland.cloud",
  "versie": "v1 (bèta)",
  "onderdeel": "bag.adressen",          // welke API u aanriep
  "bron_type": "bron-api",              // 'bron-api' of 'dataset' — zie algemene conventies
  "gegenereerd_op": "2026-08-20T19:12:03Z",
  "duur_ms": 312,                        // totale responstijd
  "bronnen": [{                          // herkomst van dít antwoord
    "naam": "PDOK Locatieserver",
    "instantie": "Kadaster / PDOK",
    "licentie": "CC0 1.0",
    "duur_ms": 280,
    "uit_cache": false,
    "status": "ok"
  }],
  "data": { ... }                        // de genormaliseerde inhoud
}

Bij CC BY-bronnen (zoals CBS) bevat bronnen[] tevens een verplicht attributie-veld dat u bij hergebruik dient mee te geven.

Foutafhandeling

Alle fouten — ook wanneer een bron onbereikbaar is — volgen RFC 7807:

HTTP/1.1 400 Bad Request
{
  "type": "about:blank",
  "title": "Parameter 'q' is verplicht (minimaal 2 tekens)",
  "status": 400
}
StatusBetekenis
400Ongeldige of ontbrekende parameter (zie title).
404Onbekend endpoint — zie GET /v1/bronnen.
502De broninstantie is onbereikbaar of gaf een fout; details in detail.
500Interne fout (zou niet moeten voorkomen).

Dataverificatie & integriteit

Elk antwoord is onafhankelijk verifieerbaar. Drie mechanismen:

1. Hash over de genormaliseerde data

Elke response bevat integriteit.hash: een SHA-256 over de canonieke JSON van data. U herberekent die hash en vergelijkt — zo weet u dat het antwoord niet onderweg is gewijzigd:

import hashlib, json

canoniek = json.dumps(antwoord["data"], sort_keys=True,
                      separators=(",", ":"), ensure_ascii=False)
hash = hashlib.sha256(canoniek.encode("utf-8")).hexdigest()
assert hash == antwoord["integriteit"]["hash"]   # 1:1

2. Exacte bron-URL per antwoord

Elke bronnen[]-registratie bevat bron_url: de exacte aanroep die wij bij de instantie deden (parameters incluis). Haal die zelf op en vergelijk de ruwe bron met onze genormaliseerde weergave — er mag inhoudelijk niets anders verschillen dan formaatnormalisatie.

3. Normalisatiebeleid (wat wij wél en niét veranderen)

Wij veranderen nooit inhoud. Alleen formaat: coderingen naar snake_case, datums naar ISO-8601, CBS-'onbekend'-codes naar null, coördinaten naar WGS84 (+RD), getallen naar getallen. Ontbrekende of afgeschermde bronwaarden worden null — nooit ingevuld, geschat of gecorrigeerd.

Standaarden

StandaardToepassing
ISO 8601Alle datums en tijdstempels (UTC, Z-suffix).
RFC 7807Foutformaat voor alle endpoints.
SHA-256 (FIPS 180-4)Integriteits-hash per antwoord.
DCAT-AP NLCatalogus-ontsluiting sluit aan op de landelijke datasetmetadata (titel, instantie, licentie, resources).
W3C PROV-O (invulling)bronnen[] is een PROV-achtige herkomstregistratie: entiteit (bron), tijdstip (gegenereerd_op), activiteit (bron_url, duur_ms, cache-status).
GeoJSON (RFC 7946)Geometrieën in geometrie_wgs84.

Op de roadmap: ondertekende responses (HMAC met klantsleutel), een publiek auditlog van bron-versies, en ISO/IEC 27001-certificering van de hosting.

BAG · Adressen

live Kadaster / PDOK CC0

Zoekt adressen in de Basisregistratie Adressen en Gebouwen: straat, huisnummer, postcode, woonplaats, gemeente, wijk, buurt, kadastrale percelen en coördinaten.

Aanroepen

GET /v1/bag/adressen?q={zoekterm}&rows=8&start=0    // zoeken met paging
GET /v1/bag/suggest?q={fragment}&rows=6              // type-ahead
GET /v1/bag/lookup?id={object-id}                     // object per id
CallParameterVerplichtBeschrijvingVoorbeeld
/v1/bag/adressenqjaVrije zoekterm: adres, postcode + huisnummer, plaatsnaam.q=Dam 1, Amsterdam
rowsneeAantal resultaten per pagina (1–50, standaard 8).rows=10
startneePaging-offset (standaard 0). totaal_in_bron in de respons geeft de totaalomvang.start=10
/v1/bag/suggestqjaBegin van een zoekterm; levert {id, weergavenaam, type} — licht en snel, ideaal voor autocomplete.q=keizersgr
rowsneeAantal suggesties (1–25, standaard 6).rows=5
/v1/bag/lookupidjaLocatieserver-id (uit suggest of adressen); adres-objecten worden volledig genormaliseerd.id=adr-2a8dc1af…

Responsvelden (per resultaat)

VeldTypeBeschrijving
nummeraanduiding_idstringBAG-identificatie van de nummeraanduiding (koppelsleutel binnen de BAG).
straat / huisnummer / huisletter / huisnummertoevoegingstring / intGeadresseerde openbare ruimte en huisnummertoevoegingen.
postcode / woonplaatsstringPostcode (1234AB) en woonplaatsnaam.
gemeente / provincieobject{code, naam}; provincie ook afkorting.
wijk / buurtobjectCBS-gebiedscodes (WK0363AE, BU0363AE02) met naam — direct te gebruiken in de CBS-API.
percelen[]arrayGekoppelde kadastrale percelen (ASD04-F-6417) — direct bruikbaar als locatiehint voor de Kadaster-API.
geometrieobjectcentroide_wgs84 {lon, lat} en centroide_rd {lon, lat}.

Bron en brondocumentatie

Bron: PDOK Locatieserver (BAG). Licentie CC0 1.0 — vrij hergebruik, geen attributie verplicht.
Onderliggende documentatie: pdok.nl · Locatieserver · Kadaster BAG API

CBS · Kerncijfers

live CBS CC BY 4.0

Kerncijfers wijken en buurten per regio: inwoners, huishoudens, woningvoorraad, gemiddelde WOZ-waarde, inkomen en leeftijdsopbouw. Regiocodes volgen uit de BAG-API.

Aanroepen

GET /v1/cbs/kerncijfers?regio={code}&jaar=2025     // profiel per regio (en jaar)
GET /v1/cbs/regios?binnen={code}&niveau=wijk     // alle regio's binnen een gebied
CallParameterVerplichtBeschrijvingVoorbeeld
/v1/cbs/kerncijfersregiojaRegiocode: buurt (BU…), wijk (WK…) of gemeente (GM…).regio=WK0363AE
jaarneePeiljaar (standaard: nieuwste tabel). Nuttig voor jaar-op-jaar vergelijking.jaar=2024
/v1/cbs/regiosbinnenjaBovenliggende regiocode: alle wijken van een gemeente, alle buurten van een wijk, enz.binnen=GM0363
niveaujaGevraagd niveau: buurt, wijk of gemeente.niveau=wijk

Voorbeeld: /v1/cbs/regios?binnen=GM0363&niveau=wijk levert alle 110 Amsterdamse wijken met codes — die elk direct in kerncijfers te gebruiken zijn.

Responsvelden

VeldTypeBeschrijving
regioobjectcode, niveau (buurt/wijk/gemeente), naam, indelingswijziging (gb-wijziging t.o.v. voorgaand jaar).
kerncijfers.{veld}objectAltijd {waarde, eenheid}; waarde: null = afgeschermd door CBS.

Beschikbare kerncijfers: inwoners, huishoudens, woningvoorraad, gemiddelde_woz_waarde (€×1000), inkomen_per_ontvanger, inkomen_per_inwoner, aandeel_laagste_inkomens, aandeel_hoogste_inkomens, inwoners_0_tot_15, inwoners_65_plus.

Bron en brondocumentatie

Bron: CBS StatLine, tabel "Kerncijfers wijken en buurten" (jaarlijks wisselend tabel-id; het actuele jaar staat in bronnen[].tabel). Licentie CC BY 4.0 — attributie "CBS, Den Haag" is verplicht en wordt in elk antwoord meegeleverd.
Onderliggende documentatie: cbs.nl · Open Data · tabel-informatie (86165NED)

Kadaster · Kadastrale percelen

live Kadaster / PDOK CC0

Alle kadastrale percelen rond een punt: aanduiding (gemeente, sectie, nummer), oppervlak, grootte-soort, historiestatus en geometrie. Combineerbaar met de BAG-API (coördinaten) of de percelen uit een adresrespons.

Aanroepen

GET /v1/kadaster/percelen?lon={l}&lat={b}&radius=50                 // kadastrale percelen
GET /v1/kadaster/grenzen?lon={l}&lat={b}&radius=50                  // perceelsgrenzen (lijnen)
GET /v1/kadaster/bebouwing?lon={l}&lat={b}&radius=50                // gebouwvoetprints (BAG-koppeling)
GET /v1/kadaster/openbareruimtenamen?lon={l}&lat={b}&radius=50      // straatnamen
GET /v1/kadaster/nummeraanduidingreeksen?lon={l}&lat={b}&radius=50  // huisnummerreeksen
GET /v1/kadaster/percelen/{id}                                       // één perceel per id

Alle vijf de kaartlagen delen hetzelfde aanroeppatroon:

ParameterVerplichtBeschrijvingVoorbeeld
lonjaLengtegraad in WGS84 (decimaal).lon=4.8930
latjaBreedtegraad in WGS84 (decimaal).lat=52.3730
radiusneeZoekstraal in meters (5–2000, standaard 50). Max. 100 objecten per opvraag.radius=100
idja (pad)Alleen voor /percelen/{id}: kadastrale objectidentificatie./v1/kadaster/percelen/11440871270001

Responsvelden per laag

LaagBelangrijkste veldenGeometrie
percelenkadastrale_aanduiding, kadastrale_aanduiding_code, kadastrale_gemeente, sectie, perceelnummer, oppervlak_m2, soort_grootte, status, geldig_vanafpolygon
grenzentype_grens (Definitief/voorlopig), kwaliteitsklasse, status, perceel_links_id, perceel_rechts_id, geldig_vanaflijn
bebouwingbag_pand_id (koppeling naar BAG-pand!), status_bgt, in_onderzoek, relatieve_hoogteligging, bronhouder(multi-)polygon
openbareruimtenamennaam, type (Weg/Water/…), bag_openbare_ruimte_id, hoek (kaartlabel-oriëntatie)punt
nummeraanduidingreeksenlabel (huisnummer), vbo_id_laagste_huisnummer, vbo_id_hoogste_huisnummer, bebouwing_idpunt

Elk object bevat bovendien objecttype, identificatie en geometrie_wgs84 (GeoJSON). De bag_pand_id- en bag_openbare_ruimte_id-velden sluiten direct aan op de BAG-API.

Bron en brondocumentatie

Bron: PDOK OGC API — Kadastrale kaart (alle vijf de collecties). Licentie CC0 1.0.
Onderliggende documentatie: pdok.nl · Kadastrale kaart OGC API · endpoint-verkenner

Luchtmeetnet · Metingen

live RIVM / GGD'en Open data

Actuele luchtkwaliteitsmetingen per meetstation: stof, waarde, eenheid en meettijdstip. Gebruik de stationslijst om een stationnummer te vinden.

Aanroepen

GET /v1/luchtmeetnet/metingen?station={nr}&formule=PM10&van=…&tot=…   // metingen (+filters)
GET /v1/luchtmeetnet/stations?zoek={filter}&pagina=1                   // stationlijst
CallParameterVerplichtBeschrijvingVoorbeeld
/v1/luchtmeetnet/metingenstationjaStationnummer uit de stationslijst.station=NL49565
formuleneeFilter op één stof: PM10, PM25, O3, NO2, SO2, COformule=PM10
vanneeStart tijdbereik (ISO-8601). Zonder filter: meest recente metingen.van=2026-08-19T00:00:00
totneeEind tijdbereik (ISO-8601).tot=2026-08-19T06:00:00
/v1/luchtmeetnet/stationszoekneeFilter op (deel van) locatienaam of stationnummer.zoek=amsterdam
paginaneePagina van de bronlijst (standaard 1); laatste_pagina staat in de respons.pagina=2

Het toegepaste filter wordt in de respons herhaald onder data.filter, zodat antwoorden altijd zelfbeschrijvend zijn.

Responsvelden (per meting)

VeldTypeBeschrijving
stofstringFormule: PM10, PM25, O3, NO2, SO2, CO, …
waardenumberGemeten waarde; null = niet beschikbaar.
eenheidstringVoor zover vastgesteld: µg/m³ (CO: mg/m³), anders null.
gemeten_opstringMeettijdstip, ISO-8601 UTC.

Bron en brondocumentatie

Bron: Luchtmeetnet (RIVM en samenwerkende GGD'en). Attributie "Luchtmeetnet" bij hergebruik.
Onderliggende documentatie: api-docs.luchtmeetnet.nl · luchtmeetnet.nl

RDW · Voertuigen

live RDW CC0

Voertuiggegevens uit de open Basisregistratie Voertuigen van de RDW: per kenteken (exact) of per merk (zoekresultaat).

Aanroepen

GET /v1/rdw/voertuigen?kenteken=XS005T          // per kenteken
GET /v1/rdw/voertuigen?merk=TESLA&rows=5     // per merk
ParameterVerplichtBeschrijvingVoorbeeld
kentekenja (of merk)Nederlands kenteken; streepjes en spaties worden genegeerd, hoofdletterongevoelig.kenteken=XS005T
merkja (of kenteken)Merknaam voor een zoekresultaat.merk=TESLA
rowsneeMax. resultaten bij merkpzoek (1–100, standaard 10).rows=5

Responsvelden (per voertuig)

kenteken, voertuigsoort, merk, handelsbenaming, eerste_kleur, aantal_zitplaatsen, aantal_deuren, aantal_wielen, lengte_mm, breedte_mm, massa_rijklaar_kg, catalogusprijs_eur, datum_eerste_toelating (ISO), datum_eerste_afgifte_nl, wam_verzekerd, trekker. De bron levert ~52 velden als ruwe strings; wij leveren de curate set met getallen als getallen en datums als ISO-8601.

Bron en brondocumentatie

Bron: RDW Open Data (Socrata), dataset m9d7-ebf2. Licentie CC0 1.0.
Onderliggende documentatie: opendata.rdw.nl

RCE · Rijksmonumenten

live bron-API RCE CC0

Het landelijke rijksmonumentenregister, met per monument o.a. adres en BAG-koppelingen (heeft_pand, heeft_verblijfsobject) — direct te combineren met de BAG-API.

Aanroepen

GET /v1/rce/monumenten?rijksmonumentnummer=518313        // per nummer
GET /v1/rce/monumenten?postcode=1012JS&straat=Dam      // per adres
GET /v1/rce/monumenten?woonplaatsnaam=Amsterdam          // per plaats
ParameterVerplichtBeschrijvingVoorbeeld
rijksmonumentnummeréén van de drieMonumentnummer (exact).518313
postcode + straatéén van de drieSamen opgeven; postcode wordt genormaliseerd naar 1234AB.1012JS + Dam
woonplaatsnaaméén van de driePlaatsnaam.Amsterdam
pageneePagina (standaard 1, 25 per pagina).page=2

De bron levert JSON-LD met wisselende velden per treffer; wij vlakken die af naar stabiele snake_case-velden. De veldenset per monument kan daarom per treffer verschillen (null = niet geregistreerd). Bronparameters gemeenteCode en provinciecode leveren in de praktijk lege responses en worden daarom niet aangeboden.

Bron en brondocumentatie

Bron: RCE Linked Data API (Rijksmonumentenregister). Licentie CC0 1.0.
Onderliggende documentatie: cultureelerfgoed.github.io/API · monumentenregister.cultureelerfgoed.nl

data.overheid.nl · Catalogus

live Koop Overheid CC0

De meta-bron: de landelijke catalogus met 20.300+ open datasets van honderden Nederlandse instanties. Vind per onderwerp welke data bestaat, bij wie, onder welke licentie — en of er een API-koppeling is.

Aanroepen

GET /v1/catalogus/datasets?q={zoekterm}&instantie=&rows=&start=   // zoeken
GET /v1/catalogus/datasets/{id}                                        // detail per slug/uuid
GET /v1/catalogus/instanties                                           // publicerende instanties
GET /v1/datasets/{id}/data?resource=0&rijen=50                      // ruwe weergave (universeel)
GET /v1/datasets/{id}/query?waar=kolom=waarde&velden=a,b&sorteer=k // QUERY-BARE API (normale calls)
CallParameterVerplichtBeschrijvingVoorbeeld
/v1/catalogus/datasetsqneeVrije zoekterm in titel, beschrijving en tags. Leeg = alles.q=luchtkwaliteit
instantieneeFilter op instantie-slug (uit instanties).instantie=gemeente-rotterdam
rowsneeAantal resultaten (1–100, standaard 10).rows=25
startneePaging-offset; totaal_in_bron geeft de omvang.start=25
/v1/catalogus/datasets/{id}idja (pad)Dataset-slug of -uuid (veld id uit zoekresultaten)./v1/catalogus/datasets/energielabel-postcode-assen
/v1/catalogus/instantiesAlle publicerende instanties, grootste eerst.
/v1/datasets/{id}/querywaarnee (herhaalbaar)Filteren als een normale API: kolom=waarde (exact), kolom~deel (bevat), kolom!=waarde, kolom>=getal, kolom<=getal. Meerdere voorwaarden = EN.waar=MEAN_EnergieLAB=A&waar=postcode~9401
velden / sorteer + richtingneeKolomselectie (komma-gescheiden) en sortering (asc/desc).velden=postcode,label&sorteer=postcode
rijen / startneePaging (1–500, standaard 50).rijen=100&start=100
De dataset wordt bij de eerste aanroep gematerialiseerd (volledig opgehaald, ArcGIS zonder geometrie) en 24 uur als query-baar materiaal aangeboden — daarna automatisch ververst. Elke response vermeldt materiaal.opgehaald_op en uit_cache.
/v1/datasets/{id}/dataidja (pad)De data zelf: catalogus raadplegen, resource kiezen, ophalen, normaliseren. CSV → tabel, ArcGIS → features, JSON → direct; PDF/XLS → heldere melding./v1/datasets/energielabel-postcode-assen/data
resourceneeResource-index uit de dataset-detailrespons (standaard 0).resource=1
rijenneeMax. rijen/features (1–500, standaard 50).rijen=100

Responsvelden (per dataset)

VeldTypeBeschrijving
id / uuidstringSlug (bruikbaar in de detail-call) en interne UUID.
titel / samenvattingstringTitel en beschrijving van de dataset.
instantie / instantie_slugstringPublicerende organisatie (naam + slug).
licentie / toegangsrechtenstringBijv. "CC-BY (4.0)" en "PUBLIC".
high_value_datasetbooleanOf het een Europese high-value dataset is.
tags[]arrayOnderwerpstags.
resources[]arrayPer resource: naam, formaat (genormaliseerd: CSV, JSON, …), url en api (of het een webservice is).
heeft_apibooleanTrue als minstens één resource een API-dienst is — de kandidaten voor eigen adapters.
laatst_gewijzigdstringMetadata-wijziging (ISO-8601).

Bron en brondocumentatie

Bron: data.overheid.nl (Koop Overheid), CKAN API v3. Licentie CC0.
Onderliggende documentatie: data.overheid.nl · API · CKAN API-documentatie

Voor LLM's & agents (MCP)

live MCP 2025-06-18

Alle API's zijn direct als tools beschikbaar via het Model Context Protocol. Elke MCP-client (Claude Desktop, Cursor, uw eigen chatbot) kan ze zo aanspreken — de tools dragen Nederlandse beschrijvingen en JSON-Schema's waarmee een LLM zelfstandig de juiste tool kiest en parameters invult.

Transport 1 — streamable HTTP (aanbevolen)

POST /mcp        Content-Type: application/json   (JSON-RPC 2.0)

{ "jsonrpc": "2.0", "id": 1, "method": "initialize",
  "params": { "protocolVersion": "2025-06-18" } }

{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }

{ "jsonrpc": "2.0", "id": 3, "method": "tools/call",
  "params": { "name": "cbs_kerncijfers", "arguments": { "regio": "WK0363AE" } } }

Clientconfiguratie (bijv. Claude Desktop / Cursor / eigen agent):

{
  "mcpServers": {
    "nederland-cloud": {
      "url": "https://nederland.cloud/mcp"
    }
  }
}

Transport 2 — stdio (lokaal)

{
  "mcpServers": {
    "nederland-cloud": {
      "command": "python3",
      "args": ["/pad/naar/mcp_server.py"]
    }
  }
}

Beschikbare tools

ToolParametersKomt overeen met
bag_adressenq · rows · startGET /v1/bag/adressen
bag_suggestq · rowsGET /v1/bag/suggest
bag_lookupidGET /v1/bag/lookup
cbs_kerncijfersregio · jaarGET /v1/cbs/kerncijfers
cbs_regiosbinnen · niveauGET /v1/cbs/regios
kadaster_percelenlon, lat · radiusGET /v1/kadaster/percelen
kadaster_perceelidGET /v1/kadaster/percelen/{id}
kadaster_grenzenlon, lat · radiusGET /v1/kadaster/grenzen
kadaster_bebouwinglon, lat · radiusGET /v1/kadaster/bebouwing
kadaster_openbareruimtenamenlon, lat · radiusGET /v1/kadaster/openbareruimtenamen
kadaster_nummeraanduidingreeksenlon, lat · radiusGET /v1/kadaster/nummeraanduidingreeksen
luchtmeetnet_metingenstation · formule · van · totGET /v1/luchtmeetnet/metingen
luchtmeetnet_stationszoekGET /v1/luchtmeetnet/stations

Toolantwoorden bevatten dezelfde genormaliseerde JSON als de HTTP-API's, inclusief de bronnen[]-herkomst. Fouten (bijv. ontbrekende parameter) keren terug als isError: true met een leesbare melding — zodat een LLM zichzelf kan corrigeren.

llms.txt

Voor LLM's zonder MCP: GET /llms.txt serveert een compact markdown-overzicht van alle endpoints, parameters en het responsformaat — direct in te laden als context. De OpenAPI-specificatie is eveneens beschikbaar voor frameworks die tools uit een specificatie genereren.