Rechercher les dirigeants et fonctionnaires KVK via l'API
KVKBase Team

Rechercher les dirigeants et fonctionnaires KVK via l'API

Récupérez dirigeants, fonctionnaires et signataires autorisés du registre néerlandais via l'API KVK, pour le KYC et la due diligence.

kvkapidirigeantsconformitékycdue diligence

Pour le KYC et la due diligence d’une entreprise, vérifier la société elle-même ne représente que la moitié du tableau. Il faut aussi savoir qui se trouve derrière : les dirigeants, fonctionnaires et représentants autorisés qui peuvent agir au nom de l’organisation. Le registre de la chambre de commerce néerlandaise (Handelsregister) contient exactement ces informations, et l’API KVK permet de les récupérer par programmation.

Ce guide explique comment interroger les dirigeants et fonctionnaires via l’API KVK, quels champs de données sont disponibles, et comment intégrer cela à votre processus de conformité ou d’onboarding.

Ce que le registre du commerce contient sur les fonctionnaires

Pour chaque personne morale (BV, NV, fondation, association), le registre du commerce enregistre les personnes autorisées à agir au nom de la société. Cela comprend généralement :

  • Les dirigeants/administrateurs : les personnes chargées de la gestion courante
  • Les membres du conseil de surveillance : les commissaires dans les BV de plus grande taille
  • Les fondés de pouvoir : les personnes disposant d’une procuration commerciale
  • Les autres fonctionnaires : d’autres personnes autorisées enregistrées

Pour chaque fonctionnaire, le registre contient le nom, la date de naissance partielle, la fonction et le type de pouvoir (seul, conjoint ou limité).

Récupérer les fonctionnaires via l’API KVKBase

Avec l’API KVKBase, les données des fonctionnaires sont renvoyées dans l’objet entreprise, dans le champ officers :

import requests

API_KEY = "your_api_key"

