FlowRunner
PricingContact
Theme
Start Free

VIES API

Analytics & Data

Validate EU VAT identification numbers against the European Commission VIES registry through viesapi.eu. Agents confirm a VAT number is genuinely registered before applying a zero-rated invoice.

6 actions Basic auth available
VIES API website ↗ Platform Documentation ↗ Capability data verified 2026-07-31
An order is accepted for intra-community supply to a customer in another member state
Get VIES System Status confirms that customer's national register is Available before anything is asked of it
Validate VAT Number confirms registration and returns the officially registered trader name and address
The VIES consultation number is captured and stored against the order
The returned trader name is compared against the customer record the order was raised under
Billing receives the cleared orders and the held ones, each with its own reason
Any order whose check came back inconclusive holds for a billing decision before an invoice is raised

What This Integration Enables

VIES is not one register. It is a query layer in front of 27 national VAT registers plus Northern Ireland, and its answer for any given number is only as good as the availability of the one member state that holds it. That produces a third outcome most integrations quietly discard. A lookup can come back valid, it can come back invalid, and it can come back unanswered because the Italian or Greek register happens to be offline at that moment. Collapsing the third case into the second is the mistake that costs money, because it turns a temporary outage into a customer who appears not to exist and an invoice raised on the wrong basis. This connector exposes the difference explicitly through Get VIES System Status, which returns an overall availability flag plus a per-country status of Available, Unavailable, or Unknown.

The validation surface itself is straightforward and deliberately so. Validate VAT Number checks a number against VIES and returns a valid flag, the trader name and address as the member state publishes them, and a consultation number that can be retained as the record of the check. Country selection applies the correct two-letter prefix automatically, or you can pass the fully prefixed number. Validate VAT Number With Parsed Address does the same work and additionally splits the free-form trader name and address into structured components, name and legal form on one side, country, postal code, city, street, street number, and house number on the other, which is what you need when the result is going into CRM or accounting fields rather than into a text box. The vendor is honest that this parsing relies on external algorithms and is not guaranteed correct for every record, and a flow should treat it accordingly. For volume there is an asynchronous path: Submit Batch Validation accepts between 3 and 99 numbers and returns a token, and Get Batch Validation Result reads the outcome once processing completes, typically after two to three minutes. Get Account Status reports plan limits, per-function pricing, and consumption so far, which lets a flow stop itself before it walks into its own monthly ceiling.

Without FlowRunner

One check at signup The VAT number was valid when the account was created and is assumed valid ever since
Two outcomes assumed Anything that is not a clean valid gets handled as if it were an invalid number
Trader details taken from the form The customer name on the invoice is whatever was typed, not what the member state publishes

With FlowRunner

A check per invoice Validation runs against the document that depends on it, with its consultation number stored beside it
Three outcomes handled Valid, invalid, and inconclusive are separated, because a register being offline is not a failed customer
Trader details taken from the register Validate VAT Number returns the registered name and address, and the parsed variant splits them into fields

Use Case Scenarios

Zero-Rating at the Invoice Moment

An order for a customer in another member state is ready to invoice from Xero or QuickBooks Online. The agent runs Validate VAT Number against the customer's number, stores the returned consultation number and timestamp on the invoice record, and compares the registered trader name that VIES returned against the customer name the order was raised under. A name that has changed is not automatically a problem, and it is always worth knowing about. The check runs on the invoice rather than on the account, because a number that validated at quote time is not evidence about a number at invoice time, and the gap between those two dates is where the risk actually lives. Whether the supply qualifies for zero-rating remains a determination your finance team makes; what the agent supplies is the registry answer and the record that it was asked.

Cleaning a Customer Database in Batch

A customer table carries thousands of VAT numbers captured over years from web forms, imports, and manual entry. The agent chunks them into batches of between 3 and 99, since the service rejects anything smaller or larger, and calls Submit Batch Validation for each, holding the returned token. It waits two to three minutes before the first attempt at Get Batch Validation Result and retries on error code 62, which means the batch is still processing rather than that anything went wrong. Results come back as a numbers array of successful VIES records and an errors array describing what could not be resolved, and the flow writes each side to a different place. For the records that resolved, Validate VAT Number With Parsed Address supplies structured name and address components that overwrite user-typed values in Snowflake or the CRM, with the parsing caveat noted on the field so a reviewer knows which values came from an algorithm.

