API Documentation
Here you'll find all the information and examples you need to implement our Postcode API in your website or application.
Table of contents
Introduction
The Nederland Postcode API provides access to reliable address data based on Dutch postcodes. All endpoints are GET requests and return JSON.
Base URL
https://api.nederlandpostcode.nl/
Authentication
All requests require authentication via a Bearer token in the Authorization header.
Authorization: Bearer npa_live_xxx
All tokens start with a prefix that indicates the environment:
-
npa_live_for production tokens -
npa_test_for test tokens
With a test token you can try the API for free. Test tokens only work for the following postcodes:
- 1015CN Keizersgracht, Amsterdam (10 addresses)
- 1118BN Schiphol Boulevard, Schiphol (3 addresses)
With an account you can manage multiple projects, each with their own test and production tokens.
Try the API directly in Postman by clicking the button below.
Endpoints
Below is an overview of the available endpoints of the Nederland Postcode API. All endpoints require authentication with a Bearer token.
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/address |
Retrieve address data based on postcode and house number (+ addition) |
| GET | /v1/coordinates |
Retrieve the nearest address based on coordinates |
| GET | /v1/energy-label |
Retrieve the energy label based on postcode and house number (+ addition) |
| GET | /quota |
Request current API usage and limits |
Click an endpoint below for more details and example requests/responses:
GET /v1/address
This endpoint retrieves addresses based on a given postcode and house number, with an optional house number addition. This can be useful for validating addresses or obtaining additional address information. The result is always a list of addresses matching the given criteria, even if only one address is found.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
postcode |
string | yes | Postcode without spaces (e.g. 1015CN) |
number |
integer | yes | House number (e.g. 10) |
addition |
string | no | House number addition (e.g. A) |
attributes[] |
array | no | Extra fields (e.g. coordinates, district, neighborhood) |
Note: The attributes[] parameter can be used to request additional information.
Note: If the addition parameter is omitted, all addresses for the given postcode and house number are returned. If the parameter is provided but empty, addresses without an addition are searched for.
Supported extra fields
The following extra fields can be requested via the attributes[] parameter:
| Parameter | Description | Example |
|---|---|---|
coordinates |
Coordinates of the location | 52.30528553688755, 4.750645160863609 |
district |
Name of the district | Grachtengordel-West |
neighborhood |
Name of the neighborhood | Bloemgrachtbuurt |
function |
Function of the location | woonfunctie |
location_status |
Status of the location | verblijfsobject in gebruik |
property_status |
Status of the building | pand in gebruik |
surface_area |
Surface area of the building | 120 |
construction_year |
Construction year of the building | 1990 |
Example with a single address
This example retrieves the address for postcode 1012RJ and house number 147 with coordinates, district and neighborhood name. There is only one address for this combination.
GET https://api.nederlandpostcode.nl/v1/address?postcode=1012RJ&number=147&attributes[]=coordinates&attributes[]=district&attributes[]=neighborhood
{
"data": [
{
"postcode": "1012RJ",
"number": 147,
"addition": null,
"street": "Nieuwezijds Voorburgwal",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"country": "Nederland",
"details": {
"district": {
"official": "Burgwallen-Nieuwe Zijde",
"name": "Burgwallen-Nieuwe Zijde"
},
"neighborhood": "Nieuwe Kerk e.o."
},
"coordinates": {
"latitude": 52.37316211827917,
"longitude": 4.890902032461384
}
}
]
}
Example with multiple addresses
This example retrieves the address for postcode 1015CN and house number 10. There are 4 addresses for this combination.
GET https://api.nederlandpostcode.nl/v1/address?postcode=1015CN&number=10
{
"data": [
{
"postcode": "1015CN",
"number": 10,
"addition": "A",
"street": "Keizersgracht",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"country": "Nederland"
},
{
"postcode": "1015CN",
"number": 10,
"addition": "B",
"street": "Keizersgracht",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"country": "Nederland"
},
{
"postcode": "1015CN",
"number": 10,
"addition": "C",
"street": "Keizersgracht",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"country": "Nederland"
},
{
"postcode": "1015CN",
"number": 10,
"addition": "D",
"street": "Keizersgracht",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"country": "Nederland"
}
]
}
Example with no address
This example retrieves the address for postcode 1234AB and house number 9999. There is no address for this combination. The response contains an empty list with the 200 OK status code.
GET https://api.nederlandpostcode.nl/v1/address?postcode=1234AB&number=9999
{
"data": []
}
GET /v1/coordinates
This endpoint retrieves addresses based on given coordinates (latitude and longitude). This can be useful for finding addresses near a specific location. Like the address endpoint, this endpoint returns an array of addresses, but sorted by distance to the given coordinates.
This endpoint always returns the coordinates of the found address. Other fields such as district are not available via this endpoint.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
latitude |
float | yes | Latitude of the location (e.g. 52.305285) |
longitude |
float | yes | Longitude of the location (e.g. 4.750645) |
limit |
integer | no | Maximum number of results to return (1 to 10) - default is 1 |
Example with a found location
This example retrieves the nearest address for the given coordinates (latitude: 52.305285, longitude: 4.750645).
GET https://api.nederlandpostcode.nl/v1/coordinates?latitude=52.305285&longitude=4.750645&limit=1
{
"data": [
{
"postcode": "1118BN",
"number": 800,
"addition": null,
"street": "Schiphol Boulevard",
"city": "Schiphol",
"municipality": "Haarlemmermeer",
"province": "Noord-Holland",
"country": "Nederland",
"coordinates": {
"latitude": 52.30528553688755,
"longitude": 4.750645160863609
}
}
]
}
Example with no found location
If no address can be found near the given coordinates, the endpoint returns a 422 Unprocessable Content status code with an error message.
GET https://api.nederlandpostcode.nl/v1/coordinates?latitude=0&longitude=0
{
"message": "No address found near the provided coordinates."
}
GET /v1/energy-label
This endpoint retrieves the current and historical energy labels for a given address.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
postcode |
string | yes | Postcode without spaces (e.g. 1015CN) |
number |
integer | yes | House number (e.g. 10) |
addition |
string | no | House number addition (e.g. A) |
Example with a single address
This example retrieves the energy label for postcode 1118BN and house number 800.
GET https://api.nederlandpostcode.nl/v1/energy-label?postcode=1118BN&number=800
{
"data": [
{
"postcode": "1118BN",
"number": 800,
"addition": null,
"street": "Schiphol Boulevard",
"city": "Schiphol",
"energy_labels": [
{
"inspection_date": "02-08-2022",
"valid_until_date": "02-08-2032",
"construction_type": "utiliteitsbouw",
"building_type": null,
"energy_label": "A+++",
"max_energy_demand": 98.4,
"max_fossil_energy_demand": 55.48,
"min_renewable_share": 55.3
}
]
}
]
}
Example with no or multiple addresses
If you retrieve an energy label for a non-existent address, or for a postcode-house number combination that yields multiple addresses, you get an error with status code 422 Unprocessable Content.
{
"message": "No address found for the given postcode and number."
}
{
"message": "Multiple addresses found for the given postcode and number."
}
For more information about the contents of the various fields, see the Energy label API page.
GET /quota
This endpoint retrieves the current API usage and limits for the authenticated user. This can be useful for monitoring how many requests are still available for the current period.
Note: this endpoint does not have a version number in the URL.
It can take up to 5 minutes before usage is up to date.
Quota example
This example shows the current API usage and limits for the authenticated user.
GET https://api.nederlandpostcode.nl/quota
{
"data": {
"quota": {
"used": 250,
"limit": 2000
}
}
}
Status codes and error handling
The API uses standard HTTP status codes to indicate the outcome of a request. Below is an overview of the most common status codes and their meaning.
| Code | Explanation |
|---|---|
| 200 | Request processed successfully. |
| 401 | Unauthorized. Invalid or missing API token. |
| 404 | Wrong API endpoint used. |
| 422 | Invalid request. Check the parameters you entered. |
| 428 | Missing headers (for example: 'X-API-Beta'). |
| 429 | Too many requests in a short period of time. |
Example of a validation error
This example shows a response when required fields are missing from the request. In this case the postcode and number fields are missing.
{
"message": "The postcode field is required. (and 1 more error)",
"errors": {
"postcode": [
"The postcode field is required."
],
"number": [
"The number field is required."
]
}
}
Rate Limiting
To prevent abuse of the API, a rate limiting policy is in place. Each API token has a limit on the number of requests that can be made within a given time period. If this limit is exceeded, the API will return a 429 Too Many Requests status code.
There is a default limit per token to prevent server overload and to protect your token against unintended high usage. Contact our support team if you need a higher limit for your use case.
There is also a monthly quota on the total number of requests, depending on your subscription. You can view your current usage and increase your limits by logging in to your account dashboard.
Example of exceeding the per-minute limit
This example shows a response when the per-minute rate limit has been exceeded. In this case the limit is set to 60 requests per minute.
{
"message": "Rate limit exceeded.",
"quota": {
"strategy": "per_minute",
"limit": 60
}
}
Example of exceeding the monthly limit
This example shows a response when the monthly API quota has been exceeded. In this case the limit is set to 2000 requests per month.
{
"message": "Monthly API quota exceeded.",
"quota": {
"strategy": "per_month",
"limit": 2000
}
}
Plugins
This list contains plugins developed by us and our partners. These plugins make it easier to integrate address validation into your webshop or website.
The plugins for WordPress and other e-commerce platforms are maintained by Postcode Checkout; they also provide support and help with installing these plugins.
Have you developed a plugin yourself? Get in touch with us so we can list it here.
| Name | Developer | Link | Latest version | Last updated |
|---|---|---|---|---|
| PHP | Nederland Postcode API | View PHP plugin | 1.3.0 | 10-03-2026 |
| Laravel | Nederland Postcode API | View Laravel plugin | 1.3.2 | 18-03-2026 |
| WooCommerce | Postcode Checkout | View WooCommerce plugin | 3.0.9.4 | 05-05-2026 |
| Contact Form 7 | Postcode Checkout | View Contact Form 7 plugin | 2.1.2 | 07-05-2026 |
| PrestaShop 1.7 | Postcode Checkout | View PrestaShop 1.7 plugin | 1.4 | 07-05-2026 |
| Magento 2 | Postcode Checkout | View Magento 2 plugin | b20241024 | 04-05-2026 |
| CS Cart 4 | Postcode Checkout | View CS Cart 4 plugin | 2.0 | 09-04-2026 |
| OpenCart 4 | Postcode Checkout | View OpenCart 4 plugin | 1.0.5 | 29-04-2026 |
| PrestaShop 8 | Postcode Checkout | View PrestaShop 8 plugin | 1.4 | 07-05-2026 |
| PrestaShop 9 | Postcode Checkout | View PrestaShop 9 plugin | 3.9.4 | 22-04-2026 |
| PrestaShop 1.6 | Postcode Checkout | View PrestaShop 1.6 plugin | b20190125 | 24-07-2025 |
| Shopware 6 | Postcode Checkout | View Shopware 6 plugin | 1.0.1 | 09-04-2026 |
| OpenCart 3 | Postcode Checkout | View OpenCart 3 plugin | 3.1 | 09-04-2026 |