Reference data KBO/BCE NBB Peppol Addresses Belgium VIES Code lists
BETA

AXITAM Public API

Ready-to-use data for your applications, free, in JSON:

  • countries, subdivisions, currencies, languages, scripts and regions, how they relate, translated into dozens of languages;
  • the euro exchange reference rates of the European Central Bank, since 1999;
  • every Belgian enterprise, to fill in and check forms;
  • the annual accounts Belgian enterprises deposit at the National Bank;
  • every Belgian address, to autocomplete and validate forms;
  • any place or address in the world, searched as the user types;
  • EU VAT numbers checked live in VIES, with the consultation number that proves the check;
  • the code lists of European e-invoices (EN 16931) and of the Peppol network;
  • who receives electronic invoices on the Peppol network, worldwide.

ISO 3166-1 · ISO 3166-2 · ISO 3166-3 · ISO 4217 · ISO 639-3 · ISO 639-5 · ISO 15924 · UN M49KBO/BCE Open Data · NACE-BELNBB Central Balance Sheet OfficeECB reference ratesBeSt AddressOpenStreetMap · PhotonPeppol DirectoryVIESEN 16931 · Peppol code listsupdated daily

Explore the APIs

Simple JSON over HTTPS, read-only, no SDK required. Pick a region, change the example values and send: you see the request, then the live answer. Every API has its own OpenAPI specification.

🌐 General reference data

International standards: countries, currencies, languages, scripts and regions, how they relate, translated into dozens of languages with lang, and the euro exchange rates of the ECB. The code lists of e-invoices (EN 16931, Peppol), as their publishers publish them.

Countries

ISO 3166-1 / 3166-2 / 3166-3

Countries by alpha-2, alpha-3 or numeric code, their subdivisions (regions, provinces...), the currencies and languages used there, and former countries.

GET /api/v1/countries/{code} GET /api/v1/countries/{code}/subdivisions GET /api/v1/countries/{code}/currencies GET /api/v1/countries/{code}/languages GET /api/v1/former-countries
OpenAPI specification →

Currencies

ISO 4217

Active currencies with their decimal digits and cash rounding, looked up by alphabetic code (EUR) or numeric code (978), and the countries using each one.

GET /api/v1/currencies GET /api/v1/currencies/{code} GET /api/v1/currencies/{code}/countries
OpenAPI specification →

Exchange rates

European Central Bank · euro reference rates

The euro foreign exchange reference rates of the ECB, mirrored every working day after its publication (around 16:00 CET): daily rates since 1999 and the monthly, quarterly and annual averages the ECB publishes. 1 EUR = rate units of the currency, exactly as published - no inverse, no cross rate. A day without publication (weekend, TARGET holiday) answers 404, or with onOrBefore=true the previous publication with its real date. Source: ECB statistics; the ECB publishes these rates for information only and discourages using them for transactions.

GET /api/v1/exchange-rates/latest GET /api/v1/exchange-rates?date={day}&onOrBefore=true GET /api/v1/exchange-rates/{currency}/daily?from={day}&to={day} GET /api/v1/exchange-rates/{currency}/averages?frequency=M|Q|A GET /api/v1/exchange-rates/currencies
OpenAPI specification →

Languages

ISO 639-3 / 639-5

Over 7,900 languages with filters (scope, type, 639-1 code), lookup by 639-1, 639-3 or 639-2/B code, the countries where each is spoken (official status, share of the population), and language families.

GET /api/v1/languages?hasAlpha2=true GET /api/v1/languages/{code} GET /api/v1/languages/{code}/countries GET /api/v1/language-families
OpenAPI specification →

Scripts

ISO 15924

Writing systems (Latin, Cyrillic, Arabic, Han...) by four-letter code in any case or by numeric code.

GET /api/v1/scripts GET /api/v1/scripts/{code}
OpenAPI specification →

Regions

UN M49

The World, continents and sub-regions (Western Europe, Eastern Africa...) as a tree, and every country within a region, sub-regions included.

GET /api/v1/regions GET /api/v1/regions/{code} GET /api/v1/regions/{code}/countries
OpenAPI specification →

E-invoicing code lists

EN 16931 · Peppol

The code lists behind EN 16931 and Peppol BIS e-invoices, as published and mirrored daily: tax categories (UNCL 5305), VAT exemption reasons (VATEX), payment means, units of measure, document types, electronic address and identifier schemes from the European Commission, and the Peppol document types, participant identifier schemes and processes from OpenPeppol. Only the current release is served; every answer gives its version, so you can record it with the code you use.

