# EU VIES API

> EU VIES returns VAT number validity and registered business details as a workflow and API.

EU VIES checks an EU VAT number and returns its validity, registered name, and address when available. Validate vat number needs a VAT number and may need a country when the number lacks a prefix.

- Page: https://fous.com/tools/eu-vies
- Handle: `@eu-vies`
- Category: [Government](https://fous.com/tools/category/government)
- Source website: https://ec.europa.eu/taxation_customs/vies
- Last verified: Sep 29, 2026

## Methods

### Validate vat number

Operation `validate_vat_number`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Check an EU VAT number in VIES and return its validity, registered name and address when available. Country services may temporarily be unavailable.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `country` | string | no | `"Ireland"` | Country name or two-letter VAT code when the number has no prefix; for example Ireland or IE. |
| `vat_number` | string | yes | `"IE6388047V"` | VAT number as shown on an invoice, with or without country prefix, spaces, dots or dashes; for example IE6388047V. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "vat_number"
  ],
  "properties": {
    "country": {
      "type": "string",
      "description": "Country name or two-letter VAT code when the number has no prefix; for example Ireland or IE.",
      "examples": [
        "Ireland",
        "Germany"
      ]
    },
    "vat_number": {
      "type": "string",
      "description": "VAT number as shown on an invoice, with or without country prefix, spaces, dots or dashes; for example IE6388047V.",
      "examples": [
        "IE6388047V",
        "6388047V",
        "000000000"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "vat_number": "IE6388047V"
    },
    {
      "country": "Ireland",
      "vat_number": "6388047V"
    },
    {
      "country": "Germany",
      "vat_number": "000000000"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `note` | string or null | `"The country’s VAT service is currently unavailable. Please try again later."` | Reason the check could not be completed, if any. |
| `valid` | boolean or null | `true` | Whether VIES confirms this VAT number; null if validation could not be completed. |
| `address` | string or null | `"3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4"` | Registered address if made available by the country. |
| `country` | string | `"Ireland"` | Country where the VAT number is registered. |
| `page_url` | string | `"https://ec.europa.eu/taxation_customs/vies/"` | European Commission VIES validation page. |
| `checked_at` | string | `"2026-09-28T23:02:28.713000+00:00"` | Time of the VIES check with timezone. |
| `vat_number` | string | `"IE6388047V"` | VAT number without punctuation, including the country prefix. |
| `registered_name` | string or null | `"GOOGLE IRELAND LIMITED"` | Registered name if made available by the country. |
| `raw_service_status` | string | `"VALID"` | Original VIES service status. |
| `request_identifier` | string or null |  | VIES request identifier when issued. |

**Example input**

```json
{
  "vat_number": "IE6388047V"
}
```

**Example output**

```json
{
  "note": null,
  "valid": true,
  "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
  "country": "Ireland",
  "page_url": "https://ec.europa.eu/taxation_customs/vies/",
  "checked_at": "2026-09-28T23:02:28.713000+00:00",
  "vat_number": "IE6388047V",
  "registered_name": "GOOGLE IRELAND LIMITED",
  "raw_service_status": "VALID",
  "request_identifier": null
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@eu-vies",
  "visibility": "public",
  "operation": "validate_vat_number",
  "version": 1,
  "input": {
    "vat_number": "IE6388047V"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@eu-vies\",\n  \"visibility\": \"public\",\n  \"operation\": \"validate_vat_number\",\n  \"version\": 1,\n  \"input\": {\n    \"vat_number\": \"IE6388047V\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@eu-vies",
  "visibility": "public",
  "operation": "validate_vat_number",
  "version": 1,
  "input": {
    "vat_number": "IE6388047V"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/eu-vies`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `validate_vat_number`: Validate vat number. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-eu-vies https://api.fous.com/mcp/tools/eu-vies --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Check VAT numbers supplied by customers
- Confirm VAT details before processing invoices
- Match registered business names to customer records
- Review the registered address associated with a VAT number

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this EU VIES tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a EU VIES account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from ec.europa.eu when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### Is this EU VAT number valid?

Validate vat number checks the number in VIES and returns whether it is confirmed as valid, or a note if the check could not be completed.

### What business name is registered to this VAT number?

Validate vat number returns the registered name when the country makes it available.

### What address is registered to this VAT number?

Validate vat number returns the registered address when the country makes it available.

## Related

- [Annuaire des Entreprises API](https://fous.com/tools/annuaire-des-entreprises.md): French government directory of public company registrations.
- [Wise API](https://fous.com/tools/wise.md): Wise provides current mid-market exchange rates, optional daily rate history, published transfer cost comparisons and delivery estimates, and bank SWIFT/BIC codes and branch locations when available.
- [IRS API](https://fous.com/tools/irs.md): IRS provides tax information and public organization records, including charity status and current-directory forms, instructions, and publications with revision and posting dates.
- [ABN Lookup API](https://fous.com/tools/abn-lookup.md): Search Australian businesses by name or ABN and check public registration details.
- [EU Sanctions Map API](https://fous.com/tools/eu-sanctions-map.md): EU Sanctions Map returns regimes, consolidated financial listings, name matches and linked acts, plus country measures and available counts; linked acts may be later amendments.
- [Vinted API](https://fous.com/tools/vinted.md): Search public second-hand listings on Vinted country sites.
- [Companies House API](https://fous.com/tools/companies-house.md): Companies House returns UK public-register company details, officers, people with significant control and recent filings; records may be incomplete, and ceased entries are optional.
- [Eurostat API](https://fous.com/tools/eurostat.md): Official European statistics from Eurostat.
- [All Government tools](https://fous.com/tools/category/government)
