wozapidocs

Referentie

Basis-URL https://woz-api.nl. Alles is GET, alles geeft JSON. De gezaghebbende machineleesbare definitie is de OpenAPI-specificatie; deze pagina is de leesbare versie daarvan.

Authenticatie

Elke call vraagt een sleutel in een header. Beide vormen werken: X-Api-Key: {key} of Authorization: ApiKey {key}. Sleutels maak je aan op woz-api.nl/ApiKeys.

Zonder account vraag je een gratis proefsleutel aan met POST https://woz-api.nl/Api/Proef: 5 unieke adressen, 10 met het e-mailadres van de gebruiker (POST /Api/Proef/Email). Zonder sleutel geeft de API 401 met code SleutelOntbreekt; een verbruikte proef geeft 402 met code ProefVerbruikt. Een sleutel hoort in een header, nooit in een URL.

Een hele lijst

POST https://woz-api.nl/Api/Lijst met {"adressen": [...]}, elk adres als tekst of als object met straat, huisnummer, huisletter, toevoeging, postcode en plaats. Of een Excel- of CSV-bestand in base64 (bestand en bestandsnaam). Daarna loopt een gratis proef van 5 adressen; GET /Api/Lijst/{token}?wacht=20 wacht tot de status wacht_op_betaling is en geeft de proefrijen, de prijs voor de hele lijst en betaling.betaalUrl, de pagina waar de gebruiker zelf met iDEAL betaalt. Na betaling staan de rijen onder links.resultaten en het bestand onder links.download. Een lijst betaal je per lijst, niet met credits.

AI-assistenten en MCP

Een MCP-server op https://woz-api.nl/Api/Mcp (Streamable HTTP; zonder inloggen, of in Claude en Claude Code met je eigen Wozapi-account via OAuth), met tools voor een proef, een opvraging, een hele lijst en een betaallink. Uitleg voor agents, met de foutcodes en de voorgeschreven reactie: woz-api.nl/voor-ai-agents. De specificatie zelf: https://woz-api.nl/openapi.json.

Endpoints

EndpointParametersWat het doet
GET /Api/Adres adres (verplicht), geometrie Zoekt op een vrij ingevoerd adres
GET /Api/Nummeraanduiding/{id} id (pad), geometrie Zoekt op een BAG-nummeraanduiding
GET /Api/AdresseerbaarObject/{id} id (pad), geometrie Zoekt op een verblijfsobject, ligplaats of standplaats
GET /Api/Credits geen Resterend creditsaldo van de sleutel

geometrie=true voegt de perceelgrenzen als GeoJSON toe, in WGS84. Standaard staat dat uit, omdat het de respons fors groter maakt. Zet het alleen aan als je echt gaat tekenen.

energielabel=true voegt het geregistreerde energielabel uit EP-Online van RVO toe, in het veld energielabel. Standaard staat dat uit; zonder de parameter ontbreekt het veld. Het kost geen extra credit. Bouwjaar, oppervlakte en gebruiksdoel uit de BAG staan altijd in bag.

subsidietoets=true toetst de woning aan de gemeentelijke regelingen met een WOZ-grens, zoals een isolatiesubsidie, in het veld subsidietoets: de gemeente van het adres, en per regeling of de woning onder de grens valt, op de peildatum die de regeling zelf noemt, met het bouwjaar en (met energielabel=true) het label. Elke gemeente is nagelezen; het overzicht staat op woz-api.nl/woz-grens-isolatiesubsidie. Het kost geen extra credit.

Respons

Alle drie de zoek-endpoints geven dezelfde structuur terug.

