Le format du numéro de TVA par pays
Un numéro de TVA commence par le code du pays, suivi d'un numéro dont la forme dépend du pays. L'API contrôle le format et, quand le pays le prévoit, la clé de contrôle, avant toute recherche.
| Pays | Format | Exemple |
|---|---|---|
| France | FR + 2 caractères de clé + SIREN (9 chiffres) | FR14652014051 |
| Belgique | BE + numéro d'entreprise (10 chiffres) | BE0417497106 |
| Suisse | Numéro IDE suivi de MWST, TVA ou IVA | CHE-105.909.036 TVA |
| Norvège | NO + numéro d'organisation + MVA | - |
| Finlande | FI + 8 caractères du Y-tunnus | - |
| Lettonie | LV + 11 chiffres | - |
| Suède | SE + numéro d'organisation (10 chiffres) + 01 | SE556042722001 |
| Estonie | EE + 9 chiffres | EE100210460 |
| Lituanie | LT + 9 chiffres | LT110053842 |
En France, la clé se calcule à partir du SIREN : (12 + 3 × (SIREN modulo 97)) modulo 97. Pour le SIREN 652014051, le reste est 14 et le numéro est FR14652014051. La Suisse n'est pas membre de l'Union européenne et le Royaume-Uni l'a quittée : leurs numéros ne sont pas des numéros intracommunautaires, et le Royaume-Uni n'est pas pris en charge pour la TVA. Pour le détail des formats, voir Numéro de TVA intracommunautaire : format et vérification.
Valide ou invalide : le résultat renvoyé
La route GET /v2/validate contrôle le numéro de TVA seul ou avec le SIREN ou le SIRET du client. Elle répond 200 même quand le numéro est invalide : le champ valid vaut true seulement si tous les contrôles sont réussis, et checks détaille chacun.
| Statut de la TVA | Signification |
|---|---|
valid | Le numéro est enregistré. |
invalid | Le numéro n'est pas enregistré : le contrôle vat_registered échoue. |
pending | La vérification est en cours : réessayez quelques secondes plus tard. |
not_verified, unavailable | La vérification n'a pas abouti. Elle ne fait pas échouer la validation, et vous pouvez la relancer. |
Les autres contrôles utiles à la facturation sont vat_format (numéro bien formé), identifiers_match (le SIREN, le SIRET et la TVA désignent la même entreprise) et company_active (l'entreprise n'est pas fermée).
Exemple de requête et de réponse
curl "https://api.jsonpage.com/v2/validate?vat=FR14652014051" \
-H "X-API-Key: $JSONPAGE_API_KEY"
{
"data": {
"valid": true,
"checks": [
{ "code": "vat_format", "ok": true, "value": "FR14652014051" },
{ "code": "company_exists", "ok": true, "value": "FR-652014051" },
{ "code": "company_active", "ok": true, "value": "active" },
{ "code": "vat_registered", "ok": true, "value": "valid" }
],
"company": {
"id": "FR-652014051",
"name": "CARREFOUR",
"status": "active",
"vat": { "number": "FR14652014051", "status": "valid", "checked_at": "..." },
"...": "..."
}
}
}
Réponse abrégée : les champs de base de la fiche sont omis. Pour lire seulement le bloc TVA d'une fiche, ajoutez ?include=vat à GET /v2/companies/{id}.
En JavaScript
const url = "https://api.jsonpage.com/v2/validate?vat=" + encodeURIComponent("FR14652014051");
const res = await fetch(url, { headers: { "X-API-Key": process.env.JSONPAGE_API_KEY } });
const { data } = await res.json();
if (!data.valid) console.log(data.checks.filter((c) => !c.ok));
En Python
import os, requests
res = requests.get(
"https://api.jsonpage.com/v2/validate",
params={"vat": "FR14652014051"},
headers={"X-API-Key": os.environ["JSONPAGE_API_KEY"]},
)
data = res.json()["data"]
print(data["valid"], [c for c in data["checks"] if not c["ok"]])
Cas d'usage en facturation
- Livraison intracommunautaire. L'exonération de TVA suppose un numéro valide pour le client : vérifiez-le avant d'émettre la facture.
- Création d'un client ou d'un fournisseur. Contrôlez la TVA et le SIREN saisis, puis préremplissez le nom et l'adresse depuis la fiche.
- Paiement d'une facture fournisseur. Vérifiez que le numéro de TVA appartient bien au bénéficiaire et que l'entreprise est active.
- Suivi dans la durée. La surveillance vous prévient par webhook quand une entreprise ferme ou entre en procédure collective.
Pour un fichier complet de clients, l'offre de nettoyage de fichier clients vérifie chaque ligne sans écrire de code.
Prix et limites
Découverte à 0 €, Standard à 19 € HT par mois, Pro à 129 € HT par mois, avec 100, 1 000 et 10 000 requêtes par minute et 1 000 requêtes par jour. Prix fixe, pas de crédits, pas de dépassement facturé. Voir les tarifs.
Questions fréquentes
Comment vérifier un numéro de TVA intracommunautaire par API ?+
Appelez GET /v2/validate avec le paramètre vat. La réponse indique si le numéro est bien formé, si l'entreprise existe et est active, et le statut du numéro (valid, invalid ou pending).
Quels pays sont pris en charge pour la TVA ?+
La France, la Belgique, la Suisse, la Norvège, la Finlande, la Lettonie, la Suède, l'Estonie et la Lituanie. Les numéros britanniques ne sont pas pris en charge.
Que signifie le statut pending ?+
La vérification du numéro n'a pas encore abouti. Réessayez quelques secondes plus tard.
Peut-on vérifier la TVA à partir du SIREN ?+
Oui. En France, le numéro de TVA se calcule à partir du SIREN, et l'API vérifie ensuite qu'il est enregistré. Transmettez le SIREN et la TVA ensemble pour contrôler qu'ils désignent la même entreprise.
Une vérification de TVA est-elle facturée à l'unité ?+
Non. Prix fixe, pas de crédits, pas de dépassement facturé. Le débit est limité par minute selon le forfait, et aucune vérification n'est décomptée d'un crédit.
Pour aller plus loin
- SIRENAPI SIREN et SIRETFiche d'entreprise, recherche par nom, autocomplétion et vérification.
- DOCUMENTATIONValidation dans la documentationTous les contrôles de la route de validation, un par un.
- GUIDENuméro de TVA intracommunautaire : format et vérificationÀ quoi sert le numéro, les erreurs courantes et les mentions sur la facture.