Change history

2.16.0

April 10, 2026

New features

  • [#422] Implement health checks to monitor the status of each Docker container: web, Celery worker, Celery Flower, postgres and redis. See Container health checks for more information.

  • [#525] The fields InterneTaak.nummer, Klantcontact.nummer, and Partij.nummer have been deprecated, and the autogeneration of nummer has been removed. New fields InterneTaak.referentienummer and Klantcontact.referentienummer have been introduced and can be used to store references if needed.

  • [#529] Add additional filtering parameters for the subIdentificatorVan relationship field on the /partijen endpoint:

    • subIdentificatorVan__objectId

    • subIdentificatorVan__codeObjecttype

    • subIdentificatorVan__codeSoortObjectId

    • subIdentificatorVan__codeRegister

  • [#554] Add new JSONField metadata for management information in Klantcontact

  • [#575] Add new TextField reactie for additional details in Klantcontact

Maintenance

  • [#211] Optimize memory usage for uWSGI and celery-flower

    • Make sure uWSGI workers restart after 1000 requests

    • Set FLOWER_MAX_TASKS=1000 and FLOWER_MAX_WORKERS=50

  • Remove unnecessary dev packages from docker build

  • Upgrade python dependencies

    • django to 5.2.13

    • maykin-common to 0.18.0

    • commonground-api-common to 2.12.0

    • mozilla-django-oidc-db to 2.0.1

    • cbor2 to 5.9.0

    • cryptography to 46.0.7

    • requests to 2.33.1

    • sphinx to 9.1.0

Documentation

  • [#197] Document versioning policy and supported versions. See Versioning policy for more details.

  • [#213] Apply consistent styling across documentation

2.15.0

February 6, 2026

New features

  • Implement Cloud Events, (see Cloud events for more information).

    • [#544] Emit zaak-gekoppeld cloud event when an Onderwerpobject is created that links a Klantcontact to a Zaak.

    • [#555] Emit zaak-ontkoppeld cloud event when a Zaak that was previously linked to a Klantcontact becomes unlinked.

Warning

The zaak-gekoppeld and zaak-ontkoppeld pattern is still under active development and could be subject to change in future releases. It is not recommended to rely on this pattern in production yet.

  • [#549] Add query parameter cascade to DELETE method for OnderwerpObject. If set to true, associated Klantcontact and Betrokkene entries are also deleted.

Maintenance

  • [#547] Minor code improvements for Referentielijsten API integration.

  • [#197] Include the maximum pageSize for pagination in the OAS documentation.

  • Avoid using event key in uwsgi logs.

  • Upgrade python dependencies

    • commonground-api-common to 2.10.7

    • notifications-api-common to 0.10.1

    • open-api-framework to 0.13.4

    • asgiref to 3.11.0

    • cbor2 to 5.8.0

    • django to 5.2.11

    • urllib3 to 2.6.3

2.14.0

December 1, 2025

New features

  • [#152] Add OpenTelemetry (OTel) for collecting and exporting application metrics.

    • Metrics now exposed include:

      • HTTP request durations.

      • Number of active requests.

      • Number of users, logins, logouts, failed logins, and account lockouts.

      • CRUD operations for the following endpoints:

        • /klantcontacten

        • /betrokkenen

        • /partijen

        • /actoren

        • /digitaleadressen

        • /internetaken

    • All metrics are exported using the OpenTelemetry standard, enabling seamless integration with existing monitoring and visualization platforms.

Note

The OpenTelemetry SDK is enabled by default.

If you do not have an endpoint to send system telemetry to, update your deployment to disable it by setting the environment variable:

OTEL_SDK_DISABLED=true

If this is not done, warnings will be emitted to the container logs. The application will continue to function normally.

All available metrics and details can be found in the Observability documentation.

  • [#500] Implement optional Referentielijsten API integration to validate Klantcontact.kanaal. See the documentation for more details.

    • Add Referentielijsten configuration model to manage the connection.

    • Add a configuration step to load this config via setup_configuration.

    • Add new validators for the configuration.

  • [#30] Add API design rules linter to CI.

  • [#188] Add CSV option to dump_data.sh script (see Scripts for more information)

Bugfixes

  • [#250] Support multiple ways of serializing lists in query params for expand filter.

  • [#489] Fix validation to ensure SITE_DOMAIN is set when configuring notifications via the admin interface.

  • [#134] Fix exceptions in API endpoints not forwarded to Sentry when DEBUG=False.

Maintenance

  • Fix 503, 404, 403 and account_blocked html templates

  • [#191] nodejs to v24

  • [#31] codeql to v4

  • Upgrade python dependencies

    • [#171] open-api-framework to 0.13.2

    • commonground-api-common to 2.10.5

    • notifications-api-common to 0.9.0

    • django-setup-configuration to 0.11.0

    • mozilla-django-oidc-db to 1.1.1

    • maykin-common to 0.11.0

    • django to 5.2.8

    • uwsgi to 2.0.31

    • pip to 25.3

2.13.0

October 3, 2025

Warning

The default number of UWSGI_THREADS has been changed to 4.

New features

  • [#484] Update phone number validation rules

    ^(0[1-9][0-9]{8}|\+[0-9]{9,15}|00[0-9]{7,13})$
    
    • Allowed numbers:

      • Local: 0612345678, 0201234567

      • International with ‘+’: +31612345678

      • International with ‘00’: 0031612345678

    • Not Allowed numbers:

      • 0800, 0900, 088, 1400, 140xx

  • [#501] Add new migration script migrate_to_v2_phonenumbers to also migrate phone numbers (see Migration)

  • [#175] Changes to logging of handled and unhandled exceptions (see Exceptions for more information)

    • Log events for handled API exceptions (e.g. HTTP 400) now include invalid_params

    • Log events for unhandled API exceptions (e.g. HTTP 500) now include the traceback via exception

  • [#184] setup_configuration now supports pulling values from environment variables in YAML configuration by using value_from (see documentation_setup_configuration for more information)

Bugfixes

  • [#486] Fix default_admin_index.json via signal during migration execution

  • [#508] Fix CSS issues on the landing page

  • [#510] Add missing raw_id_fields for PartijAdmin, improving performance on the admin detail page

Maintenance

  • [#85] Increase UWSGI_THREADS to 4 to improve concurrency.

  • [#181] Fix CSP error on redoc page in development environment

  • [#163] Integrate maykin-common

    • New template for the landing page

    • Remove duplicate classes and functions that are already exists in the library

  • Upgrade python dependencies

    • open-api-framework to 0.13.1

    • [#175] commonground-api-common to 2.10.1

    • [#184] django-setup-configuration to 0.9.0

    • django-csp to 4.0

2.12.1

September 4, 2025

Bugfixes

  • [#492] Ensure 8 digit BSNs get a leading 0 in migrate_to_v2 script

2.12.0

August 28, 2025

Warning

Changes to format of setup_configuration data for OpenID connect

In this release, mozilla-django-oidc-db has been updated to version 0.25.1, which requires the new data format. The old format is deprecated and will be removed in future releases.

The new configuration must be used, as it splits the previous solo model configuration into OIDCProvider and OIDCClient configurations, making it easier to re-use identity provider settings across multiple client IDs.

Additionally, any configuration using django-setup-configuration must be updated to reflect these changes, as it is now split into two distinct sections: one for providers and one for clients. This separation also exists in the admin interface, so both sections can be configured directly through the user interface. For example:

providers:
  - identifier: example-provider
    # other provider settings

clients:
  - identifier: admin-oidc
    oidc_provider_identifier: example-provider
    # other client settings

For detailed configuration, see Admin OIDC Configuration Step. Make sure to check which fields are marked as DEPRECATED and replace them with the fields that are mentioned as replacements.

New features

  • [#419] Added query parameters on onderwerpobjecten for searching klantcontacten by referred klantcontact:

    • klantcontact__uuid

    • klantcontact__url

    • was_klantcontact__uuid

    • was_klantcontact__url

Bugfixes/QOL

  • [#470] Change countrycode validation message to warn when the value has incorrect casing.

Documentation

Maintenance

  • Upgrade python dependencies

    • zgw-consumers to 1.0.0

    • commonground-api-common to 2.9.0

    • mozilla-django-oidc-db to 0.25.1

  • [#179] Add monkeypatch to requests applying a default timeout to all requests calls

2.11.1

August 8, 2025

Bugfixes/QOL

Fixes for migrate_to_v2 command:

  • [#459] Ensure created Partijen with BSN/KVK have related partij-identificatoren

  • [#459] Allow passing of CLIENT_ID and SECRET envvars to generate access token (see Migration)

  • [#459] Set referentie to "portaalvoorkeur" for all DigitaalAdressen

2.11.0

August 5, 2025

New features

  • [#437] Add verificatieDatum attribute to DigitaalAdres, as well as new query parameters

    • verificatieDatum: match objects that have a verificatieDatum that is exactly this value

    • verificatieDatum__gt: match objects that have a verificatieDatum greater than this value

    • verificatieDatum__gte: match objects that have a verificatieDatum greater than or equal to this value

    • verificatieDatum__lt: match objects that have a verificatieDatum less than this value

    • verificatieDatum__lte: match objects that have a verificatieDatum less than or equal to this value

    • isGeverifieerd: match objects that have a verificatieDatum

Bugfixes

  • [#457] Fix bug that caused deletes on DigitaalAdres to cascade to Partij (via voorkeurs_digitaal_adres)

  • [#400] Fix error when using expand due to the value of the attribute being None for some of the results

  • [#454] Ensure DB_CONN_MAX_AGE can be set via envvar

  • Fix issue that caused Elastic APM to not show time spent on queries when connection pooling is enabled

Maintenance

  • Upgrade python dependencies

    • celery to 5.5.3 (to fix Redis reconnection issues)

    • billiard to 4.2.1

    • django-privates to 3.1.1

    • open-api-framework to 0.12.0

    • commonground-api-common to 2.7.0

  • Remove unused coreapi dependency

  • [#465] Upgrade NPM packages to fix security issues

  • Move database connection pooling envvars to open-api-framework

  • Add missing bump-my-version dependency to dev deps

Documentation

  • [#191] Add Contactgegevens API links to README

  • [#148] Add prerequisites docs page (including PostgreSQL compatibility)

2.10.0

July 4, 2025

Warning

This release upgrades Django to version 5.2.3, which requires PostgreSQL version 14 or higher. Attempting to deploy with PostgreSQL <14 will cause errors during deployment.

New features

Note

The logging format has been changed from unstructured to structured with structlog. For more information on the available log events and their context, see Format.

  • [#434] Add structlog for observability

  • [#445] Add log events for create, update, and delete operations on all API endpoints

  • [#149] Add dark/light theme toggle to the admin interface

  • [#426] Add environment variables for database connection pooling (see Environment configuration reference for more information)

    • DB_POOL_ENABLED

    • DB_POOL_MIN_SIZE

    • DB_POOL_MAX_SIZE

    • DB_POOL_TIMEOUT

    • DB_POOL_MAX_WAITING

    • DB_POOL_MAX_LIFETIME

    • DB_POOL_MAX_IDLE

    • DB_POOL_RECONNECT_TIMEOUT

    • DB_POOL_NUM_WORKERS

    • DB_CONN_MAX_AGE

Warning

Experimental: — connection pooling is not yet recommended for production use. It may not behave as expected when running uWSGI with multiple processes or threads. Use this feature cautiously and test thoroughly before deployment. See the documentation for details.

Bugfixes

  • [#418] Fix incorrect URL reverse in csrf_failure function

  • [#424] Fix error in digitaleadressen endpoint when handling different digital address types

Project maintenance

  • [#151] Move ruff and bump-my-version configurations into pyproject.toml

  • Upgrade dependencies:

    • django to 5.2.3

    • notifications-api-common to 0.7.3

    • open-api-framework to 0.11.0

    • commonground-api-common to 2.6.7

    • django-setup-configuration to 0.8.2

    • django-debug-toolbar to 5.2.0

    • django-webtest to 1.9.13

    • zgw-consumers to 0.38.0

    • pyjwt to 2.10.1

    • requests to 2.32.4

    • urllib3 to 2.5.0

    • vcrpy to 7.0.0

    • platformdirs to 4.3.8

Documentation

  • [#434] Add documentation for logging

2.9.0

May 28, 2025

New features

  • [#338] Add isStandaardAdres to the list endpoint filters for DigitaalAdres

  • [#388] Explicitly state in OAS that a space is required for postcodes

  • [#417] Add missing help texts in OAS for query parameters for onderwerpobjecten, partij-identificatoren, rekeningnummers and bijlagen

Bugfixes

  • Do not use save_outgoing_requests log handler if LOG_REQUESTS is set to false

  • [#351] Remove overig from partijidentificator and deprecate anderePartijIdentificator

Warning

The field anderePartijIdentificator for /partij-identificatoren endpoint is now deprecated and will be removed in the next major release

Project maintenance

  • Upgrade dependencies

    • tornado to 6.5.1

    • open-api-framework to 0.10.1

    • commonground-api-common to 2.6.4

  • Replace OAS GitHub actions workflows with single workflow

  • [#132] Remove pytest and check_sphinx.py, replace with simpler commands

  • [#133] Replace black, isort and flake8 with ruff and update code-quality workflow

2.8.0

May 14, 2025

New features

  • [#320] Add DigitaalAdres.referentie and allow filtering on this attribute with the referentie query parameter

  • [#368] Fix validation for phone numbers

  • [#240] Make nullable fields optional for all endpoints

  • [#342] Add PartijIdentificator filters to /klantcontacten, /betrokkenen and /digitaleadressen

  • [#391] Make huisnummer nullable via the API

  • [#395] Integrate django-upgrade-check to ensure that all required OpenKlant versions are correctly handled during instance upgrades

Bugfixes

  • [#378] Fix bug that occurred when trying to create a Partij via the admin interface and improve admin performance

  • [#341] Add missing help texts for several query parameters in the API schema

  • [#401] Fix PATCH requests on /partijen/{uuid} if digitaleAdressen and/or rekeningnummers are set to null

  • [#345] No longer make Partij.soortPartij required for PATCH requests

Project maintenance

  • Upgrade commonground-api-common to 2.6.3

  • Upgrade NPM http-proxy-middleware to 2.0.9

  • [#395] Upgrade to Python 3.12

  • [#385] Improve performance of several endpoints

Note

Used select_related and prefetch_related to minimize query count and improve efficiency, improving key endpoints such as /actoren, /partijen, /partij-identificatoren, /klantcontacten

Documentation

  • [#249] Add default to the help text of the pageSize attribute

  • [#363] Update documentation for Partij and PartijIdentificator

  • [#337] Change help texts for onderwerpobjectidentificator

  • [#408] Fix notifications documentation by replacing NOTIFICATIONS_ENABLED with NOTIFICATION_DISABLED

2.7.0

April, 3, 2025

New features

  • [#212] Add digitaleAdressen as expand option for /betrokkenen endpoint

  • [#239] Accept Partij Identificatoren as part of Partij creation

  • [#355] Add Notifications for InterneTaak and Partij (see Configure Notificaties API)

Note

Additional configuration steps have been introduced to set up external services and notifications through django-setup-configuration (see Open Klant configuration (CLI))

  • [#59] Remove django.contrib.sites dependency

Warning

To save the domain of the application you have to declare the environment variable SITE_DOMAIN (see Environment configuration reference > Optional for more information)

Bugfixes

  • [#376] Fix camelCase naming for query parameters in GET requests

Project maintenance

  • [#115] Fix OAS check github action

  • [#116] Fix codecov publish

  • [#117] Upgrade version of CI dependencies

    • Confirm support for Postgres 17

    • Development tools: black to 25.1.0, flake8 to 7.1.2 and isort to 6.0.1

    • Upgrade GHA versions

    • Upgrade nodejs to 20

  • Remove changed-files actions from CI and moved in a separate script

  • Remove duplicate CodeQL workflow

  • Fix bump-my-version for package/package-lock.json

  • Upgrade dependencies

    • Upgrade coverage to 7.7.0

    • Upgrade cryptography to 44.0.2

    • Upgrade jinja2 to 3.1.6

    • Upgrade kombu to 5.5.2

    • Upgrade django to 4.2.20

    • Upgrade django-setup-configuration to 0.7.2

    • Upgrade open-api-framework to 0.9.6

    • Upgrade notifications-api-common to 0.7.2

    • Upgrade commonground-api-common to 2.5.5

Documentation

  • Update documentation for configurations

2.6.1

March, 21, 2025

Bugfixes

  • [#369] Ensure PartijIdentificator.partij can be null

2.6.0

March, 4, 2025

New features

  • [#233] Fix set of values for PartijIdentificatoren (ENUM)

  • [#267] Enforce uniqueness of Partij and PartijIdentificatoren

  • [#309] Add separate fields for Dutch addresses next to address lines 1 to 3

  • [#310] Update BAG ID fields with new validations

  • [#311] Update country codes fields with ISO 3166

Warning

Issues #311, #310, #267 modify existing fields and add new constraints to models, which can cause them to break, as some previous values will no longer be valid. During migration, invalid values are logged so that they can be fixed manually and then migrations have to be executed again.

Project maintenance

  • Upgrading dependencies:

    • Upgrade open-api-framework to 0.9.3

    • Upgrade Django to 4.2.19

    • Upgrade cryptography to 44.0.1

    • [#324] Upgrade django-setup-configuration to 0.7.1

    • [#324] Upgrade mozilla-django-oidc-db to 0.22.0

  • [#79] Disable admin nav sidebar

  • [#99] Add quick-start workflow to test docker-compose.yml

  • [#107] Add release template

  • [#299] Add Nginx to Open Klant helm chart

Documentation

  • Improvements to documentation structure and configuration steps (CLI and Admin)

2.5.0

January, 28, 2025

New features

  • Add support for setup configuration
    • [#293] Configuring access tokens

    • [#294] Admin authentication via OIDC

Bugfixes/QoL:

  • Add UUID to Klantinteracties admin search fields and fieldsets

  • [#254] Fix incorrect URLs being returned in API responses for Persoon, Bijlage and CategorieRelatie

  • [#265] Fix adres__icontains for GET requests on digitaleadressen endpoint

  • [#272] Make digitaalAdres.omschrijving not required

  • [#252] Make Persoon.overlijdensdatum optional via admin interface

  • Point help text for DigitaalAdres.is_standaard_adres to correctly cased field name

  • [maykinmedia/charts#148] Add timeouts to celery tasks

Project maintenance

  • [#66] Update zgw-consumers to 0.35.1

  • [#66] Update commonground-api-common to 2.1.2

  • [#66] Update notifications-api-common to 0.3.1

  • Update open-api-framework to 0.9.2

  • [maykinmedia/open-api-framework#92] Make sure documentation is built in CI

  • [maykinmedia/open-api-framework#92] Fix pushing of Docker latest tag

  • Fix code-analysis workflow

  • [maykinmedia/open-api-framework#81] Switch from pip-compile to UV

  • [maykinmedia/open-api-framework#93] Security updates for third party libraries

Documentation

  • Add documentation for OpenKlant v2 semantic information model

2.4.0

November, 26, 2024

New features

  • [#256] Added the hadBetrokkene__wasPartij__url and hadBetrokkene__wasPartij__uuid query parameters to allow filtering KlantenContact by Partij

  • [#251] Added admin inlines for the InterneTaak and Actor to allow managing the relations between both. Also added search fields for both admins to search for both relations.

  • [#197] Added a migrate_to_v2 management command which allows users of version 1.0.0 to migrate to version 2.4.0 More information can be found in the documentation <https://open-klant.readthedocs.io/en/latest/installation/migration.html>

  • [#246] Added isStandaardAdres for DigitaalAdres

  • Updated OAF version to 0.9.0. This upgrade allows admin users managing their sessions through the admin.

  • [#147] Added /maak-klantcontact convenience endpoint. This allows creating a KlantContact, a Betrokkene and a OnderwerpObject through a single API request

  • [#232] Added soortDigitaalAdres enum for DigitaalAdres

Bugfixes/QoL:

  • [#235] Added extra validation for phone numbers for DigitaalAdres.adres when DigitaalAdres.soortDigitaalAdres is telefoonnummer.

  • [#243] Fix expand query parameters. Shows the _expand field in the response body even though it might be empty. This behavior is applied to all available _expand parameters.

  • [#258] Added correct API root paths in redoc OAS

  • [#234] Added validation for DigitaalAdres.adres when it’s type is email

  • [#227] Fixed partijen creation endpoint crash when partijIdentificatie is not provided

  • [#261] Fixed Onderwerpobject admin inline to use klantcontact instead of was_klantcontact

  • [#226] Made betrokkene a non-required form field in the admin

  • [#229] Fixed partijen admin search

Project maintenance

  • [#247] Added CI check to verify open API framework is updated to the latest version

  • Upgraded commonground-api-common to 1.13.4

  • [#13] Implemented open-api-workflows

2.3.0

October 4, 2024

New features

  • [#236] add dynamic pagination with pageSize parameter

Bugfixes/QoL:

  • [#258] Use correct API root in redoc OAS

  • [#255] Fix API schema not showing caused by CSP errors

  • [#255] Change SameSite session cookie to lax to fix OIDC login not working

2.2.0

September 5, 2024

New features

  • [#50] updated Python dependencies to minimize security risks.

  • [#208] fixed the bug within the API schema generation for expand paths.

  • [#209] added query parameters to the digitaleadressen endpoint.

  • [#214] Added expand path from digitaleadressen to internetaken.

  • [#182] added actoren field in internetaken.

  • [#207] changed indicatie geheimhouding from required to optional.

  • updated open-api-framework to 0.8.0, which includes adding CSRF, CSP and HSTS settings (#438). All new environment variables are added to the documentation

Warning

SECURE_HSTS_SECONDS has been added with a default of 31536000 seconds, ensure that before upgrading to this version of open-api-framework, your entire application is served over HTTPS, otherwise this setting can break parts of your application (see https://docs.djangoproject.com/en/4.2/ref/middleware/#http-strict-transport-security)

Warning

With the introduction of the actoren field in the internetaken endpoint, the field actor is now deprecated and will be removed in the next version.

2.1.0

July 16, 2024

New features:

  • Add support for mounting Open Klant on a SUBPATH

  • Elastic APM service name can now be configured with ELASTIC_APM_SERVICE_NAME envvar

  • [#175] added expand for detail endpoints in redoc

  • Made user emails unique to prevent two users logging in with the same email, causing an error

  • [#183] added afgehandeld_op field for internetaken

  • [#189] Introduced two-factor authentification (2FA) for the Admin, which can be disabled by the environment variable DISABLE_2FA

Warning

The service name for Elastic APM is now configurable via the ELASTIC_APM_SERVICE_NAME environment variable. The default value changed from Open Klant - <ENVIRONMENT> to openklant - <ENVIRONMENT>

Warning

User email addresses will now be unique on a database level. The database migration will fail if there are already two or more users with the same email address. You must ensure this is not the case before upgrading.

Warning

Two-factor authentication is enabled by default. The DISABLE_2FA environment variable can be used to disable it if needed.

Bugfixes/QoL:

  • Settings module was refactored to use generic settings provided by Open API Framework

  • [#187] Streamline environment variables

  • Fix help-text icon for datetime field in the admin

Documentation

  • [#196] remove links to outdated VNG documentation

Project maintenance

  • [#179] Fix Trivy github action

  • Update to Python 3.11

  • [#155] use open-api-framework

  • [#188] remove unused notification settings

  • Refactor settings module

2.0.0

March 15, 2024

VNG officially retired the Klanten and Contactmomenten API, which never had an official release. These API’s are replaced by the Klantinteractie API. In cooperation with several municipalities and VNG, Open Klant will implement the new API specification and might introduce backwards incompatible changes. Since Open Klant never had an official 1.0 release, we will continue versioning on the 0.x.x-scheme.

  • Initial release of Open Klant featuring the first iteration of the Klantinteracties API.

1.0.0

February 16, 2023

  • Only a version change has been applied to emphasize the major change from version 1.0.0 to 2.0.0 which features a completely different API.

0.5.0-pre

August 5, 2023

  • [#51] Showing version & git hash on the home page

0.3.0-pre

July 24, 2023

  • [#50] Added Notificatie API support

0.2.0-pre

June 14, 2023

  • [#46] Fixed CI code-quality issues

  • [#45] Updated docs and URLs to use new Github location

  • [#44] Updated project dependencies

  • [#48] Add missing auth to URLValidator for klantcontactmoment

0.1.0

February 13, 2023

  • Initial release.