API Documentatie

Integreer postcodedata rechtstreeks in uw applicatie via de PostcodeRegister REST API. Alle responses zijn in JSON-formaat.

Base URL

https://postcoderegister.nl/api/v1

Response Formaat

Alle endpoints retourneren hetzelfde envelope-formaat:

// Succes
{
  "ok": true,
  "data": [ ... ],
  "count": 42,
  "meta": {
    "usage": { "used": 5, "limit": 100, "period": "2026-03" }
  }
}

// Fout
{
  "ok": false,
  "error": {
    "code": "INVALID_POSTCODE",
    "message": "Postcode must be 4 digits followed by 2 uppercase letters"
  }
}

Quick Start

  1. 1

    Maak een account aan en genereer een API key

    Ga naar Dashboard→ API Keys en klik op “Aanmaken”.

  2. 2

    Stuur de key mee als header

    Voeg X-API-Key: pcr_live_jouw_key toe aan elk verzoek.

  3. 3

    Doe je eerste verzoek

curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/lookup/1011AB"

Authenticatie

Elk verzoek moet de API key meesturen via de X-API-Key header. Keys zijn gebonden aan je account en kunnen op elk moment worden ingetrokken via het dashboard.

X-API-Key: pcr_live_a3f8b2c1d4e5f6a7b8c9d0e1f2a3b4c5

Endpoints

GET/search

Zoek postcodegebieden op postcode of plaatsnaam (4-cijferig niveau).

ParameterTypeVerplichtBeschrijving
qstringJaZoekterm: postcode (bijv. 1011) of plaatsnaam (bijv. Amsterdam). Min 2, max 100 tekens.

Voorbeeld verzoek

curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/search?q=Amsterdam"

Voorbeeld response

{
  "ok": true,
  "data": [
    {
      "id": 1234,
      "postcode4": "1011",
      "postcode6": null,
      "straatnaam": null,
      "plaatsnaam": "Amsterdam",
      "gemeente": "Amsterdam",
      "provincie": "Noord-Holland",
      "latitude": 52.3676,
      "longitude": 4.9041
    }
  ],
  "count": 1,
  "meta": {
    "usage": { "used": 1, "limit": 100, "period": "2026-03" }
  }
}
GET/lookup/:postcode6

Zoek een specifieke 6-cijferige postcode op. Geeft straatnaam, plaats, gemeente, provincie en coördinaten.

ParameterTypeVerplichtBeschrijving
postcode6string (path)Ja6-cijferige postcode, bijv. 1011AB (4 cijfers + 2 letters)

Voorbeeld verzoek

curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/lookup/1011AB"

Voorbeeld response

{
  "ok": true,
  "data": {
    "id": 5678,
    "postcode4": "1011",
    "postcode6": "1011AB",
    "straatnaam": "Amstel",
    "plaatsnaam": "Amsterdam",
    "gemeente": "Amsterdam",
    "provincie": "Noord-Holland",
    "latitude": 52.3676,
    "longitude": 4.9041
  },
  "count": 1,
  "meta": {
    "usage": { "used": 2, "limit": 100, "period": "2026-03" }
  }
}
GET/area/:postcode4

Alle 6-cijferige postcodes binnen een 4-cijferig postcodegebied.

ParameterTypeVerplichtBeschrijving
postcode4string (path)Ja4-cijferig postcodegebied, bijv. 1011

Voorbeeld verzoek

curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/area/1011"

Voorbeeld response

{
  "ok": true,
  "data": [
    {
      "id": 5678,
      "postcode4": "1011",
      "postcode6": "1011AB",
      "straatnaam": "Amstel",
      "plaatsnaam": "Amsterdam",
      "gemeente": "Amsterdam",
      "provincie": "Noord-Holland",
      "latitude": 52.3676,
      "longitude": 4.9041
    },
    ...
  ],
  "count": 42,
  "meta": {
    "usage": { "used": 3, "limit": 100, "period": "2026-03" }
  }
}
GET/radius

Zoek postcodes binnen een straal van een coördinaat.

ParameterTypeVerplichtBeschrijving
latnumberJaBreedtegraad (-90 tot 90)
lngnumberJaLengtegraad (-180 tot 180)
radiusnumberJaStraal in kilometers (1 tot 100)
typestringNee'4pp' (standaard) of 'all' (inclusief 6PP)

Voorbeeld verzoek

curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/radius?lat=52.3676&lng=4.9041&radius=2"

Voorbeeld response

{
  "ok": true,
  "data": [
    {
      "postcode4": "1011",
      "plaatsnaam": "Amsterdam",
      "gemeente": "Amsterdam",
      "provincie": "Noord-Holland",
      "latitude": 52.3676,
      "longitude": 4.9041,
      "distance_km": 0.0
    },
    ...
  ],
  "count": 87,
  "limited": false,
  "meta": {
    "usage": { "used": 4, "limit": 100, "period": "2026-03" }
  }
}
GET/suggest

Autocomplete voor plaatsnamen. Geeft maximaal 8 suggesties.

ParameterTypeVerplichtBeschrijving
qstringJaBegin van een plaatsnaam (min 2, max 100 tekens)

Voorbeeld verzoek

curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/suggest?q=Amst"

Voorbeeld response

{
  "ok": true,
  "data": [
    {
      "plaatsnaam": "Amsterdam",
      "gemeente": "Amsterdam",
      "provincie": "Noord-Holland",
      "latitude": 52.3702,
      "longitude": 4.8952
    },
    {
      "plaatsnaam": "Amstelveen",
      "gemeente": "Amstelveen",
      "provincie": "Noord-Holland",
      "latitude": 52.3012,
      "longitude": 4.8637
    }
  ],
  "count": 2,
  "meta": {
    "usage": { "used": 5, "limit": 100, "period": "2026-03" }
  }
}
POST/batch

