KVKBase Team

Belgische leverancier controleren: checklist voor KYC-onboarding

Belgische leverancier controleren of een nieuwe klant onboarden: checklist met ondernemingsnummer, status, rechtsvorm, btw via VIES en een audit trail.

belgiekyconboardingcompliance

Een nieuwe klant of leverancier aanvaarden is een moment waarop fouten goedkoop te vermijden zijn en later duur om te herstellen. Een factuur aan een bedrijf dat niet meer bestaat, een betaling aan een vennootschap in vereffening, een btw-nummer dat niet blijkt te kloppen: het zijn allemaal dingen die je in een paar seconden kan zien, als je weet waar je moet kijken. Deze checklist is bedoeld voor wie een Belgische leverancier wil controleren of een Belgische klant wil onboarden, met zoveel mogelijk automatisering en een duidelijk beeld van wat handwerk blijft.

Wat je automatisch kan nakijken

De KVKBase API geeft officiële Belgische bedrijfsgegevens terug, op basis van één ondernemingsnummer. Eén lookup kost 1 token, de btw-controle via VIES nog eens 1. Geen enkele check hieronder garandeert op zich dat een partij betrouwbaar is: ze verkleinen vooral de kans op onaangename verrassingen.

StapVeld in de APIWat je wil zien
1. Nummer geldigcontrolegetal lokaal, INVALID_CBE_NUMBERTien cijfers, controlepaar klopt
2. Onderneming bestaatNOT_FOUND (404) of profielProfiel gevonden
3. Nog actiefisActivetrue
4. Juridische situatiejuridicalSituation, juridicalSituationCodeNormale toestand
5. RechtsvormlegalFormShort, legalFormPast bij wat de partij zegt
6. Activiteitenactivities[], isMainPast bij het beweerde bedrijf
7. Adres en vestigingenaddress, establishments[]Consistent met offerte of contract
8. Btwvat, VIES-endpointGeldig, naam en adres kloppen
9. HandelsnamentradingNames[]De naam op de factuur komt voor

1. Nummer geldig

Vraag het ondernemingsnummer op, niet enkel de naam. Namen zijn dubbelzinnig, nummers niet. Controleer lokaal het controlepaar: de laatste twee cijfers zijn 97 min (de eerste acht modulo 97). Een misvormd nummer wordt trouwens geweigerd voor de lookup en kost dus geen token. Details over formaten staan in de gids over opzoeken.

2 en 3. Bestaat en actief

Een profiel met isActive: false is een rode vlag, een null betekent dat de status niet bekend is: behandel dat als “nakijken”, niet als “goed”. Ook een recent ingeschreven bedrijf is niet verdacht op zich, maar registrationDate laat je zien of een bedrijf dat zich als gevestigde speler voorstelt pas vorige maand bestaat.

4. Juridische situatie

Dit is het veld dat het meest oplevert. Een bedrijf kan actief ogen en toch in vereffening zijn of ontbonden. Let op termen als faillissement, ontbinding, vereffening of stopzetting. Het exacte label hangt van het geval af. Vraag je de lookup in één vaste taal op (hier lang=nl), dan kan je op die labels matchen, en bewaar je juridicalSituationCode mee voor je eigen administratie. Voor juridische zekerheid, bijvoorbeeld voor je een grote vordering inboekt, raadpleeg je altijd ook de officiële bronnen zoals het Belgisch Staatsblad. Onze gegevens zijn een snelle eerste filter, niet realtime en niet gegarandeerd volledig.

5 en 6. Rechtsvorm en activiteiten

Een BV met als hoofdactiviteit “bouwwerken” die plots beweert software te leveren, is niet per se fout, maar wel een vraag waard. Vergelijk activities[] (met de hoofdactiviteit gemarkeerd via isMain) met wat de partij zelf verkoopt. Hoe je die codes leest, zie je in de uitleg over rechtsvormen en NACE-codes.

7. Adres en vestigingen

Vergelijk address met het adres in je offerte of contract. Een afwijking is niet altijd erg (een maatschappelijke zetel is niet de leveradres), maar je wil het weten. Het veld establishments[] toont de vestigingseenheden met nummer, startdatum en adres. Vestigingseenheden hebben een eigen nummer dat met 2 begint.

8. Btw via VIES

Een btw-nummer in België is “BE” plus dezelfde tien cijfers, maar een ondernemingsnummer is niet automatisch een actief btw-nummer. Sommige vzw’s, artsen of eenmanszaken onder de vrijstellingsregeling hebben er geen. Bevestig dus via GET /v1/be/validate/vat/BE0821015819. Het antwoord bevat valid, name, address, validatedAt en status. Meer uitleg in de VIES-gids en het verschil tussen de twee nummers. Wil je dit eerst met de hand testen, gebruik dan /be/btw-nummer-controleren.

