Skip to content
VAT API
new New numbers race every source in parallel

Validate EU VAT numbers. Even when VIES is down.

Numbers we know come back instantly. New ones race VIES REST, VIES SOAP, the Belgian KBO and two fallback providers in parallel, and you get the first definitive answer. Free.

  • up to 5 sources in parallel
  • first definitive answer wins
  • instant answers for known numbers
  • every source reported

Check a number now

No signup needed

Try 10 free checks per day · 10 left

How it works

A race, not a queue

Calling VIES alone means you inherit its bad days. Trying fallbacks one after another means every failure costs a timeout. Racing removes both problems.

See the race explained
  1. VIES (REST)

    Can confirm valid and invalid
    VIES (REST): busy (MS_MAX_CONCURRENT_REQ), finished after the response.
  2. VIES (SOAP)

    Can confirm valid and invalid
    VIES (SOAP): valid · first definitive answer.
  3. KBO Public Search

    Can only confirm valid
    KBO Public Search: valid · confirms, finished after the response.
  4. vatcomply

    Can confirm valid and invalid
    vatcomply: valid · agrees, finished after the response.
  5. controleerbtwnummer.eu

    Can only confirm valid
    controleerbtwnummer.eu: valid · agrees, finished after the response.
  6. KBO open data

    Register lookup, no VAT verdict
    KBO open data: found · adds register details.
first definitive answer finished later, merged error background, after the response Illustration, not to scale
  1. t = 0

    Everything starts at once

    VIES REST, VIES SOAP, the KBO (for Belgian numbers), vatcomply and controleerbtwnummer.eu are called in parallel. No waiting for one to time out before trying the next.

  2. first

    The first definitive answer wins

    As soon as one source can decide, you get the response. A source that can only confirm valid numbers is never allowed to call a number invalid.

  3. after

    The rest keep working

    Slower sources finish in the background. Their answers fill in names and addresses, and verify the verdict. Disagreements are flagged as conflict.

  4. cached

    Instant on repeat

    Numbers checked before are answered from storage straight away, with the source and date. Older than 24 hours? You still get it instantly, flagged stale, while a fresh race runs in the background.

Sources

Every source, one answer, full transparency.

Every response lists what each source did: answered, failed with which error, skipped and why, or still running when we answered you. No black box.

All about the sources
  • VIES (REST)

    vies_rest

    Can confirm valid and invalid

    VIES is the European Commission's VAT Information Exchange System. It does not hold data itself: it forwards each question to the national tax administration of the member state, live.

  • VIES (SOAP)

    vies_soap

    Can confirm valid and invalid

    The same VIES service through its older SOAP interface. Because it is a separate endpoint, it sometimes answers while the REST one reports errors, and the other way around.

  • KBO Public Search

    kbo_ws

    Can only confirm valid Belgium only

    The web service of the Crossroads Bank for Enterprises, the official Belgian business registry. It confirms whether an enterprise has an active VAT liability.

  • vatcomply

    vatcomply

    Can confirm valid and invalid VIES wrapper

    A free third-party API that queries VIES on its own infrastructure, with its own caching.

  • controleerbtwnummer.eu

    controleerbtwnummer

    Can only confirm valid

    A third-party validation service. We only use it to confirm valid numbers.

  • KBO open data

    kbo_open_data

    Register lookup, no VAT verdict Belgium only

    The open data extract of the Belgian business registry (KBO/BCE). We import it into our own database every day around 07:00 Brussels time, so it never depends on a remote service.

Developer experience

One GET request

Bearer token, JSON back. Messy input like BE 0684.579.082 is fine. Errors always have the same shape, rate limits come with headers.

  • valid is true, false or null, never a guess
  • served_from says live, cache or stale cache
  • sources[] shows every lane of the race
  • OpenAPI 3.1 spec at /openapi.json
curl -H "Authorization: Bearer $VAT_API_KEY" \
  "https://vatapi.be/api/v1/vat/BE0684579082"

Pricing

Free

No credit card, no password, no trial that runs out. Sign in with your email and you have a key.

Get a free API key
Per minute
60
Per day
5,000
Sources per lookup
up to 5
Cost
€0

Questions

Is a result from a fallback provider as good as VIES?

Fallback providers query VIES themselves and may cache. Every response lists what each source said and which one decided, so you can apply your own policy. Sources that can only confirm validity are never allowed to mark a number invalid.

Why race instead of trying sources one by one?

VIES regularly answers "busy" or times out for a member state. In a sequential chain, every failure costs you its full timeout before the next source is tried. Racing starts them all at once, so a slow or failing source no longer delays your answer.

What does stale mean?

A stored result older than 24 hours. It is returned immediately, flagged stale: true with its check date, and a background job races all sources to refresh it. Add fresh=1 to wait for a live answer instead.

Can I get proof of a check?

Pass your own VAT number as requester and VIES returns a consultation number, the official proof that you verified the number.

Which countries are covered?

All EU member states plus Northern Ireland (XI). The UK is not covered by VIES and returns a clear 422.

What do you store?

Your email, your checks and the latest known result per VAT number. The privacy page has the details and how to delete everything.

More answers, and how this compares to calling VIES yourself: Compare & FAQ.