Official Python SDK for the OmniZoek API — Dutch government data in one line of code
Project description
omnizoek · Python SDK
Official Python SDK for the OmniZoek API — Dutch government data (address enrichment, IBAN/BIC, VAT, geocoding, exchange rates, LEI lookup, vehicle history, energy labels, emission zones, minimum wage, and more) in one line of code.
from omnizoek import OmniClient
client = OmniClient(api_key="omni_live_...")
# Address enrichment (BAG + PDOK)
address = client.geo.enrich_address(postcode="1012LG", house_number="1")
print(address.street, address.city) # Damrak Amsterdam
# IBAN → BIC
bic = client.finance.iban_to_bic(iban="NL91ABNA0417164300")
print(bic.bic, bic.bank_name) # ABNANL2A ABN AMRO Bank N.V.
# Minimum wage
wage = client.hr.minimum_wage(age=21, date="2026-01-01")
print(f"€{wage.hourly_eur}/hour") # €14.06/hour
Installation
pip install omnizoek
Requires Python 3.10+.
Quick start
from omnizoek import OmniClient
client = OmniClient(api_key="omni_live_...")
Get an API key at omnizoek.nl/signup. Use omni_test_... keys for development — they return fixture data and are never billed.
Async support
Every method has an async counterpart via AsyncOmniClient:
import asyncio
from omnizoek import AsyncOmniClient
async def main():
async with AsyncOmniClient(api_key="omni_live_...") as client:
address = await client.geo.enrich_address(postcode="1012LG", house_number="1")
print(address.street)
asyncio.run(main())
Endpoints
Geo
address = client.geo.enrich_address(postcode="1012LG", house_number="1")
# → AddressEnrichResponse
results = client.geo.geocode(q="Damrak 1, Amsterdam")
# → GeocodeResponse
loc = client.geo.reverse_geocode(lat=52.3756, lon=4.8951)
# → ReverseGeocodeResponse
Finance
bic = client.finance.iban_to_bic(iban="NL91ABNA0417164300")
# → IbanToBicResponse
vat = client.finance.vat_verify(country_code="NL", vat_number="004495445B01")
# → VatVerifyResponse
rates = client.finance.exchange_rates()
# → ExchangeRatesResponse
vat_rates = client.finance.vat_rates(country="NL")
# → VatRatesResponse
Compliance
result = client.compliance.validate_finance(type="bsn", number="123456782")
# → FinanceValidationResponse
HR
wage = client.hr.minimum_wage(age=21, date="2026-01-01")
# → MinimumWageResponse
holiday = client.hr.holiday_surcharge(date="2026-04-27", industry="horeca")
# → HolidaySurchargeResponse
Real Estate
label = client.real_estate.energy_label(postcode="1012LG", house_number="1")
# → EnergyLabelResponse
Logistics
zone = client.logistics.emission_zone(kenteken="V-123-AB")
# → EmissionZoneResponse
transit = client.logistics.transit_disruptions(station_code="ASD")
# → TransitDisruptionsResponse
history = client.logistics.vehicle_history(kenteken="V-123-AB")
# → VehicleHistoryResponse
Business
lei = client.business.lei_lookup(lei="724500AB12CD34EF5678")
# → LeiLookupResponse
results = client.business.lei_lookup(name="Philips", country="NL")
# → LeiSearchResponse
Energy
grid = client.energy.grid_trigger(country_code="NL")
# → GridTriggerResponse
Error handling
from omnizoek import OmniClient
from omnizoek.exceptions import OmniAuthError, OmniNotFoundError, OmniRateLimitError, OmniError
client = OmniClient(api_key="omni_live_...")
try:
address = client.geo.enrich_address(postcode="9999XX", house_number="1")
except OmniNotFoundError:
print("Address not found")
except OmniRateLimitError as e:
print(f"Rate limited, retry after {e.retry_after}s")
except OmniAuthError:
print("Invalid API key")
except OmniError as e:
print(f"API error: {e}")
| Exception | HTTP status | When |
|---|---|---|
OmniAuthError |
401 | Invalid or missing API key |
OmniNotFoundError |
404 | Resource not found |
OmniRateLimitError |
429 | Rate limit exceeded |
OmniServerError |
5xx | Upstream API unavailable |
OmniError |
Any | Base class for all SDK errors |
CLI
omnizoek address 1012LG 1
omnizoek iban NL91ABNA0417164300
omnizoek wage 21 2026-01-01
omnizoek vat NL 004495445B01
Set your API key via environment variable:
export OMNIZOEK_API_KEY=omni_live_...
Client options
OmniClient(
api_key="omni_live_...", # or set OMNIZOEK_API_KEY env var
base_url="https://api.omnizoek.nl", # default
timeout=10.0, # seconds, default 10
max_retries=3, # retries on 429/5xx, default 3
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file omnizoek-0.2.0.tar.gz.
File metadata
- Download URL: omnizoek-0.2.0.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f41372490b1ed17b2c00299e86e7e532298694e167cabb5300f0bff7172d70e1
|
|
| MD5 |
15509261f432293829a1f69e99b255cc
|
|
| BLAKE2b-256 |
602fc354751ddf96c6a1ef6946b2ba072c691379faa8c7080913f05671ca98e9
|
File details
Details for the file omnizoek-0.2.0-py3-none-any.whl.
File metadata
- Download URL: omnizoek-0.2.0-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0fc86dc2b540053a9bfe9b0703f07f55bc9e6ab3a8bb3baa3c38be65809e7ea
|
|
| MD5 |
c7d66f6e4f3c026315961a94db35124b
|
|
| BLAKE2b-256 |
9a08b4a7c69d9f6c18c22a57f0b406d7e5c7bef2acde92098d5eb9c4add8e323
|