Zoek meerdere 6-cijferige postcodes op in één verzoek. Maximaal 100 postcodes. Telt als 1 API request.

Request body

ParameterTypeVerplichtBeschrijving
postcodesstring[]JaArray van 6PP postcodes (max 100 items, formaat 1234AB)

Voorbeeld verzoek

curl -X POST \
  -H "X-API-Key: pcr_live_jouw_key" \
  -H "Content-Type: application/json" \
  -d '{"postcodes":["1011AB","1012AA","9999ZZ"]}' \
  "https://postcoderegister.nl/api/v1/batch"

Voorbeeld response

{
  "ok": true,
  "data": {
    "1011AB": {
      "id": 5678,
      "postcode4": "1011",
      "postcode6": "1011AB",
      "straatnaam": "Amstel",
      "plaatsnaam": "Amsterdam",
      "gemeente": "Amsterdam",
      "provincie": "Noord-Holland",
      "latitude": 52.3676,
      "longitude": 4.9041
    },
    "1012AA": {
      "id": 5901,
      "postcode4": "1012",
      "postcode6": "1012AA",
      "straatnaam": "Damrak",
      "plaatsnaam": "Amsterdam",
      "gemeente": "Amsterdam",
      "provincie": "Noord-Holland",
      "latitude": 52.3731,
      "longitude": 4.8936
    },
    "9999ZZ": null
  },
  "count": 2,
  "meta": {
    "usage": { "used": 6, "limit": 100, "period": "2026-03" }
  }
}

Error Codes

Bij een fout retourneert de API een JSON-object met ok: false en een error object met code en message:

{
  "ok": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "X-API-Key header required"
  }
}
CodeHTTPBeschrijving
MISSING_API_KEY401Geen X-API-Key header meegegeven
INVALID_API_KEY401Key niet gevonden of ingetrokken
QUOTA_EXCEEDED402Gratis limiet bereikt (100/maand). Abonnement vereist.
RATE_LIMITED429Meer dan 60 verzoeken per minuut
INVALID_QUERY400Zoekterm ontbreekt, te kort, of ongeldig
INVALID_POSTCODE400Postcodeformaat ongeldig (verwacht: 1234AB)
INVALID_COORDINATES400Coördinaten of straal buiten bereik
BATCH_TOO_LARGE400Meer dan 100 postcodes in batch verzoek
INTERNAL_ERROR500Onverwachte serverfout

Limieten & Prijzen

Rate limit

60

verzoeken per minuut

Gratis tier

100

verzoeken per maand

Betaald

€5

per 1.000 verzoeken

Batch verzoeken tellen als 1 API request, ongeacht het aantal postcodes (max 100 per batch). Elke response bevat je huidige verbruik in het meta.usage veld.

Code Voorbeelden

JavaScript (fetch)

const API_KEY = "pcr_live_jouw_key";
const BASE = "https://postcoderegister.nl/api/v1";

// Postcode opzoeken
const res = await fetch(`${BASE}/lookup/1011AB`, {
  headers: { "X-API-Key": API_KEY },
});
const { ok, data, meta } = await res.json();
if (ok) {
  console.log(data.straatnaam, data.plaatsnaam);
  console.log(`Verbruik: ${meta.usage.used}/${meta.usage.limit}`);
}

// Batch opzoeken
const batchRes = await fetch(`${BASE}/batch`, {
  method: "POST",
  headers: { "X-API-Key": API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({ postcodes: ["1011AB", "1012AA", "3011AA"] }),
});
const batch = await batchRes.json();
if (batch.ok) {
  for (const [code, info] of Object.entries(batch.data)) {
    console.log(code, info ? info.straatnaam : "niet gevonden");
  }
}

Python (requests)

import requests

API_KEY = "pcr_live_jouw_key"
BASE = "https://postcoderegister.nl/api/v1"
HEADERS = {"X-API-Key": API_KEY}

# Postcode opzoeken
r = requests.get(f"{BASE}/lookup/1011AB", headers=HEADERS)
data = r.json()
if data["ok"]:
    print(data["data"]["straatnaam"], data["data"]["plaatsnaam"])
    print(f"Verbruik: {data['meta']['usage']['used']}/{data['meta']['usage']['limit']}")

# Radius zoeken
r = requests.get(f"{BASE}/radius", headers=HEADERS, params={
    "lat": 52.3676, "lng": 4.9041, "radius": 5
})
data = r.json()
if data["ok"]:
    print(f"{data['count']} postcodes gevonden")

# Batch opzoeken
r = requests.post(f"{BASE}/batch", headers=HEADERS, json={
    "postcodes": ["1011AB", "1012AA", "3011AA"]
})
data = r.json()
if data["ok"]:
    for code, info in data["data"].items():
        print(code, info["straatnaam"] if info else "niet gevonden")

cURL

# Postcode opzoeken
curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/lookup/1011AB"

# Zoeken op plaatsnaam
curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/search?q=Utrecht"

# Radius zoeken (5 km)
curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/radius?lat=52.3676&lng=4.9041&radius=5"

# Alle 6PP in een 4PP gebied
curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/area/1011"

# Autocomplete
curl -H "X-API-Key: pcr_live_jouw_key" \
  "https://postcoderegister.nl/api/v1/suggest?q=Rott"

# Batch opzoeken
curl -X POST \
  -H "X-API-Key: pcr_live_jouw_key" \
  -H "Content-Type: application/json" \
  -d '{"postcodes":["1011AB","1012AA","3011AA"]}' \
  "https://postcoderegister.nl/api/v1/batch"