API for accessing Dutch business and address data: BAG addresses, KVK companies, and LEI entities.
This API provides access to official Dutch data sources through a unified API:
All API endpoints require authentication using an API key. Include your API key in the request header:
X-API-Key: your-api-key-here
Different endpoints require different permissions:
API requests are subject to rate limiting to ensure fair usage. If you exceed the rate limit, you'll receive a 429 Too Many Requests response.
All responses are returned in JSON format with the following structure:
data key with the requested resource(s)message key with error detailslinks and meta keys with pagination informationTo authenticate requests, include a X-API-Key header with the value "{YOUR_API_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can get your API key from your account dashboard. Different endpoints may require different API key permissions (kvk:read, kvk:search, lei:read).
APIs for querying Dutch address data from the Kadaster BAG (Basisregistratie Adressen en Gebouwen). All endpoints require authentication via API key with specific permissions.
Retrieve a paginated list of BAG addresses from the local database with filtering and sorting options.
Filter by postal code (with or without space).
Filter by house number.
Search by street name (partial match).
Filter by city (partial match).
Filter by municipality.
Filter by province.
Filter by in-use status.
Sort field. Available: street_name, city, postal_code, house_number.
Sort order (asc or desc).
Number of results per page (default: 15, max: 100).
curl --request GET \
--get "https://openchamber.nl/api/bag?postal_code=1012AB&house_number=123&street_name=Keizersgracht&city=Amsterdam&municipality=Amsterdam&province=Noord-Holland&in_use=1&sort=street_name&order=asc&per_page=25" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": "01J9X...",
"bag_id": "0363200000000001",
"postal_code": "1012AB",
"house_number": "1",
"house_letter": null,
"house_number_addition": null,
"street_name": "Keizersgracht",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"full_address": "Keizersgracht 1 1012AB Amsterdam",
"coordinates": {
"latitude": 52.370216,
"longitude": 4.895168
},
"last_synced_at": "2023-11-20T10:30:00Z"
}
],
"links": {
"first": "http://example.com/api/bag?page=1",
"last": "http://example.com/api/bag?page=5",
"prev": null,
"next": "http://example.com/api/bag?page=2"
},
"meta": {
"current_page": 1,
"per_page": 15,
"total": 73
}
}
Search for addresses using postal code, house number, street name, or city. Results are cached locally for faster subsequent queries.
Postal code (required if not using street search).
House number (optional, refines postal code search).
House letter (optional).
House number addition (optional).
Street name (required if not using postal code).
City name (required if using street search).
curl --request GET \
--get "https://openchamber.nl/api/bag/search?postal_code=1012AB&house_number=1&house_letter=A&house_number_addition=bis&street_name=Keizersgracht&city=Amsterdam" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"postal_code\": \"bngzmiy\",
\"house_number\": 16,
\"house_letter\": \"d\",
\"house_number_addition\": \"ljnikh\",
\"street_name\": \"wayk\",
\"city\": \"cmyu\"
}"
{
"data": [
{
"id": "01J9X...",
"bag_id": "0363200000000001",
"postal_code": "1012AB",
"house_number": "1",
"street_name": "Keizersgracht",
"city": "Amsterdam",
"full_address": "Keizersgracht 1 1012AB Amsterdam",
"coordinates": {
"latitude": 52.370216,
"longitude": 4.895168
}
}
],
"meta": {
"search_type": "postal_code",
"total": 1
}
}
Convenient endpoint for direct address lookup. Automatically formats postal code and handles additions.
Postal code (with or without space).
House number.
House letter or addition (optional).
curl --request GET \
--get "https://openchamber.nl/api/bag/1012AB/1/A" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": "01J9X...",
"bag_id": "0363200000000001",
"postal_code": "1012AB",
"house_number": "1",
"street_name": "Keizersgracht",
"city": "Amsterdam",
"full_address": "Keizersgracht 1 1012AB Amsterdam",
"coordinates": {
"latitude": 52.370216,
"longitude": 4.895168
}
}
}
Retrieve a specific BAG address by its BAG ID. Checks local cache first, fetches from BAG API if not found or data is stale (older than 30 days).
The BAG address object ID.
curl --request GET \
--get "https://openchamber.nl/api/bag/0363200000000001" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": "01J9X...",
"bag_id": "0363200000000001",
"postal_code": "1012AB",
"house_number": "1",
"house_letter": null,
"house_number_addition": null,
"street_name": "Keizersgracht",
"official_street_name": "Keizersgracht",
"city": "Amsterdam",
"municipality": "Amsterdam",
"province": "Noord-Holland",
"object_type": "verblijfsobject",
"status": "Naamgeving uitgegeven",
"in_use": true,
"full_address": "Keizersgracht 1 1012AB Amsterdam",
"coordinates": {
"latitude": 52.370216,
"longitude": 4.895168
},
"full_data": {...},
"last_synced_at": "2023-11-20T10:30:00Z"
}
}
APIs for managing and querying Dutch Chamber of Commerce (KVK) company data. All endpoints require authentication via API key with specific permissions.
Retrieve a paginated list of KVK companies from the local database with filtering and sorting options.
Filter by exact KVK number (8 digits).
Search by company name (partial match in naam or statutaire_naam).
Filter by city/place (partial match).
Filter by exact postal code.
Filter by active status.
Filter by company type.
Sort field. Available: name, kvk_number, city, postal_code, active, registration_date.
Sort order (asc or desc).
Number of results per page (default: 15, max: 100).
curl --request GET \
--get "https://openchamber.nl/api/kvk?kvk_number=12345678&name=ACME&city=Amsterdam&postal_code=1012AB&active=1&type=rechtspersoon&sort=name&order=asc&per_page=25" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"kvk_nummer": "12345678",
"naam": "Example Company B.V.",
"statutaire_naam": "Example Company Besloten Vennootschap",
"vestigingsnummer": "000012345678",
"actief": true,
"type": "rechtspersoon",
"straatnaam": "Keizersgracht",
"huisnummer": "123",
"postcode": "1012AB",
"plaats": "Amsterdam",
"rechtsvorm": "Besloten Vennootschap",
"rsin": "123456789",
"formele_registratiedatum": "2020-01-15",
"last_synced_at": "2023-11-20T10:30:00Z"
}
],
"links": {
"first": "http://example.com/api/kvk?page=1",
"last": "http://example.com/api/kvk?page=5",
"prev": null,
"next": "http://example.com/api/kvk?page=2"
},
"meta": {
"current_page": 1,
"per_page": 15,
"total": 73
}
}
Search for companies directly via the KVK API and cache the results locally. Requires KVK API to be configured.
Company name to search for (minimum 2 characters).
KVK number to search for (exactly 8 digits).
City/place to filter by.
Postal code to filter by.
House number to filter by.
Page number (1-100).
Results per page (1-100).
curl --request GET \
--get "https://openchamber.nl/api/kvk/search?name=ACME&kvk_number=12345678&city=Amsterdam&postal_code=1012AB&house_number=123&page=1&results_per_page=10" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"bngz\",
\"kvk_number\": \"miyvdljn\",
\"city\": \"architecto\",
\"postal_code\": \"architecto\",
\"house_number\": 16,
\"page\": 22,
\"results_per_page\": 7
}"
{
"data": [
{
"kvk_nummer": "12345678",
"naam": "Example Company B.V.",
"vestigingsnummer": "000012345678",
"actief": true,
"type": "rechtspersoon",
"straatnaam": "Keizersgracht",
"huisnummer": "123",
"postcode": "1012AB",
"plaats": "Amsterdam"
}
],
"meta": {
"page": 1,
"results_per_page": 10,
"total": 73
},
"links": {
"previous": null,
"next": "https://api.kvk.nl/api/v1/zoeken?page=2"
}
}
Retrieve a specific KVK company by its KVK number. Checks local cache first, fetches from KVK API if not found or data is stale (older than 30 days).
Priority order: main_establishment > legal_entity > branch Returns related records (other types with the same KVK number) in the response.
The KVK number (8 digits).
curl --request GET \
--get "https://openchamber.nl/api/kvk/12345678" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": "01kasb2yqwwr7hn3k5b7d4bwyv",
"kvk_number": "12345678",
"rsin": "123456789",
"establishment_number": "000012345678",
"name": "Example Company B.V.",
"statutory_name": "Example Company Besloten Vennootschap",
"formal_registration_date": "2020-01-15T00:00:00+00:00",
"material_registration_date": "2020-01-10T00:00:00+00:00",
"address": {
"street_name": "Keizersgracht",
"house_number": "123",
"postal_code": "1012AB",
"city": "Amsterdam"
},
"type": "main_establishment",
"active": true,
"legal_form": "Besloten Vennootschap",
"non_mailing": false,
"is_main_establishment": true,
"total_employees": 25,
"cache": {
"last_synced_at": "2023-11-20T10:30:00+00:00",
"is_stale": false
},
"created_at": "2023-11-20T10:30:00+00:00",
"updated_at": "2023-11-20T10:30:00+00:00",
"related": [
{
"id": "01kasb2yqwwr7hn3k5b7d4bwyx",
"kvk_number": "12345678",
"establishment_number": null,
"name": "Example Company B.V.",
"type": "legal_entity",
"active": true,
"address": {
"street_name": null,
"house_number": null,
"postal_code": null,
"city": null
},
"is_main_establishment": false
}
]
}
}
Retrieve all establishments (vestigingen) for a specific KVK number.
The KVK number (8 digits).
curl --request GET \
--get "https://openchamber.nl/api/kvk/63314061/establishments" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"establishment_number": "000032242441",
"name": "Webmethod",
"type": "main_establishment",
"is_main_establishment": true,
"address": {
"street_name": "Pleiadenlaan",
"house_number": "1 145",
"postal_code": "9742NE",
"city": "Groningen"
},
"active": true
}
]
}
Retrieve a specific establishment by its establishment number.
The KVK number (8 digits).
The establishment number (12 digits).
curl --request GET \
--get "https://openchamber.nl/api/kvk/63314061/establishments/000032242441" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"establishment_number": "000032242441",
"name": "Webmethod",
"type": "main_establishment",
"address": {
"street_name": "Pleiadenlaan",
"house_number": "1 145",
"postal_code": "9742NE",
"city": "Groningen"
},
"company": {
"kvk_number": "63314061",
"name": "Webmethod",
"legal_form": "Eenmanszaak"
}
}
}
APIs for managing and querying Legal Entity Identifier (LEI) entities. All endpoints require authentication via API key.
Retrieve a paginated list of LEI entities with optional search and filtering capabilities.
Search in legal name, LEI code, city, or registration authority entity ID.
Filter by country code (ISO 3166-1 alpha-2).
Filter by legal entity status.
Filter by legal form (partial match).
Filter by postal code.
Filter by registration authority entity ID.
Filter by city name (partial match).
Number of results per page (default: 15, max: 100).
Field to sort by. Available: legal_name, lei, legal_entity_status, entity_creation_date, last_public_update_date, legal_address_country, legal_address_city.
Sort order (asc or desc).
curl --request GET \
--get "https://openchamber.nl/api/lei?search=ACME&country=NL&status=ACTIVE&legal_form=BV&postal_code=1012AB®istration_authority_entity_id=12345678&city=Amsterdam&per_page=25&sort=legal_name&order=asc" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"lei": "724500VKKSH9QOLTFR81",
"legal_name": "Example Company B.V.",
"legal_entity_status": "ACTIVE",
"legal_form": "Besloten Vennootschap",
"legal_address_country": "NL",
"legal_address_city": "Amsterdam",
"legal_address_postal_code": "1012AB",
"registration_authority_entity_id": "12345678",
"entity_creation_date": "2020-01-15",
"last_public_update_date": "2023-11-20T10:30:00Z"
}
],
"links": {
"first": "http://example.com/api/lei?page=1",
"last": "http://example.com/api/lei?page=5",
"prev": null,
"next": "http://example.com/api/lei?page=2"
},
"meta": {
"current_page": 1,
"per_page": 15,
"total": 73
}
}
Retrieve a specific LEI entity using its LEI code.
The ID of the lei.
The LEI code (20 alphanumeric characters).
curl --request GET \
--get "https://openchamber.nl/api/lei/architecto" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"lei": "724500VKKSH9QOLTFR81",
"legal_name": "Example Company B.V.",
"legal_entity_status": "ACTIVE",
"legal_form": "Besloten Vennootschap",
"legal_address_country": "NL",
"legal_address_city": "Amsterdam",
"legal_address_postal_code": "1012AB",
"registration_authority_entity_id": "12345678",
"entity_creation_date": "2020-01-15",
"last_public_update_date": "2023-11-20T10:30:00Z"
}
}