The EU VAT Check API tells you whether any EU VAT number is a valid registration
Send a VAT number and get back valid or not, plus the registered name and address where the country shares them, from the European Commission's VIES registry. 2 credits, charged only when the number is valid.

2
Credits per valid number
about $0.01 on Starter
0
Credits when not valid
or when a country is down
27
Countries covered
plus Northern Ireland
VIES
The EU's own registry
answered by each tax office
A VAT number comes back as the tax office's own answer in one flat record
The answer comes from the EU's own VAT registry
Every check goes through VIES, the registry run by the European Commission, and is answered by the tax authority of the country that issued the number, so the result is the official one and not a copy that has aged in a database.
- Asked when you send the number
- Answered by the issuing country's tax office
- All 27 member states
- Northern Ireland with the XI prefix
The registered name and address come back where the country shares them
Some countries share the business name and address and some share only a yes or no. You get the name and address whenever they exist, and a clear flag when a country keeps them back, so a blank is never a mystery.
- Registered name
- Registered address on one line
- A flag for fields a country does not share
- Never a placeholder dash
A country that is down is never reported as not valid
A tax office that is slow or offline says nothing about the number. The check is retried once, and if the country still does not answer you get a retry-later response at no charge, never a false not valid on a real supplier.
- One automatic retry
- Retry-later response, 0 credits
- Outages are never saved as answers
- Other countries keep working
A mistyped number is caught before it costs anything
The country prefix and the shape of the number for that country are tested before the registry is called, so a wrong length or a misplaced letter is refused with an example of the right shape, in the API, the dashboard and bulk jobs.
- Prefix and shape tested first
- Clear error with an example
- Invalid CSV rows fail without a charge
- Spaces, dots and dashes are fine
Greece, Northern Ireland and Great Britain are handled for you
Greece files under EL and GR is rewritten for you. Northern Ireland uses XI. Great Britain left the EU VAT system in 2021, so a GB number is refused with a plain explanation instead of being sent to a registry that cannot answer.
- GR accepted, sent as EL
- XI for Northern Ireland
- GB refused with the reason
- No charge for a refused number
A number that is not valid costs nothing
You are charged 2 credits only when the registry says the number is a valid registration. A number it does not list, a typo and a country that did not answer cost 0, and that holds for bulk CSV jobs as well as the API.
- Zero credits when not valid
- Bulk CSV with a vat_number column
- The same credits as every other product
- One API key for all of it
A VAT number goes in and the tax office's answer comes out
Send a VAT number with its prefix
POST the number, or send the two-letter country code on its own. The prefix and the shape of the number for that country are tested first, so a typo is refused with a clear error and costs nothing.
$ POST /api/v1/eu-vat-check
"vat_number": "IE1234567T"
> country prefix and shape valid
The registry asks the country's tax office
VIES passes the check to the tax authority that issued the number, and its answer comes back. A country that does not answer is retried once, and an outage is never reported as not valid.
Prefix and number shape tested
VIES registry queried
Member state tax office answered
Name and address structured
Get the answer, flat and structured
Validity, country, registered name and address arrive in one JSON payload. A valid number bills 2 credits, and a number that is not valid, or a country that is down, bills nothing.
registrationvalid
nameEXAMPLE TRADING LIMITED
countryIreland
One endpoint checks a VAT number and works like every other 1Lookup call
Same authentication, same credit balance, and the same response envelope as every other 1Lookup product. If you have already integrated one endpoint, this one is a URL change.
curl -X POST https://app.1lookup.io/api/v1/eu-vat-check \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "vat_number": "IE1234567T" }'
# or send the prefix on its own
# -d '{ "vat_number": "1234567T", "country_code": "IE" }'{
"classification": {
"found": true,
"valid": true,
"vat_number": "IE1234567T",
"country_code": "IE",
"country": "Ireland",
"name": "EXAMPLE TRADING LIMITED",
"address": "1 SAMPLE STREET, DUBLIN 2, CO. DUBLIN",
"details_shared": true,
"checked_at": "2026-10-23T09:30:00.000Z"
},
"insights": {
"eu_vat_check_result": {
"number_without_prefix": "1234567T",
"name_shared": true,
"address_shared": true,
"data_source": "eu_vies"
}
},
"recommendations": {
"primary_action": "APPROVE",
"secondary_actions": ["compare_name_with_invoice"]
},
"metadata": { "credits_used": 2, "cache_hit": false }
}One call turns a VAT number into the registry's answer
One call turns a VAT number on an invoice, a checkout form or a supplier list into the registry's answer: whether it is a current registration, which country issued it, and the registered name and address where that country shares them, with the raw JSON your code receives beside it.
- VAT numberIE1234567T
- RegistrationValid
- CountryIreland
- Registered nameEXAMPLE TRADING LIMITED
- Registered address1 SAMPLE STREET, DUBLIN 2, CO. DUBLIN
- Name and addressShared by Ireland
- Checked at23 October 2026, 09:30 UTC
- Next stepCompare the name with the invoice
{
"classification": {
"found": true,
"valid": true,
"vat_number": "IE1234567T",
"country": "Ireland",
"name": "EXAMPLE TRADING LIMITED",
"address": "1 SAMPLE STREET, DUBLIN 2, CO. DUBLIN",
"details_shared": true,
"checked_at": "2026-10-23T09:30:00.000Z"
},
"insights": {
"eu_vat_check_result": {
"name_shared": true,
"address_shared": true,
"data_source": "eu_vies"
}
},
"metadata": { "credits_used": 2 }
}Every checked VAT number returns the same fields at one flat price
A field a country does not share is marked as not shared and never left as a blank, and every check costs the same 2 credits.
It says whether the number is a valid registration
- found
- valid
- vat_number
- country_code
- country
It returns the registered name and address where the country shares them
- name
- address
- details_shared
- name_shared
- address_shared
It records when the registry answered and where the answer came from
- checked_at
- number_without_prefix
- data_source
It suggests what your code should do next
- primary_action
- secondary_actions[]
- user_message
Finance teams, online stores and marketplaces check VAT numbers before they zero-rate a sale
Finance teams zero-rating cross-border invoices
Check the customer's VAT number before you issue an invoice without VAT, and keep the answer and the time it was given with the invoice file, so the exemption can be shown later.
Online stores and SaaS checkouts selling to EU businesses
Let a buyer enter a VAT number at checkout, confirm it is a current registration in seconds, and take VAT off the order for valid business numbers only.
Procurement and supplier onboarding teams
Run a new supplier's VAT number through the registry when you create the vendor record, and compare the registered name with the name on the contract before the first payment.
Accounting and bookkeeping firms
Clean a client's customer list with a bulk job to find numbers that are no longer valid, so cross-border sales are not filed as exempt on a lapsed registration.
Marketplaces and platforms with business sellers
Check a seller's VAT number at sign-up and again each year, and flag the accounts whose registration has gone, before the next payout.
Compliance and fraud teams
Compare the registered name and address with what an applicant submitted, and send mismatches to a person for review instead of approving them automatically.
These are the questions people ask before they check their first EU VAT number
What does the EU VAT Check API return?
Send a VAT number with its two-letter country prefix and it returns whether the number is a valid VAT registration, the country it belongs to, the registered business name and address where that country shares them, and the time the registry answered. A number the registry does not list comes back as not found.
Where does the VAT data come from?
From VIES, the VAT Information Exchange System run by the European Commission. VIES does not hold the data itself: each check is passed to the tax authority of the member state that issued the number, so the answer is the one that country's tax office gives.
Why do some results have no company name or address?
Some member states share the registered name and address and some share only a yes or no. When a country shares nothing beyond validity, the result still says the number is valid and marks the name and address as not shared, instead of leaving you to wonder whether the lookup failed.
How much does an EU VAT check cost?
2 credits per check, about $0.01 on the Starter plan. You are charged only when the registry says the number is a valid registration. A number that is not valid, a mistyped number and a country whose tax service is down all cost 0 credits, in the API, the dashboard and bulk jobs.
What happens when a country's tax service is down?
The check is retried once automatically. If the country still does not answer you get a clear retry-later response and are not charged, and the answer is never saved as not valid. A country being down says nothing about the number, and other countries keep working while one is unavailable.
Can I check a number from Great Britain or Northern Ireland?
Northern Ireland businesses use the prefix XI and can be checked. Great Britain left the EU VAT system in 2021, so a GB number cannot be checked in this registry and is refused with a plain explanation at no cost. Greece files under EL, and GR is accepted and rewritten for you.
What happens when I mistype a VAT number?
It is refused before anything is charged. The country prefix and the shape of the number for that country are tested first, so a missing prefix, a wrong length or a letter in the wrong place returns a clear error with an example of the right shape, and the registry is never called.
Does a valid result prove the person in front of me owns the business?
No. A valid result says the number is a current VAT registration. It does not say who is using it. Where the country shares the registered name, compare it with the name on the invoice or the contract, and treat a mismatch as a reason to ask before you zero-rate the sale.
What does an EU VAT number look like?
It is a two-letter country prefix followed by the national number, and the shape differs by country. Germany is DE and 9 digits, France is FR and 11 characters, the Netherlands is NL, 9 digits, the letter B and 2 digits, and Sweden is SE and 12 digits. Spaces, dots and dashes are ignored, so you can paste a number the way it is printed on an invoice.
Can I check a list of VAT numbers at once?
Yes. Upload a CSV with a vat_number column and you get a row per number with its validity, country, registered name and address. A row that is not a well-formed VAT number fails without a charge. Each answer is passed on to a tax office, so a long list takes proportionally longer.
How current is the answer, and can I ask again?
A first check asks the registry when you send it, so you get the answer as the member state holds it at that moment. A repeat check of the same number by you within 7 days comes from your saved result at no charge. Send bypass_cache: true to ask the registry again.
To check one VAT number before you write any code, use the free EU VAT number checker.
A VAT number is one fact about a customer, and these products check the others
Here is how checking an EU VAT number with 1Lookup compares with the other VAT validation APIs
Each page sets a rival's plans and prices beside ours and says where the rival does the job better. Every figure carries its source and the date it was checked.