Reference data KBO/BCE NBB Peppol Addresses Belgium VIES Code lists LEI VAT rates
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;
  • the VAT rates of the 27 EU member states, since 2016, with what each reduced rate applies to;
  • the Legal Entity Identifiers of companies worldwide, with their legal form and group structure;
  • 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 DirectoryVIESGLEIF · LEITEDBEN 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. The VAT rates of the EU member states come from the Commission's Taxes in Europe Database.

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. The current release is served by default; the older releases of the EN 16931 lists (Genericode, since 2021) are kept, so you can check an older invoice with version. 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}?version={version}&q={text}&state={state} GET /api/v1/code-lists/{listId}/code?value={code}&version={version} GET /api/v1/code-lists/{listId}/versions
OpenAPI specification →

EU VAT rates

TEDB · European Commission

The VAT rates of the 27 member states from the Taxes in Europe Database, as each Ministry of Finance provides them, mirrored daily: standard, reduced, super-reduced and parking rates, exemptions, with the TEDB category, the CN (goods) and CPA (services) codes and the member state's comment of each rate. Ask for any date since 1 January 2016: you get the situation in force then. Greece is EL. Served as published; the Commission and the member states accept no responsibility for this information.

GET /api/v1/vat-rates?country={code}&date={date} GET /api/v1/vat-rates?country={code}&cnCode={code} GET /api/v1/vat-rates/situations?country={code} GET /api/v1/vat-rates/categories
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. Legal Entity Identifiers come live from GLEIF.

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 →

Legal Entity Identifiers

GLEIF · ISO 17442 · ISO 20275

The LEI of any company in the world, read live from GLEIF: legal name and addresses, registration authority and identifier (a Belgian company is found by its enterprise number), ISO 20275 legal form with its names, registration status and next renewal date, and its group: direct and ultimate parents, children, or the published reason why no parent is reported. Plus the ISO 20275 list of legal forms by country. Data under CC0. A Belgian enterprise record also carries its LEIs.

GET /api/v1/leis/{lei} GET /api/v1/leis?name={text}&country={code} GET /api/v1/leis/{lei}/direct-parent GET /api/v1/leis/{lei}/direct-children GET /api/v1/entity-legal-forms?country={code}
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":{}}}
        curl https://publicapi.axitam.net/api/v1/leis/549300CWRXC5EP004533
        
        # {"lei":"549300CWRXC5EP004533","entity":{"legalName":{"name":"PROXIMUS","language":"nl"},"registeredAt":"RA000025",
        #   "registeredAs":"0202.239.951","legalForm":{"code":"R85P","names":[...]},...},"registration":{"status":"ISSUED",...}}
        curl "https://publicapi.axitam.net/api/v1/vat-rates?country=BE&type=STANDARD"
        
        # [{"country":"BE","requestedDate":"2026-09-28","situationDate":"2026-07-01",
        #   "rates":[{"type":"STANDARD","rateType":"DEFAULT","value":21.0,"category":null,...}]}]

        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"}
        curl -i https://publicapi.axitam.net/api/v1/leis/549300CWRXC5EP004534
        
        # HTTP/2 400 (the last two digits check the others)
        # {"code":"INVALID_LEI","correlationId":"54046f8d-6bc9-44bf-b4fe-ea4377737f97"}
        curl -i "https://publicapi.axitam.net/api/v1/vat-rates?country=GR"
        
        # HTTP/2 400 (Greece is EL in TEDB)
        # {"code":"VAT_COUNTRY_NOT_SUPPORTED","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), 5 per second on the LEI paths (the GLEIF API is shared). 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, gleif, tedb-vat-rates
        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 search, LEIskbo-open-data, nbb-cbso, peppol-directory, best-address, photon, gleif
        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
        lei.publicapi.axitam.netLegal Entity Identifiers and ISO 20275 legal forms (GLEIF, live)gleif
        vat.publicapi.axitam.netEU VAT rates (TEDB, mirrored daily)tedb-vat-rates

        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