Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omnizoek-0.2.0.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omnizoek-0.2.0-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

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

Hashes for omnizoek-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f41372490b1ed17b2c00299e86e7e532298694e167cabb5300f0bff7172d70e1
MD5 15509261f432293829a1f69e99b255cc
BLAKE2b-256 602fc354751ddf96c6a1ef6946b2ba072c691379faa8c7080913f05671ca98e9

See more details on using hashes here.

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

Hashes for omnizoek-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0fc86dc2b540053a9bfe9b0703f07f55bc9e6ab3a8bb3baa3c38be65809e7ea
MD5 c7d66f6e4f3c026315961a94db35124b
BLAKE2b-256 9a08b4a7c69d9f6c18c22a57f0b406d7e5c7bef2acde92098d5eb9c4add8e323

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page