Publieke alfa — alles is gratis en de maandquota worden niet afgedwongen. Krijg één mail wanneer het betalende plan start.

Documentatie

Acht tools, synchrone aanroepen, een vaste reeks foutcodes.

Verbinden

Endpoint https://nbb-mcp.be/mcp
Transport MCP streamable HTTP (één endpoint, POST + SSE). Niet het afgeschafte SSE-transport met twee endpoints.
Authenticatie Authorization: Bearer nbb_live_… bij elke aanvraag
Sessie Stateful: de server verwacht de gewone initialize-handshake.

De installatiegids per client staat op uw accountpagina, naast uw sleutel. Een aanvraag zonder sleutel krijgt 401 met een WWW-Authenticate-header; een sleutel boven de snelheidslimiet krijgt 429 met Retry-After.

Tools

search_company aanrekenbaar

Zet een bedrijfsnaam om in het Belgische ondernemingsnummer (KBO/BCE), of geef de namen die bij een nummer geregistreerd staan.

Parameter Type Verplicht Beschrijving
query string ja Een naam, een deel van een naam, of een ondernemingsnummer in welke notatie ook (0403.170.701, BE0403170701, 403170701). Een vestigingseenheidsnummer (2.xxx.xxx.xxx) geeft de onderneming waartoe ze behoort. Tolerant voor typfouten en taalonafhankelijk; nummers slaan het fuzzy zoeken over.
language string nee nl, fr, de of en. Bepaalt alleen de volgorde van de teruggegeven namen; filtert niets weg.
limit integer nee Hoeveel bedrijven teruggegeven worden. Standaard 10, maximaal 25.

Geeft terug. Kandidaten, beste match eerst: kbo_number, elke geregistreerde naam met haar type en taal (een naam van een van haar vestigingseenheden draagt het establishment_number van die eenheid), en match_score (1.0 bij een rechtstreekse treffer op nummer). Plus warnings[], dat een leeg resultaat of een mislukt mod-97-controlecijfer uitlegt.

get_annual_accounts aanrekenbaar

Haal de jaarrekening op die een bedrijf bij de NBB heeft neergelegd: balans, resultatenrekening, resultaatverwerking, sociale balans en toelichting, elke lijn met haar officiële rubriekcode en een vertaald label.

Parameter Type Verplicht Beschrijving
kbo_number string ja Belgisch ondernemingsnummer in welke notatie ook. Niet de naam — roep eerst search_company aan.
year integer nee Het kalenderjaar waarin het boekjaar eindigt. Laat weg voor de meest recente neerlegging.
language string nee Taal van de labels: nl, fr, de of en. Standaard nl. De cijfers zijn in elke taal identiek.
detail string nee Hoeveel er terugkomt: kpis voor enkel de kerncijfers en ratio's (genoeg om bedrijven te vergelijken), statements (standaard) voor elke lijn van staten en toelichting, full om daar unmapped_facts aan toe te voegen.

