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
There is no monthly quota in force during the alpha: calls are counted, never refused. The per-key rate limit above stays, because it protects the data source rather than revenue. The quotas that apply at launch are not decided yet.
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.