Running a Large Validation Pass Without Burning the Plan

Before a monthly revalidation sweep, the agent runs Get Account Status and reads the monthly request limit, whether over-plan usage is permitted, and how many requests have already been consumed by lookup type. If the sweep will not fit inside what remains, it does not start and half-finish, it reports the shortfall to finance in Slack with the arithmetic. It then runs Get VIES System Status and partitions the work by country, sending only the member states currently reporting Available and parking the rest. Customers in an Unavailable country are not marked invalid and are not silently skipped, they are queued for a retry with the outage recorded against them. Where a Polish counterparty also needs national-registry checks, the same flow can hand off to NIP24 for VAT status and bank account verification against the Ministry of Finance list.

Human-in-Loop Highlight

The gate is the inconclusive result, not the negative one. An invalid number is easy: the flow holds the invoice and asks the customer for a correct one, and nobody needs a decision from a human to do that. The hard case is when Get VIES System Status reports the customer's member state as Unavailable, or a lookup fails without a verdict, and there is a shipment leaving today. The agent is now facing two options that are each wrong under different circumstances, applying the zero rate on an unverified number or charging domestic VAT to a customer who is genuinely registered, and it has no basis for choosing between them. So it pulls the andon cord. It posts to billing: "Order 5518, customer [name], VAT number [number], country IT. VIES reports the Italian register Unavailable as of [timestamp]. Last successful consultation for this number: [number], dated [date]. Invoice with the zero rate on the prior consultation, charge domestic VAT and credit later, or hold the invoice until the register returns?" A person picks, and the reason is recorded next to the order. That is the digital andon cord doing the job it exists for, and it is why human-in-the-loop is a default here rather than an escalation path someone remembers to build. Clean valid results, which is nearly all of them, never pause for anybody.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

6 actions

VAT Validation

2
  • Validate VAT Number Checks an EU VAT identification number against the European Commission VIES registry and returns a valid flag, the registered trader name and address as VIES returns them, and a VIES consultation number that can be retained as the record of the check. Select a country to have the two-letter prefix added automatically, or pass the fully prefixed number.
  • Validate VAT Number With Parsed Address Validates exactly as Validate VAT Number does, and additionally splits the free-form trader name and address into structured components: name, legal form and its canonical identifier, then country, postal code, city, street, street number, and house number. Use it when the result is going into CRM or accounting fields. The vendor notes that parsing relies on external algorithms and cannot be guaranteed correct for every record.

Batch Validation

2
  • Submit Batch Validation Uploads a batch of EU VAT numbers for asynchronous validation and returns a batch token. Accepts between 3 and 99 numbers per batch, and rejects anything outside that range. Use it instead of repeated single lookups when checking a whole customer list.
  • Get Batch Validation Result Retrieves the results of a submitted batch using its token, returning a numbers array with one VIES record per successfully checked number and an errors array describing the ones that could not be resolved. While the batch is still processing the service reports error code 62, so allow two to three minutes before the first attempt and retry on that code rather than treating it as a failure.

System and Account

2
  • Get VIES System Status Reports the current availability of the VIES system and of each member state's national register, returning an overall available flag plus a countries array with a status of Available, Unavailable, or Unknown per country. Use it before a large run, and use it to tell an outage apart from an invalid number after a failed lookup.
  • Get Account Status Returns the connected account's plan name, subscription and per-item pricing, monthly request limit, whether over-plan usage is allowed, which functions the plan enables, and requests already consumed broken down by lookup type. Use it to monitor remaining quota and to fail a workflow early rather than mid-batch.

Frequently Asked Questions

What can FlowRunner do with VIES API?

FlowRunner agents can run Validate VAT Number, Validate VAT Number With Parsed Address, and Submit Batch Validation in VIES API, plus 3 more actions.

Does connecting VIES API to FlowRunner require OAuth?

No. VIES API connects to FlowRunner with basic authentication (a username and password), no OAuth flow required.

Can VIES API trigger a FlowRunner workflow automatically?

VIES API doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with VIES API

$100 in credits. No card required. Connect in minutes.