VeldTypeToelichting
adresstringHet genormaliseerde adres
bagobjectBAG-adresgegevens, zie hieronder
wozObjectobjectWOZ-objectnummer en grondoppervlakte
wozarrayDe vastgestelde waarden per peildatum; leeg als er geen openbare WOZ-waarde is
huidigeWaardeobjectDe nieuwste waarde uit woz, of null
wozStatusstringgevonden, geen_woning of geen_waarde, zie hieronder
percelenarrayActuele percelen uit de Kadastrale Kaart
kadastraleObjectenarrayDe aanduiding waar de WOZ-registratie aan hangt
energielabelobjectAlleen met energielabel=true, zie hieronder
subsidietoetsobjectAlleen met subsidietoets=true, zie hieronder
Twee kadastrale velden, en dat is geen fout. percelen is de actuele perceelsituatie uit de open Kadastrale Kaart. kadastraleObjecten is de aanduiding waaraan de WOZ-registratie hangt. Die kunnen verschillen, bijvoorbeeld na een perceelsplitsing. Gebruik percelen voor oppervlakte en kaartwerk, en kadastraleObjecten als je de WOZ-administratie wilt volgen.

woz

VeldTypeToelichting
peildatumstringWaardepeildatum, doorgaans 1 januari
vastgesteldeWaardeintegerDe WOZ-waarde in hele euro's

Sorteer zelf op peildatum als je de meest recente waarde wilt; de volgorde van de reeks is geen contract.

wozStatus

WaardeBetekenis
gevondenwoz heeft een of meer waarden
geen_woningGeen waarde, en volgens de BAG heeft het pand geen woonfunctie (zie bag.gebruiksdoelen). Alleen van woningen is de WOZ-waarde openbaar.
geen_waardeGeen waarde, terwijl de BAG een woonfunctie noemt of het gebruiksdoel niet bekend is
Een lege woz is een antwoord, geen storing. Het adres bestaat, er is alleen geen openbare WOZ-waarde, bijvoorbeeld bij een kantoor, kerk of hotel. Je krijgt een 200 met woz: [] en huidigeWaarde: null, en het kost geen credit. Opnieuw proberen verandert niets, ook niet na een pauze van seconden of minuten. Een tijdelijke storing geeft altijd een foutstatus (502 of 503), nooit een 200 met een lege woz.

bag

VeldType
adresseerbaarobjectIdstring
nummeraanduidingIdstring
straatnaamstring
huisnummerinteger
postcodestring
woonplaatsnaamstring
bouwjaarinteger
oppervlakteinteger
gebruiksdoelenarray
pandIdsarray

bouwjaar is het oorspronkelijke bouwjaar van het pand; ligt het verblijfsobject in meer panden, dan het oudste. oppervlakte is de gebruiksoppervlakte in m². Kent de BAG geen verblijfsobject, zoals bij een ligplaats, dan zijn deze velden null.

energielabel

VeldTypeToelichting
statusstringgevonden, geen_label of niet_beschikbaar (probeer het later opnieuw)
klassestringVan A++++ tot en met G
registratiedatumstringjjjj-mm-dd
geldigTotstringjjjj-mm-dd; ligt die in het verleden, dan is het label verlopen
gebouwtypestringHet woningtype volgens het label
gebouwsubtypestringBij een appartement de ligging in het gebouw
vereenvoudigdbooleanTrue bij een vereenvoudigd label, de methode van voor 2021
primaireFossieleEnergienumberkWh per m² per jaar

subsidietoets

VeldTypeToelichting
statusstringgetoetst, geen_regeling (nagelezen, geen regeling met een WOZ-grens) of niet_beschikbaar (de gemeente kon nu niet worden bepaald)
gemeenteobjectcode (CBS, GM0363) en naam
nagelezenstringjjjj-mm-dd: wanneer we deze gemeente voor het laatst nalazen
regelingen[].uitkomststringonder_grens, boven_grens, peildatum_ontbreekt, geen_waarde, geen_harde_grens, grens_onbekend of buiten_gebied (een wijkregeling, en het adres ligt erbuiten)
regelingen[].grenzenarrayPer grens euro, peildatum, de wozWaarde op die peildatum, onderGrens en of hij voor iedereen geldt (telt)
regelingen[].voorwaardenarrayWat per adres te toetsen is, zoals bouwjaar en label: tekst, waarde, voldoet
regelingen[].nogNaTeGaanarrayWat per adres niet te weten is, zoals eigenaar en bewoner of een inkomen
regelingen[].bedragenarrayHet bedrag per doelgroep: doelgroep, maxEuro, percentage en voorwaarde (bijvoorbeeld een inkomensgrens)
regelingen[].gebiedarrayAlleen bij een wijkregeling: de postcodes waar hij geldt
regelingen[].gewijzigdstringjjjj-mm-dd: de laatste wijziging in grens, bedrag of status, als die is vastgelegd; alle wijzigingen ook als RSS op https://woz-api.nl/woz-grens-isolatiesubsidie/wijzigingen.xml
regelingen[].soortstringopen, uitnodiging, budget_op, gesloten, vve of hoger_bedrag