VIES zegt wel of het nummer geldig is. Het zegt niet of het bedrijf kredietwaardig is, en ook niet of degene die je aan de lijn hebt gemachtigd is.

9. Natuurlijke versus rechtspersoon

Bij entityType: "natural_person" (bijvoorbeeld een eenmanszaak) is er geen aparte vennootschap: de zaakvoerder is zelf aansprakelijk, en het adres kan een privéadres zijn. Dat beïnvloedt je risicobeoordeling en ook je verplichtingen onder de AVG. Bewaar enkel wat je nodig hebt en toon het niet verder dan nodig.

Een beslissing automatiseren

Het volgende voorbeeld zet het lookup-antwoord om in pass, review of fail. De logica is bewust voorzichtig: bij twijfel geen automatische goedkeuring.

const BAD_SITUATION = /faillissement|ontbinding|vereffening|stopzetting/i;

export function decide(company, { claimedName } = {}) {
  const reasons = [];
  let outcome = "pass";
  const flag = (level, reason) => {
    reasons.push(reason);
    if (level === "fail") outcome = "fail";
    else if (outcome !== "fail") outcome = "review";
  };

  if (company.isActive === false) flag("fail", "company is not active");
  if (company.isActive === null) flag("review", "activity status unknown");

  if (BAD_SITUATION.test(company.juridicalSituation ?? "")) {
    flag("fail", `juridical situation: ${company.juridicalSituation}`);
  }

  if (company.vat && company.vat.valid === false) {
    flag("review", "VAT number not valid in VIES");
  }
  if (!company.activities?.some((a) => a.isMain)) {
    flag("review", "no main activity listed");
  }
  if (company.entityType === "natural_person") {
    flag("review", "sole trader: check personal liability and GDPR");
  }
  if (claimedName) {
    const names = [company.name, ...(company.tradingNames ?? [])];
    const known = names.some(
      (n) => n.toLowerCase() === claimedName.toLowerCase()
    );
    if (!known) flag("review", "claimed name not found among names");
  }
  return { outcome, reasons };
}

Koppel de uitkomst aan een proces: pass gaat door, review landt in een wachtrij voor een mens, fail stopt het onboarden met een uitleg. Zo houd je het aantal handmatige controles laag zonder risico’s weg te poetsen.

Wat handwerk blijft

De API dekt de bedrijfsgegevens. Een volledige KYC bevat meer:

  • Uiteindelijk begunstigden (UBO) en wie het bedrijf werkelijk bestuurt.
  • Screening op sanctielijsten en politiek prominente personen.
  • Identiteitscontrole van de persoon met wie je spreekt.
  • Kredietwaardigheid, betalingsgedrag en eigen risicobeleid.

Dat zijn aparte processen met eigen bronnen. Een groene automatische check is een goede eerste stap, geen vrijbrief.

Audit trail

Wie later moet kunnen aantonen waarom hij een partij aanvaard heeft, bewaart per controle:

  1. Het volledige JSON-antwoord van de lookup, met je eigen tijdstip.
  2. Het VIES-antwoord inclusief validatedAt.
  3. De uitkomst van decide, met de redenen.
  4. Wie de handmatige review deed en wat de beslissing was.

Herhaal de controle op een vast ritme voor lopende relaties, bijvoorbeeld jaarlijks of voor een grote bestelling. Hoe je dat technisch opzet (retries, caching, batch tot 25 nummers) lees je in de integratiegids.

Beginnen kan gratis: het plan bevat 50 tokens per maand, zonder kredietkaart. Maak een account via /signup, bekijk de prijzen of lees de API-referentie. Meer over het Belgische aanbod vind je op /be.

Veelgestelde vragen

Wat moet ik minimaal controleren bij een Belgische leverancier?
Controleer of het ondernemingsnummer geldig is, of de onderneming bestaat en actief is, wat de juridische situatie is en of het btw-nummer in VIES geldig staat. Vergelijk daarna naam, adres en activiteiten met wat de partij zelf opgeeft.
Zegt een geldig btw-nummer dat het bedrijf betrouwbaar is?
Nee. VIES bevestigt enkel dat het nummer geldig geregistreerd is. Het zegt niets over solvabiliteit, en ook niet of de persoon tegenover jou echt is wie hij beweert te zijn.
Kan ik UBO-controles en sanctielijsten ook via de API doen?
Nee, die horen niet bij de bedrijfsgegevens van de API en blijven aparte stappen. Je automatiseert de basischeck en laat UBO-onderzoek en sanctiescreening via de daarvoor bedoelde bronnen lopen.
Hoe bewijs ik later dat ik de controle gedaan heb?
Bewaar het volledige JSON-antwoord met je eigen tijdstip, de btw-validatie met validatedAt en de beslissing met reden. Dat vormt je audit trail.