Check France VAT numbers
Validate French VAT numbers (TVA intracommunautaire) against the EU VIES registry. French numbers are 13 characters: the FR prefix followed by 2 alphanumeric characters (not necessarily digits) and then 9 digits matching the SIREN. The 2-character key is computed algorithmically and can contain letters. Every response includes the company name, registered address, and validity at query time.
Try it
curl -X POST "https://api.vatverify.dev/v1/validate" \ -H "Authorization: Bearer $VATVERIFY_KEY" \ -H "Content-Type: application/json" \ -d '{"vat_number":"FR40303265045"}'Facts
Format
- Prefix
- FR
- Digits
- 11
- Regex
- ^FR[A-Z0-9]{2}\d{9}$
FR40303265045FR40303265040FR4030326504VAT rates (EUR)
restaurants, transport, hotel accommodation, unprocessed agricultural products
food staples, books, non-prescription medicines, cultural events
What we return for France
{
"data": {
"valid": true, // boolean validity at query time
"vat_number": "DE129273398",
"country": {
"code": "DE",
"name": "Germany",
"vat": { "standard_rate": 19 }
},
"company": {
"name": "SIEMENS AG", // legal entity name
"address": "..." // when VIES provides it
},
"verified_at": "2026-04-25T10:00:00Z"
},
"meta": {
"request_id": "019dc...", // for audit trail correlation
"source": "vies",
"source_status": "live", // live | cached | degraded
"cached": false,
"latency_ms": 234
}
}
Test against production VATs
Real numbers from publicly-documented corporate filings. Click to see the live result.
Watch out for
- The 2-character key after FR is alphanumeric, not purely numeric. Validators that accept only FR + 2 digits + 9 digits incorrectly reject keys like K7 or 2B.
- The French SIREN (9 digits) is embedded in positions 5-13 of the TVA number. The first 4 characters (FR + key) are the computed prefix.
- The super-reduced 2.1% rate applies only to prescription medicines reimbursed by social security, not all medicines.
TVA intracommunautaire is the SIREN with a check key
French VAT numbers (TVA intracommunautaire) are built from the 9-digit
SIREN with a 2-character algorithmic key prepended. The full structure
is FR{key}{SIREN}, 13 characters including the country prefix.
The SIREN is issued by INSEE. DGFiP computes the 2-character key and the resulting TVA number flows into VIES.
/v1/validate exposes the SIREN explicitly in
data.company.identifiers for French responses, so downstream systems
that key off SIREN don't need to re-parse the VAT string.
The key is alphanumeric, not numeric
The 2-character key after FR can include letters. Valid forms include
FRK7..., FR2B..., FRX9.... Validators that hardcode FR\d{11} reject
these on regex alone, which is wrong.
The key uses a modulo-97 algorithm against the SIREN, with letters mapped to numeric values. You don't need to recompute it locally; VIES is the authority on whether the resulting number is registered.
vatverify accepts both FR[A-Z0-9]{2}\d{9} and the all-numeric form.
SIREN, SIRET, TVA: three identifiers
- SIREN: 9 digits, identifies the legal entity.
- SIRET: 14 digits, identifies a specific establishment (the SIREN plus a 5-digit NIC).
- TVA intracommunautaire:
FR{key}{SIREN}, the EU-facing VAT ID.
SIRET appears on a lot of French invoices alongside the TVA number. SIRET is not a VAT identifier and cannot be passed to VIES. Strip a SIRET to its first 9 digits to derive the SIREN, then reconstruct the TVA. vatverify exposes this as a helper in the response when you pass a SIRET into the validator and we detect the format.
Auto-entrepreneurs and the franchise en base
A large share of French independent contractors operate under auto-entrepreneur rules. Below the franchise en base de TVA threshold, they have a SIREN but no TVA intracommunautaire number, because they do not charge VAT. Thresholds change periodically; for current numbers see the DGFiP guidance directly rather than caching them in code.
If a French counterparty gives you only a SIREN and says they do not have a TVA number, intra-Community reverse-charge does not apply to that invoice. They must charge or be charged French VAT under the standard regime, which an auto-entrepreneur outside the franchise cannot do without electing into VAT.
Reduced rates by zone
Mainland France runs four VAT rates: 20% standard, 10% intermediate, 5.5% reduced, 2.1% super-reduced. Corsica and the overseas departments (Martinique, Guadeloupe, Réunion) apply different rate matrices set by their own legislation; the applicable matrix depends on where the supply is rendered, not where the seller is established.
For invoice generation, you typically need the full per-zone rate
matrix locally. /v1/decide returns the applicable rate for a given
seller-buyer pair when you only need the answer for one transaction.
Caching against the DGFiP cycle
DGFiP pushes registration changes to VIES on a daily cycle. A new French entity is generally visible in VIES within 24 hours. The default vatverify TTLs (30 days for valid responses, 24 hours for invalid) align with that cadence. If you re-check an invalid number after 24 hours and it now resolves, the change pushed overnight.
Automate France VAT checks in your stack
Replace manual lookups with one API call against VIES. Drops into invoicing, checkout, and signup flows in any language. 500 free validations per month, no credit card.