Documentation
Three tools, synchronous calls, a stable set of error codes.
Connecting
The client-by-client setup guide is on your account page, next to your key. A request without a key gets 401 with a WWW-Authenticate header; a key over the rate limit gets 429 with Retry-After.
How long a call takes
get_annual_accounts answers in the call itself: fetching a filing means calling the National Bank, downloading the deposit and parsing XBRL, and all of that happens while your client waits.
A fresh filing usually takes a few seconds, occasionally up to a minute when the National Bank is slow. Wait for the answer rather than retrying — a retry is a second billable call for the same work.
A filing that has been fetched before comes back instantly with status: "completed" and cached: true. Results are cached per deposit and never expire, because a filed annual account is immutable — a correction is a new deposit with its own reference, and that is what the server picks up.
Error codes
A failed get_annual_accounts call carries error.code, and these strings are stable — a client may branch on them.
Errors that are not failed calls
Bad input and an exhausted quota come back as a tool error (MCP isError: true) with an explanatory message rather than as a failed result — there is nothing with a stable code to branch on, only something for the model to fix or report.
Limits
Quotas reset on the 1st of each month.
During the alpha the monthly quotas are not enforced — calls are counted, never refused. The per-key rate limit stays.
The result JSON
Every completed get_annual_accounts result has the same shape:
Languages
language accepts nl, fr, de and en, and defaults to nl. Labels come from the National Bank's own taxonomy label linkbases, not from a translation engine, so they match the wording on the official forms.
If a label is missing in the language you asked for, the response falls back in order: requested language → the language the filing was submitted in → nl → fr → en. The figures never change with the language, and meta.response_language tells you what you actually got.
The website itself is published in Dutch, French and English. It follows your browser's language preference; the switcher in the navigation overrides it for the page you are on, and nothing about that choice is stored.
Data sources and caveats
meta.data_source says how a result was produced, and it is the field to read before trusting a number:
Known caveats
- Only filings the National Bank has accepted are served. A deposit that was corrected later resolves to the correction, not the original.
- Company-name search uses the KBO/BCE open-data denomination file, refreshed monthly. A company registered in the last few weeks may be findable by number before it is findable by name.
- Several companies can share a name.
search_company returns candidates with a match score and expects the caller to disambiguate rather than guess.
- Older filings use earlier taxonomy generations. Where a generation is not yet mapped, the response says so (
pdf_fallback_required) instead of returning partial figures.
- This service is not affiliated with the National Bank of Belgium and adds no interpretation: what is filed is what you get, including any errors the filer made.