Geeft terug. De jaarrekening in dezelfde oproep: status "completed" met de verwerkte neerlegging in result (of, met detail kpis, de kerncijfers, ratio's en signalen in kpis), plus cached: true als ze uit de cache kwam. Een aanvraag die niet bediend kan worden, geeft status "failed" met een stabiele error {code, message}.

check_xbrl_availability aanrekenbaar

Som elke jaarrekening op die een bedrijf bij de NBB neerlegde en of ze machineleesbaar (XBRL) is of alleen als pdf bestaat — de jaren die get_annual_accounts kan leveren.

Parameter Type Verplicht Beschrijving
kbo_number string ja Belgisch ondernemingsnummer in welke notatie ook. Niet de naam — roep eerst search_company aan.
year integer nee Beperk de lijst tot één boekjaar. Laat weg om alles te tonen wat het bedrijf ooit neerlegde.

Geeft terug. Neerleggingen, nieuwste eerst, elk met fiscal_year, reference_number, model_type, deposit_type, deposit_date en xbrl_available. xbrl_available true betekent dat get_annual_accounts ze als gestructureerde gegevens levert; false betekent dat de NBB alleen een pdf heeft.

get_company_activities aanrekenbaar

Som elke NACE-activiteit op die een bedrijf op ondernemingsniveau geregistreerd heeft: code, nomenclatuurversie, classificatie en een leesbare omschrijving.

Parameter Type Verplicht Beschrijving
kbo_number string ja Belgisch ondernemingsnummer in welke notatie ook. Niet de naam — roep eerst search_company aan.
language string nee Taal van de omschrijving: nl, fr, de of en. Standaard nl. Alle vier worden geprobeerd; ontbreekt een omschrijving, dan valt ze terug op het Nederlands.

Geeft terug. Elke geregistreerde activiteit: code, nomenclatuurversie (2003, 2008 of 2025), classificatie (hoofd-, neven- of hulpactiviteit) en een omschrijving. Activiteiten die op een vestigingseenheid geregistreerd staan, zitten er niet bij, alleen die op ondernemingsniveau. Plus warnings[], dat een leeg resultaat of een taalterugval uitlegt.

get_registered_office aanrekenbaar

Haal het adres van de maatschappelijke zetel van een bedrijf op als gestructureerde velden.

Parameter Type Verplicht Beschrijving
kbo_number string ja Belgisch ondernemingsnummer in welke notatie ook. Niet de naam — roep eerst search_company aan.
language string nee nl, fr, de of en. Standaard nl. Alleen Nederlands en Frans bestaan in de brongegevens: de en en worden in het Nederlands beantwoord, en warnings zegt dat.

Geeft terug. Straat, huisnummer, bus, postcode, gemeente, land en extra info. Land is null voor Belgische adressen. Een geschrapte zetel wordt nog steeds teruggegeven, gemarkeerd in warnings[].

list_establishments aanrekenbaar

Som de vestigingseenheden op die een bedrijf momenteel operationeel heeft, elk met haar vestigingsnummer, startdatum en gestructureerd adres.

Parameter Type Verplicht Beschrijving
kbo_number string ja Belgisch ondernemingsnummer in welke notatie ook. Niet de naam — roep eerst search_company aan.
language string nee nl, fr, de of en. Standaard nl. Alleen Nederlands en Frans bestaan in de brongegevens: de en en worden in het Nederlands beantwoord, en warnings zegt dat.

Geeft terug. Elke momenteel operationele vestigingseenheid, met haar vestigingsnummer, startdatum en gestructureerd adres. Vestigingseenheden waarvan het adres geschrapt is, worden niet meegeteld. Plus warnings[], dat een leeg resultaat of een taalterugval uitlegt.

list_nace_codes niet aanrekenbaar

Doorblader de NACEBEL-activiteitennomenclatuur laag per laag, om de code te vinden die een activiteit zoals "bakkerij" omschrijft. Gratis: de enige tool die niet van uw quotum afgaat.

Parameter Type Verplicht Beschrijving
nace_code string nee De code waarvan u de onderliggende codes wilt zien, alleen cijfers en geen punten, bijvoorbeeld 47 of 4711. Laat weg om bij de afdelingen bovenaan de nomenclatuur te beginnen.
nace_version string nee Welke nomenclatuur te doorbladeren: 2025 (standaard), of 2008 of 2003 voor de oudere waaronder een bedrijf nog geregistreerd kan staan.
language string nee nl of fr, standaard nl. De KBO publiceert NACE-omschrijvingen alleen in die twee talen; de en en worden in het Nederlands beantwoord, en warnings zegt dat.

Geeft terug. nace_version, parent_code (de code waarin gedoken is, afwezig bovenaan), level (wat codes[] bevat, als division, group, class, subclass of detail) en codes[] met code, level en description. Plus warnings[], dat een terugval of een leeg resultaat uitlegt.

find_companies_by_activity aanrekenbaar

Zoek bedrijven op NACE-activiteitscode, postcode of gemeente — het omgekeerde van de tools per bedrijf. Minstens één van nace_code, zipcode of municipality is verplicht; worden er meerdere opgegeven, dan tellen ze allemaal mee, en een bedrijf komt in aanmerking zodra één van zijn adressen (maatschappelijke zetel of een vestigingseenheid) in het gebied ligt. Alleen bedrijven die nu actief zijn in het register komen terug.

Parameter Type Verplicht Beschrijving
nace_code string nee NACEBEL-activiteitscode, alleen cijfers en geen punten, bijvoorbeeld 4711, uit list_nace_codes. Op zich optioneel, maar minstens één van nace_code, zipcode of municipality moet opgegeven worden.
nace_version string nee Uit welke nomenclatuur de code komt: 2025 (standaard), 2008 of 2003.
zipcode string nee Belgische postcode, vier cijfers. Op zich optioneel, maar minstens één van nace_code, zipcode of municipality moet opgegeven worden.
municipality string nee Gemeentenaam in het Nederlands of Frans (Gent, Gand), of een van een handvol Engelse namen (Ghent, Antwerp, Brussels, Ostend, Mechlin, Tournai); wordt herleid tot de postcodes die ze bestrijkt. Op zich optioneel, maar minstens één van nace_code, zipcode of municipality moet opgegeven worden.
activity_role string nee main om enkel bedrijven terug te geven met nace_code als hoofdactiviteit, any (standaard) om ook neven- en hulpactiviteiten mee te nemen.
entity_type string nee legal voor vennootschappen en andere rechtspersonen, natural voor eenmanszaken, any (standaard).
location_match string nee Welk adres in de gezochte plaats moet liggen: seat (maatschappelijke zetel), establishment (een vestigingseenheid) of any (standaard).
page integer nee Pagina om terug te geven, tellend vanaf 1. Standaard 1.
page_size integer nee Bedrijven per pagina. Standaard 10, maximum 100.
language string nee nl, fr, de of en. Bepaalt alleen welke geregistreerde naam getoond wordt; heeft geen invloed op welke bedrijven overeenkomen.

Geeft terug. filters (met nace_code, nace_version, zipcodes[] — de postcodes die echt doorzocht zijn, zo komt een gemeentenaam terug — municipality, activity_role, entity_type en location_match), page, page_size, has_more en companies[]: kbo_number, name, entity_type, legal_form, start_date, main_activities[], matched_activity_role, match_source (enterprise of establishment), seat_zipcode en matched_zipcode. Geen totaal: elke treffer tellen kost een tweede doorloop en zegt wie één pagina leest niets bruikbaars. Plus warnings[].

Hoe lang een aanroep duurt

get_annual_accounts antwoordt in de aanroep zelf: een neerlegging ophalen betekent de Nationale Bank aanroepen, de neerlegging downloaden en XBRL verwerken, en dat gebeurt allemaal terwijl uw client wacht.

Een nieuwe neerlegging duurt meestal enkele seconden, af en toe tot een minuut wanneer de Nationale Bank traag is. Wacht op het antwoord in plaats van opnieuw te proberen — opnieuw proberen is een tweede aanrekenbare aanroep voor hetzelfde werk.

Een neerlegging die al eens is opgehaald, komt onmiddellijk terug met status: "completed" en cached: true. Resultaten worden per neerlegging bewaard en verlopen nooit, want een neergelegde jaarrekening verandert niet meer — een correctie is een nieuwe neerlegging met haar eigen referentie, en die pikt de server op.

Foutcodes

Een mislukte aanroep van get_annual_accounts draagt error.code, en die strings staan vast — een client mag erop vertakken.

Code Betekenis Wat te doen
no_accounts_found De NBB heeft voor dit bedrijf geen aanvaarde neerlegging, of geen voor het jaar dat u vroeg. De boodschap somt de jaren op die wel bestaan. Probeer opnieuw met een van de jaren uit de boodschap, of zeg de gebruiker dat er niets te tonen is. Dezelfde aanvraag opnieuw doen helpt niet.
pdf_fallback_required De neerlegging bestaat, maar alleen als pdf (oudere of niet-gestandaardiseerde neerleggingen), of in een taxonomieversie die deze server nog niet kan koppelen. Pdf-neerleggingen met een LLM lezen is in de maak en nog niet beschikbaar. Roep check_xbrl_availability aan om de jaren te vinden die wel machineleesbaar zijn, en zeg de gebruiker dat de neerlegging bestaat maar nog niet gelezen kan worden.
nbb_unavailable De dienst van de Nationale Bank was onbereikbaar of antwoordde 429/5xx, ook na onze eigen nieuwe pogingen. Tijdelijk. Over een paar minuten opnieuw proberen is de moeite — dit is de enige code waarvoor dat geldt.
nbb_error De NBB antwoordde, maar met iets onbruikbaars (een 4xx die geen ontbrekend formaat is). Niet opnieuw proberen. Meld de boodschap; herhaalt ze zich voor een bedrijf dat een jaarrekening hoort te hebben, dan is het een fout aan onze kant.
deposit_unreadable De neerlegging is gedownload, maar kon niet als XBRL verwerkt worden. Dezelfde vraag opnieuw stellen is redelijk; blijft het mislukken, dan is de neerlegging zelf het probleem.
nbb_not_configured Deze instantie heeft geen NBB-abonnementssleutel geconfigureerd. Een client kan hier niets aan doen; het betekent dat de installatie onvolledig is.

Fouten die geen mislukte aanroep zijn

Verkeerde invoer en een opgebruikt quotum komen terug als tool-fout (MCP isError: true) met een verklarende boodschap, en niet als een failed-resultaat — er is geen vaste code om op te vertakken, alleen iets wat het model kan verbeteren of melden.

Situatie Antwoord
Maandquotum bereikt Tool-fout die de limiet noemt en waar u kunt overschakelen (/pricing). De geweigerde aanroep zelf wordt geregistreerd maar niet aangerekend.
Neerlegging die alleen als pdf bestaat De aanroep mislukt met pdf_fallback_required: pdf-neerleggingen met een LLM lezen is in de maak en nog niet beschikbaar. check_xbrl_availability toont welke jaren machineleesbaar zijn.
Geen geldig ondernemingsnummer Tool-fout die het probleem noemt en search_company voorstelt.
Ontbrekende of ongeldige API-sleutel HTTP 401, voor MCP de aanvraag ziet.
Te veel aanvragen HTTP 429 met Retry-After, bij 30 aanvragen per minuut (burst 10) per sleutel.

Limieten

Limiet Waarde
Aanvragen per minuut per sleutel 30
Burst 10

Tijdens de alfa geldt er geen maandquotum: aanroepen worden geteld, nooit geweigerd. De rate limit per sleutel hierboven blijft, want die beschermt de gegevensbron en niet de omzet. Welke quota bij de start gelden, ligt nog niet vast.

De result-JSON

Elk afgerond resultaat van get_annual_accounts heeft dezelfde vorm:

Veld Inhoud
meta Identificatiegegevens, taal van de neerlegging en van het antwoord, modeltype, taxonomieversie, data_source, confidence, caveats, en de data van het huidige en het vorige boekjaar.
identification Naam, adres en rechtsvorm zoals neergelegd.
statements[] Vaste id's balance_sheet_assets, balance_sheet_liabilities, income_statement, appropriation, social_balance; lijnen zijn {code, label, level, current, previous}.
notes[] De toelichtingssecties van de neerlegging, met dezelfde lijnvorm.
unmapped_facts[] Feiten die we niet aan een rubriekcode konden koppelen, teruggegeven met detail full (de standaard, statements, telt ze enkel in meta.unmapped_fact_count). Nooit leeg uit gemakzucht en nooit stilzwijgend weggelaten — ontbreekt er iets in de staten, dan staat het hier.

Talen

language aanvaardt nl, fr, de en en, en staat standaard op nl. De labels komen uit de taxonomielabellinkbases van de Nationale Bank zelf, niet uit een vertaalmachine, zodat ze overeenkomen met de woorden op de officiële formulieren.

Ontbreekt een label in de gevraagde taal, dan valt het antwoord terug in deze orde: gevraagde taal → de taal waarin de neerlegging is ingediend → nl → fr → en. De cijfers veranderen nooit met de taal, en meta.response_language zegt wat u werkelijk gekregen hebt.

De website zelf verschijnt in het Nederlands, Frans en Engels. Hij volgt de taalvoorkeur van uw browser; de taalkiezer in de navigatie overschrijft die voor de pagina waar u op staat, en van die keuze wordt niets bewaard.

Gegevensbronnen en voorbehouden

meta.data_source zegt hoe een resultaat tot stand kwam, en dat is het veld dat u leest voor u een getal vertrouwt:

data_source Wat het betekent Betrouwbaarheid
xbrl Verwerkt uit de XBRL-instantie die het bedrijf neerlegde. Cijfers en rubriekcodes zijn precies wat er neergelegd is. Authentiek
pdf_llm Voorbehouden voor neerleggingen die door een LLM uit een pdf in dezelfde JSON-vorm gelezen zijn. Die functie is in de maak: geen enkel resultaat draagt deze waarde vandaag, en een neerlegging die alleen als pdf bestaat, mislukt met <code>pdf_fallback_required</code>. Heuristisch — meta.confidence zal een balanscontrolescore dragen en meta.caveats zal zeggen dat de cijfers uit een document gelezen zijn.

Bekende voorbehouden