GET /api/v1/code-lists GET /api/v1/code-lists/{listId}?q={text}&state={state} GET /api/v1/code-lists/{listId}/code?value={code}
OpenAPI specification →

🌍 Worldwide search

Sources that cover every country, queried live: places and addresses from OpenStreetMap, and who receives e-invoices on the Peppol network. EU VAT numbers are checked live in VIES, the European Commission's system.

Address search

OpenStreetMap · Photon (ODbL)

Free-text search of places and addresses anywhere in the world, as the user types: houses, streets, cities... best first, with their type and WGS84 position. Bias the results towards the user with lat and lon (both together), or restrict them to a country. The names come in the language asked when the instance knows it; the answer says which language was applied. A Belgian house also carries its best match: the official BeSt identifier to read with the Belgian addresses API, or a status saying why there is none.

GET /api/v1/addresses/search?q={text}&countryCode={code}&lang={lang} GET /api/v1/addresses/search?q={text}&lat={lat}&lon={lon}
OpenAPI specification →

Peppol participants

Peppol Directory · ISO 6523 identifiers

Who receives electronic invoices and other documents on the Peppol network, worldwide (8 million participants): search by name, country or identifier, read a participant with the business entities behind it and the document types it accepts. Queried live in the Peppol Directory. Check your customer before sending an e-invoice. Belgian enterprises get a shortcut by enterprise number in the Belgium tab, and their record already carries it. Each document type also carries its codeList name and state from the Peppol code lists.

GET /api/v1/peppol/participants?name={text}&country={code} GET /api/v1/peppol/participants/{participantId}
OpenAPI specification →

EU VAT numbers

VIES · European Commission

Checks an EU VAT number live in VIES, which asks the member state's register: valid or not, the name and address the state publishes and, when you give your own VAT number as requester, the VIES consultation number that proves the check. Greece is EL, Northern Ireland XI; the number may be typed with its country prefix, spaces or dots. Every call is a new check, nothing is stored.

GET /api/v1/vat-numbers/{countryCode}/{vatNumber} GET /api/v1/vat-numbers/{countryCode}/{vatNumber}?requesterCountryCode={code}&requesterVatNumber={number} GET /api/v1/vat-numbers/member-states

No test form here: VIES may only be used to confirm the VAT numbers of your own customers and suppliers, and its answer is neither legal advice nor by itself a right to a VAT exemption (VIES disclaimer).

OpenAPI specification →

πŸ‡§πŸ‡ͺ Belgium

Everything about Belgium lives under /api/v1/bel/: enterprises from the KBO/BCE, their annual accounts at the National Bank, and the official address registers.

Enterprises

KBO/BCE Open Data · NACE-BEL

Every enterprise registered in the Crossroads Bank for Enterprises. Type a VAT or enterprise number as your users do (any form), validate it (check digits, registered, active), or let them pick from an autocompletion on the name; then read names, juridical form, addresses, contacts, activities, establishment units and branches, and the KBO code lists for your drop-downs. The record also says whether the enterprise receives Peppol e-invoices.

GET /api/v1/bel/enterprises/{number} GET /api/v1/bel/enterprises/{number}/validation GET /api/v1/bel/enterprises?name={text} GET /api/v1/bel/enterprises/{number}/establishments GET /api/v1/bel/kbo-codes/{category} GET /api/v1/bel/enterprises/{number}/peppol
OpenAPI specification →

Annual accounts

NBB Central Balance Sheet Office

The annual accounts every Belgian enterprise deposits at the National Bank of Belgium: the list of deposits (financial year, model, language) of the last three years, and the documents (PDF, XBRL, JSON) relayed from the NBB. Ask once for history=complete to fetch every deposit since 1978 (a few seconds the first time).

GET /api/v1/bel/enterprises/{number}/annual-accounts GET /api/v1/bel/enterprises/{number}/annual-accounts?history=complete GET /api/v1/bel/annual-accounts/{reference} GET /api/v1/bel/annual-accounts/{reference}/pdf
OpenAPI specification →

Addresses

BeSt Address · BOSA and the three regions (CC BY 4.0)

Autocomplete a Belgian address in three guided calls - municipality (by postal code or name), street, house number and box - then read the full address with its official BeSt identifier, its WGS84 position, its status and its validity dates. Identifiers are the regional URIs BeSt publishes: pass them back exactly as received. No wildcard is needed (nor accepted): the text typed matches the beginning of a word or any part of the name, in any language. Queried live in the federal and regional address registers.