def get_officers(kvk_number: str) -> list:
    response = requests.get(
        f"https://api.kvkbase.nl/v1/company/{kvk_number}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    )
    response.raise_for_status()
    data = response.json()

    return data.get("officers", [])

# Exemple d'utilisation
officers = get_officers("12345678")
for officer in officers:
    print(f"{officer['name']} - {officer['title']} ({officer['authorityType']})")

Une réponse typique ressemble à ceci :

{
  "officers": [
    {
      "name": "J. de Vries",
      "title": "Director",
      "authorityType": "sole",
      "dateOfBirth": "1980-04",
      "startDate": "2019-04-15",
      "endDate": null
    },
    {
      "name": "M. Jansen",
      "title": "Supervisory Director",
      "authorityType": "none",
      "dateOfBirth": "1965-11",
      "startDate": "2021-01-01",
      "endDate": null
    }
  ]
}

Remarque : la KVK publie les dates de naissance sans le jour, uniquement l’année et le mois. C’est une mesure de protection de la vie privée délibérée du registre du commerce.

Types de pouvoir : seul ou conjoint

Le champ authorityType indique la manière dont le fonctionnaire est autorisé à agir :

  • sole : peut signer et engager la société seul
  • joint : ne peut agir qu’avec un autre fonctionnaire autorisé
  • limited : le pouvoir est limité à un montant ou à un type d’opération précis
  • none : aucun pouvoir de signature (par exemple les membres du conseil de surveillance)

Cela compte lorsque vous signez des contrats. Avec un pouvoir joint, un contrat doit être signé par deux dirigeants pour être juridiquement contraignant.

def check_signing_authority(kvk_number: str, name: str) -> dict:
    officers = get_officers(kvk_number)

    for officer in officers:
        if name.lower() in officer["name"].lower() and officer["endDate"] is None:
            return {
                "found": True,
                "name": officer["name"],
                "title": officer["title"],
                "authority": officer["authorityType"],
                "can_sign_alone": officer["authorityType"] == "sole"
            }

    return {"found": False}

Fonctionnaires historiques

Le registre du commerce contient aussi des données historiques : d’anciens dirigeants qui ont été radiés. Dans l’API, vous les reconnaissez à un endDate non nul. Pour une due diligence, c’est utile : un ancien dirigeant parti avant un litige, ou une direction récemment renouvelée, peut justifier une investigation complémentaire.

def split_active_and_historical(officers: list) -> dict:
    active = [o for o in officers if o.get("endDate") is None]
    historical = [o for o in officers if o.get("endDate") is not None]

    return {
        "active": active,
        "historical": historical,
        "recently_changed": any(
            o.get("startDate", "") >= "2026-01-01" or
            o.get("endDate", "") >= "2026-01-01"
            for o in officers
        )
    }

Intégrer les fonctionnaires dans un processus KYC

Dans un parcours d’onboarding d’entreprise, vous pouvez combiner les données des fonctionnaires avec d’autres contrôles KVK pour obtenir une vérification complète :

def kyc_company(kvk_number: str, claimed_director: str) -> dict:
    # 1. Récupérer les données de base de l'entreprise
    company_data = get_company_data(kvk_number)

    # 2. Vérifier le statut de l'entreprise
    if company_data.get("status") != "active":
        return {"approved": False, "reason": "Company is not active"}

    # 3. Récupérer les fonctionnaires
    officers = company_data.get("officers", [])
    active_names = [
        o["name"].lower() for o in officers
        if o.get("endDate") is None
    ]

    # 4. Vérifier que le dirigeant déclaré est bien enregistré
    name_match = any(
        claimed_director.lower() in name
        for name in active_names
    )

    if not name_match:
        return {
            "approved": False,
            "reason": f"{claimed_director} is not a registered active officer"
        }

    # 5. Vérifier le pouvoir de signature
    authority = check_signing_authority(kvk_number, claimed_director)

    return {
        "approved": True,
        "company": company_data.get("name"),
        "director_verified": True,
        "can_sign_alone": authority.get("can_sign_alone", False),
        "total_active_officers": len([o for o in officers if o.get("endDate") is None])
    }

UBO et due diligence complémentaire

La KVK tient aussi le registre des UBO (bénéficiaires effectifs ultimes) pour certaines personnes morales. Il s’agit d’un registre distinct, qui n’est pas entièrement public, mais partiellement accessible via des intégrations d’API.

Pour un processus KYC complet, vous combinez généralement les données des fonctionnaires KVK avec :

  • Le registre UBO : qui sont les propriétaires ultimes (actionnaires détenant plus de 25 %) ?
  • Les listes de sanctions : filtrage UE/OFAC
  • Les listes PPE : personnes politiquement exposées

Le guide de conformité KYC explique comment mettre en place un processus de vérification complet.

Recherches en masse de fonctionnaires

Pour vérifier plusieurs entreprises à la fois, utilisez un traitement par lots avec une gestion correcte des limites de débit :

import time

def batch_officers(kvk_numbers: list, delay: float = 0.1) -> dict:
    results = {}

    for kvk in kvk_numbers:
        try:
            results[kvk] = get_officers(kvk)
            time.sleep(delay)
        except requests.HTTPError as e:
            if e.response.status_code == 429:
                time.sleep(5)
                results[kvk] = get_officers(kvk)
            else:
                results[kvk] = {"error": str(e)}

    return results

Consultez le guide d’enrichissement par lots pour d’autres schémas lorsque vous traitez des données d’entreprise à grande échelle.

En résumé

Les données sur les fonctionnaires issues du registre de la chambre de commerce néerlandaise sont précieuses pour la conformité, le KYC et la gestion des contrats. Via l’API KVKBase, vous les récupérez dans la recherche d’entreprise standard, sans intégration distincte. Combiner le statut de l’entreprise, les dirigeants actifs et le type de pouvoir vous donne une base solide pour la vérification automatisée des entreprises.

Envie d’essayer ? Créez un compte KVKBase gratuit et commencez à interroger vos propres numéros KVK.