wozObject

VeldTypeToelichting
wozobjectnummerintegerUniek nummer in de LV WOZ
grondoppervlakteintegerIn m², indien bekend

percelen

VeldTypeToelichting
aanduidingstringBijvoorbeeld ASD04 F 1145
kadastraleGemeenteCodestringAKR-code, bijvoorbeeld ASD04
kadastraleGemeentestringNaam van de kadastrale gemeente
kadastraleSectiestringSectieletter
perceelnummerintegerNummer binnen de sectie
oppervlakteM2integerKadastrale grootte in m²
soortGroottestringOf de grootte exact of geschat is
perceelIdstringIdentificatie van het perceel
geometrieobjectGeoJSON, alleen met geometrie=true

Fouten

Elke fout uit de API zelf heeft deze vorm:

VeldTypeToelichting
foutstringKorte omschrijving
codestringMachineleesbare code
statusintegerDe HTTP-status
detailstring of objectWat er precies misging; soms een object, bijvoorbeeld met een link om op te waarderen
traceIdstringVermeld dit bij support

Dat geldt ook voor een 400 door modelvalidatie; detail bevat dan per veld de meldingen. Match in code op code, niet op de tekst in fout: die tekst kan wijzigen, de codes niet.

CodeStatusBetekenis en wat je doet
InvalidInput400Parameter ontbreekt of is onbruikbaar, bijvoorbeeld een BAG-id dat geen 16 cijfers heeft. Pas de invoer aan.
SleutelOntbreekt401Geen sleutel meegestuurd. Vraag een gratis proefsleutel aan met POST /Api/Proef, of gebruik de sleutel van je account.
SleutelVerlopen401De proefsleutel is verlopen of ingetrokken. Vraag een nieuwe aan.
Unauthorized401De sleutel klopt niet of is ingetrokken.
ProefVerbruikt402De gratis proef is op. Geef het e-mailadres van de gebruiker (POST /Api/Proef/Email) of ga verder met credits; vraag geen nieuwe proefsleutel.
InsufficientCredits402Het saldo is op. detail.opwaarderen geeft de pagina om op te waarderen, detail.betaalUrl een betaallink die de gebruiker zelf opent.
ScopeOntbreekt403Het OAuth-token mist de scope voor deze aanroep; laat de klant opnieuw koppelen.
ApiCredentialBuitenApi403Een sleutel of token werkt alleen op /Api, niet op een webpagina.
AddressNotFound404Dit adres bestaat niet in de basisregistratie; controleer postcode en huisnummer. Een adres dat wel bestaat maar geen openbare WOZ-waarde heeft, geeft een 200 met een lege woz, zie wozStatus.
NotFound404Dit BAG-id is niet gevonden.
NonResidential404Bij dit adres hoort geen nummeraanduiding, dus ook geen WOZ-object. Zeldzaam: een gewone niet-woning, zoals een kantoor, geeft een 200 met wozStatus geen_woning.
PdokSuggestFailed, PdokLookupFailed, PdokFreeFailed502Het adres opzoeken lukte tijdelijk niet. Opnieuw proberen; kost niets.
UpstreamUnavailable503De WOZ-gegevens zijn tijdelijk niet beschikbaar. Wacht het aantal seconden uit Retry-After (60) en probeer het opnieuw; kost niets.
TeVeelVerzoeken, ProefTijdelijkVol429Te veel verzoeken, of de gratis proeven zijn voor vandaag op. Wacht het aantal seconden uit Retry-After.
ServerError500Onverwachte fout aan onze kant. Vermeld de traceId bij een supportvraag.

Limieten en credits

Prijzen en account

De staffels staan publiek, vanaf EUR 0,30 per uniek adres excl. btw. Een gratis account geeft 10 credits om de integratie af te maken.