## TL;DR

Intra-EU B2B supplies need valid customer VAT IDs for zero-rating; an invalid ID means VAT is due. Validate the VAT ID against VIES at onboarding and periodically, store the validation timestamp and response, and block zero-rated treatment on failure. Cache results because VIES has downtime.

## Error

```text
VIES validation failed for VAT ID IE1234567A
```

## Steps

1. Extract and normalize the VAT ID (country code plus number).
   Expected: A clean ID.
2. Query VIES and store the response with timestamp.
   Expected: Authoritative validation.
3. On failure, retry with backoff; VIES has outages.
   Expected: Resilience, not false failures.
4. Block zero-rating until validation passes.
   Expected: Correct tax treatment.
5. Revalidate periodically, not just once.
   Expected: Ongoing compliance.

## When to use

- Intra-EU B2B invoicing
- Zero-rated supply claims
- EU vendor/customer onboarding

## When not to use

- Non-EU tax IDs
- B2C sales
- US sales tax

## Compatibility

VIES SOAP/REST API; ERP-agnostic.

## Variant phrasings

### VIES VAT validation

### EU VAT ID check invoice

### VIES down retry

## Root cause

Zero-rating depends on the customer being a taxable person in another member state. The VAT ID is the proof, and VIES is the registry that confirms it.

## Edge cases

- VIES downtime is frequent; cache and retry, do not fail open
- Northern Ireland has special XI prefix rules
- New VAT IDs can take time to propagate; allow a grace window with review

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_VhFacOumeQmfQIwUKV8AiQ