GET /api/v1/bel/addresses/municipalities?q={text} GET /api/v1/bel/addresses/streets?postCode={code}&name={text} GET /api/v1/bel/addresses/house-numbers?streetId={id}&houseNumber={digits} GET /api/v1/bel/addresses?id={addressId}

        OpenAPI specification →

        Getting started

        No sign-up, no key needed: send a request and get JSON back. A free developer account raises your limits.

        1Call an endpoint

        All endpoints live under https://publicapi.axitam.net/api/v1. The EU VAT number checks live on https://vies.publicapi.axitam.net/api/v1 only.

        curl https://publicapi.axitam.net/api/v1/countries/BE
        
        # {"alpha2":"BE","alpha3":"BEL","numeric":"056","name":"Belgium",
        #  "officialName":"Kingdom of Belgium","commonName":null,"flag":"πŸ‡§πŸ‡ͺ"}
        curl https://publicapi.axitam.net/api/v1/bel/enterprises/0420.254.973
        
        # {"enterpriseNumber":"0420.254.973","vatNumber":"BE0420254973","status":{"code":"AC",...},
        #  "denominations":[{"value":"AXITAM",...}],"addresses":[...],"activities":[...]}
        curl https://publicapi.axitam.net/api/v1/bel/enterprises/0420.254.973/annual-accounts
        
        # {"enterpriseNumber":"0420254973","historyComplete":false,"annualAccounts":[{"referenceNumber":"2025-00555958",
        #   "depositDate":"2025-10-31","exerciseStart":"2024-01-01","exerciseEnd":"2024-12-31","modelType":"m87-f",...}]}
        curl https://publicapi.axitam.net/api/v1/peppol/participants/0208:0420254973
        
        # {"participantId":{"scheme":"iso6523-actorid-upis","value":"0208:0420254973"},
        #  "entities":[{"names":[{"name":"AXITAM"}],"countryCode":"BE",...}],"documentTypes":[...]}
        curl "https://publicapi.axitam.net/api/v1/bel/addresses/streets?postCode=1000&name=loi"
        
        # [{"streetId":"https://databrussels.be/id/streetname/1679/1","name":{"nl":"Wetstraat","fr":"Rue de la Loi","de":null},
        #   "municipality":{"municipalityId":"https://databrussels.be/id/municipality/21004/7","nisCode":"21004","name":{...}}},...]
        curl "https://publicapi.axitam.net/api/v1/addresses/search?q=rue%20de%20la%20loi%2016%20bruxelles&countryCode=BE&lang=fr"
        
        # {"query":"rue de la loi 16 bruxelles","language":"fr","results":[{"label":"Rue de la Loi 16, 1000 Bruxelles, Belgique",
        #   "type":"house","street":"Rue de la Loi","houseNumber":"16","postCode":"1000","city":"Bruxelles","countryCode":"BE",...}]}
        curl https://vies.publicapi.axitam.net/api/v1/vat-numbers/member-states
        
        # {"available":true,"memberStates":[{"countryCode":"AT","availability":"AVAILABLE"},
        #   {"countryCode":"BE","availability":"AVAILABLE"},...,{"countryCode":"XI","availability":"AVAILABLE"}]}
        curl "https://publicapi.axitam.net/api/v1/code-lists/en16931-5305/code?value=AE"
        
        # {"listId":"en16931-5305","listVersion":"2026-05-15",
        #  "code":{"code":"AE","name":"VAT Reverse charge","remark":"VAT reverse charge","attributes":{}}}

        2Get names in your language

        Add lang with a language tag (fr, nl-BE, pt-BR, ja...). A regional variant falls back to its language, then to English.

        curl "https://publicapi.axitam.net/api/v1/countries/BE?lang=nl-BE"     # "name":"BelgiΓ«"
        curl "https://publicapi.axitam.net/api/v1/countries/BE/subdivisions?lang=fr"
        curl "https://publicapi.axitam.net/api/v1/currencies/978?lang=fr"      # "name":"Euro"
        curl "https://publicapi.axitam.net/api/v1/languages/fr?lang=fr"        # "name":"FranΓ§ais"
        curl "https://publicapi.axitam.net/api/v1/scripts/Latn"

        3Handle errors

        Errors use standard HTTP status codes (400 for an invalid code, 404 for an unknown one, 429 beyond your usage limit) and always the same body: a stable error code and a correlationId to quote when you contact us.

        curl -i https://publicapi.axitam.net/api/v1/countries/ZZ
        
        # HTTP/2 404
        # {"code":"COUNTRY_NOT_FOUND","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i https://publicapi.axitam.net/api/v1/bel/enterprises/123
        
        # HTTP/2 400
        # {"code":"INVALID_ENTERPRISE_NUMBER","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i https://publicapi.axitam.net/api/v1/peppol/participants/0208:0999999922
        
        # HTTP/2 404
        # {"code":"PEPPOL_PARTICIPANT_NOT_FOUND","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i "https://publicapi.axitam.net/api/v1/bel/addresses/streets?postCode=1000&name=lo*"
        
        # HTTP/2 400
        # {"code":"INVALID_REQUEST","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i "https://publicapi.axitam.net/api/v1/addresses/search?q=paris&lat=48.85"
        
        # HTTP/2 400 (lat without lon)
        # {"code":"INVALID_ARGUMENT","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i https://vies.publicapi.axitam.net/api/v1/vat-numbers/GR/123456789
        
        # HTTP/2 400 (Greece is EL in VIES)
        # {"code":"VAT_COUNTRY_NOT_SUPPORTED","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i https://publicapi.axitam.net/api/v1/code-lists/en16931-9999
        
        # HTTP/2 404
        # {"code":"CODE_LIST_NOT_FOUND","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}

        4Send your API key

        Anonymous calls are limited per IP address. With a free developer account, send your key in the X-API-Key header: the limits then apply per key, and are higher (see Usage limits).

        curl -H "X-API-Key: pk_live_..." https://publicapi.axitam.net/api/v1/data-sources
        
        # X-RateLimit-Limit: 30
        # an unknown or revoked key: HTTP 401 {"code":"INVALID_API_KEY",...}

        Documentation

        Browse every endpoint interactively, or import an OpenAPI specification into your tools to generate a client.

        Usage limits and one host per source

        The API is free to use without a key. To keep it fast for everyone, each client (IP address) is limited: 10 requests per second with bursts of 20 on every path, 2 per second on the Peppol paths (the Peppol Directory's own limit), 1 per second when an annual-account document is relayed from the NBB, 5 per second on the worldwide address search (the public Photon instance asks for a reasonable use), 2 per second on the EU VAT number checks (VIES limits concurrent requests). A request beyond the limit gets HTTP 429 with the error code RATE_LIMITED and a Retry-After header; every limited response carries X-RateLimit-Limit and X-RateLimit-Remaining.

        Need more? Create a free developer account (e-mail confirmation, then a short manual approval), subscribe to the free plan and send your API key in the X-API-Key header: 30 requests per second with bursts of 60 on every host, per key rather than per IP address. The path limits above still apply; an unknown or revoked key is refused with 401 INVALID_API_KEY.

        Get an API key

        Each source is also served alone on its own host, with the same paths and formats:

        HostWhat it servesData sources
        publicapi.axitam.netEverything below but the EU VAT number checks, on one hostiso-codes, cldr, ecb-exchange-rates, kbo-open-data, nbb-cbso, peppol-directory, best-address, photon, en16931-code-lists, peppol-code-lists
        cbe.publicapi.axitam.netBelgian enterprises (KBO/BCE)kbo-open-data
        nbb.publicapi.axitam.netBelgian annual accounts (NBB)nbb-cbso
        peppol.publicapi.axitam.netPeppol participants (live)peppol-directory
        be.publicapi.axitam.netEverything Belgian: enterprises, annual accounts, Peppol, addresses, address searchkbo-open-data, nbb-cbso, peppol-directory, best-address, photon
        address.publicapi.axitam.netBelgian addresses and worldwide address search (BeSt Address, Photon, live)best-address, photon
        refdata.publicapi.axitam.netCountries, currencies, languages, scripts, regions, exchange ratesiso-codes, cldr, ecb-exchange-rates
        vies.publicapi.axitam.netEU VAT number checks (VIES, live), on this host onlyvies
        codelists.publicapi.axitam.netE-invoicing code lists (EN 16931, Peppol)en16931-code-lists, peppol-code-lists

        Public beta

        The AXITAM Public API is in beta: it is available and kept up to date, but endpoints and response formats may still evolve before version 1.0. More reference data (VAT codes of other countries, phone number validation...) is on the way.

        Questions, ideas or feedback? We would love to hear from you.

        Contact AXITAM