vatverify home
France

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.

EU member stateTVA Taxe sur la Valeur AjoutéeEUR

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"}'
Loading reliability...

Facts

Format

Prefix
FR
Digits
11
Regex
^FR[A-Z0-9]{2}\d{9}$
ValidFR40303265045
Bad checksumFR40303265040
Bad formatFR4030326504

Registry

VIES powers /v1/validate for France.

VAT rates (EUR)

20%
Standard
10%
Reduced

restaurants, transport, hotel accommodation, unprocessed agricultural products

5.5%
Reduced

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.

Loading FAQ…

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.