connectholland/kvk-api-bundle
Symfony bundle for integrating the Dutch KVK API, offering configuration and services to query Chamber of Commerce company data such as profiles and registrations, with straightforward dependency injection setup.
connectholland/kvk-api-bundle, a Symfony bundle, not a Laravel package. There is no service provider, no package discovery, no config/kvk.php. If you're in Laravel, stop and treat the repo as a spec rather than a dependency — you'll write ~100 lines of Http:: calls against the KvK REST API instead of dragging Symfony DI into your app.DependencyInjection/Configuration.php for the exact config root and option names, DependencyInjection/*Extension.php for env handling, and Resources/config/ for the service ID you'll inject. Those three files are the documentation.// config/bundles.php
ConnectHolland\KvkApiBundle\ConnectHollandKvkApiBundle::class => ['all' => true],
# config/packages/connect_holland_kvk_api.yaml (verify root name against Configuration.php)
connect_holland_kvk_api:
api_key: '%env(KVK_API_KEY)%'
KVK_API_KEY=your-test-key
/zoeken) or branch (/vestigingen) endpoints — they have different response shapes and will distract you from the happy path.config/services.php.CompanyRegistry::findByKvkNumber(string $kvk): ?Company — and implement it against the bundle's client. The vendor surface is small, the package is niche, and an adapter lets you cache, mock, and swap providers without vendor types leaking into controllers or domain code.kvkNummer (8 digits) identifies the legal entity, vestigingsnummer (12 digits) identifies a branch, and RSIN is a third thing entirely. Search results (/zoeken) return branches — always extract the underlying kvkNummer before calling the basisprofiel endpoint. Do not assume one number type works everywhere.(endpoint, identifier) with a 24h–7d TTL. Company registry data changes slowly. Use Symfony Cache (cache.app) or Laravel's Cache::remember. This protects you from the KvK rate limits and keeps onboarding fast on repeat lookups.KvkNotFound, KvkUnavailable, KvkRateLimited. Controllers and onboarding flows should branch on those rather than on Guzzle exception types.KvkService using Laravel's Http client, a Company DTO, a config/services.php entry, and a cache layer — a day of work you fully own. Use this repo to learn endpoint names and response shapes, then close the tab.How can I help you explore Laravel packages today?