Pourquoi contrôler les numéros avant la facture
Cette page montre comment contrôler ces numéros avec un appel d'API avant d'émettre une facture ou de comptabiliser celle d'un fournisseur, avec des exemples en curl, JavaScript, Python, PHP et Ruby.
La facturation électronique se met en place en France par étapes : toutes les entreprises doivent pouvoir recevoir des factures électroniques depuis septembre 2026, et l'émission s'étend aux PME et aux micro-entreprises à partir de septembre 2027. Le calendrier officiel est détaillé sur impots.gouv.fr. Le SIREN du client devient une mention de la facture : voir ce que change la facture électronique pour le SIREN et la liste des mentions obligatoires.
Deux moments se prêtent à un contrôle automatique. À l'émission, vous vérifiez l'acheteur : son numéro existe, l'entreprise est active, le SIRET et la TVA désignent la même entreprise. À la réception, vous vérifiez le vendeur avant de comptabiliser et de payer, ce qui limite aussi le risque de fausse facture.
Un appel pour le SIRET et la TVA
La route GET /v2/validate accepte un identifiant global, un SIRET, un numéro de TVA, ou plusieurs à la fois. Chaque contrôle revient avec son résultat, et valid n'est vrai que si tous les contrôles passent. La clé API se place dans l'en-tête X-API-Key.
curl "https://api.jsonpage.com/v2/validate?siret=55203253400646&vat=FR27552032534" \
-H "X-API-Key: $JSONPAGE_API_KEY"
Réponse (extrait) :
{
"data": {
"valid": true,
"checks": [
{ "code": "siret_format", "ok": true, "value": "55203253400646" },
{ "code": "siret_key", "ok": true, "value": "55203253400646" },
{ "code": "vat_format", "ok": true, "value": "FR27552032534" },
{ "code": "identifiers_match", "ok": true, "value": "FR-552032534" },
{ "code": "company_exists", "ok": true, "value": "FR-552032534" },
{ "code": "company_active", "ok": true, "value": "active" },
{ "code": "vat_registered", "ok": true, "value": "valid" }
],
"company": { "id": "FR-552032534", "name": "DANONE", "status": "active" }
}
}
Les espaces, points et tirets sont ignorés dans le SIRET et la TVA, ce qui évite de nettoyer la saisie avant l'appel. La TVA de tous les pays de l'Union européenne est acceptée, pas seulement la TVA française.
Lire le résultat et décider
Ne vous arrêtez pas à valid : la liste checks dit quel contrôle a échoué, et donc quoi demander à votre interlocuteur.
| Résultat | Ce que cela veut dire | Que faire avant la facture |
|---|---|---|
valid: true | Tous les contrôles sont passés. | Poursuivre : émettre ou comptabiliser la facture. |
siret_key ou vat_format en échec | Le numéro est mal saisi : faute de frappe ou clé fausse. | Corriger le numéro à la source, puis relancer le contrôle. |
company_active en échec | Le numéro existe, mais l'entreprise ou l'établissement est fermé. | Demander au client ou au fournisseur un numéro à jour avant de continuer. |
identifiers_match en échec | Le SIRET et le numéro de TVA ne désignent pas la même entreprise. | Faire confirmer le bon couple de numéros. |
vat unverifiable | Le service du pays n'a pas répondu : le numéro n'est pas déclaré faux. | Réessayer plus tard ; ne pas le traiter comme invalide. |
Pour un lot de numéros, par exemple tout un fichier clients avant la première campagne de facturation, la page Fichier clients fait le contrôle sans programmation, et la méthode pour nettoyer un fichier clients détaille les étapes.
Exemples de code
Le même contrôle dans quatre langages, à brancher sur votre logiciel de facturation ou votre ERP. La clé est lue dans une variable d'environnement : ne la placez jamais dans une page ou une application distribuée aux utilisateurs.
JavaScript
async function checkParty(siret, vat) {
const url = new URL("https://api.jsonpage.com/v2/validate");
url.searchParams.set("siret", siret);
url.searchParams.set("vat", vat);
const res = await fetch(url, { headers: { "X-API-Key": process.env.JSONPAGE_API_KEY } });
if (!res.ok) throw new Error("HTTP " + res.status);
const { data } = await res.json();
const failed = data.checks.filter((c) => !c.ok).map((c) => c.code);
return { valid: data.valid, failed, company: data.company };
}
Python
import os
import requests
def check_party(siret, vat):
r = requests.get(
"https://api.jsonpage.com/v2/validate",
params={"siret": siret, "vat": vat},
headers={"X-API-Key": os.environ["JSONPAGE_API_KEY"]},
timeout=10,
)
r.raise_for_status()
data = r.json()["data"]
failed = [c["code"] for c in data["checks"] if not c["ok"]]
return data["valid"], failed, data["company"]
PHP
function checkParty(string $siret, string $vat): array
{
$url = "https://api.jsonpage.com/v2/validate?" . http_build_query(["siret" => $siret, "vat" => $vat]);
$context = stream_context_create(["http" => [
"header" => "X-API-Key: " . getenv("JSONPAGE_API_KEY"),
"timeout" => 10,
]]);
$body = file_get_contents($url, false, $context);
if ($body === false) {
throw new RuntimeException("Request failed");
}
$data = json_decode($body, true)["data"];
$failed = array_column(array_filter($data["checks"], fn ($c) => !$c["ok"]), "code");
return [$data["valid"], $failed, $data["company"]];
}
Ruby
require "net/http"
require "json"
def check_party(siret, vat)
uri = URI("https://api.jsonpage.com/v2/validate")
uri.query = URI.encode_www_form(siret: siret, vat: vat)
req = Net::HTTP::Get.new(uri, "X-API-Key" => ENV.fetch("JSONPAGE_API_KEY"))
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "HTTP #{res.code}" unless res.is_a?(Net::HTTPSuccess)
data = JSON.parse(res.body)["data"]
failed = data["checks"].reject { |c| c["ok"] }.map { |c| c["code"] }
[data["valid"], failed, data["company"]]
end
Ce que l'API ne fait pas
L'API vérifie des numéros et l'entreprise qu'ils désignent. Elle ne valide pas le fichier de facture (sa structure, ses champs, sa conformité au format exigé), ne transmet pas la facture à une plateforme et ne remplace pas l'avis de votre expert-comptable. Un numéro de TVA « non vérifiable pour le moment » n'est pas un numéro faux : réessayez plus tard.
Côté volume, les routes sont limitées par minute ; au-delà, la réponse est 429 avec un en-tête Retry-After : attendez ce délai avant de relancer. Pour un lot important, la route de fiches en lot (100 entreprises par appel) réduit le nombre d'appels. Voir la documentation.
Questions fréquentes
Faut-il vérifier le SIREN avant chaque facture ?+
Au minimum à la création du client ou du fournisseur, puis quand une facture est rejetée ou qu'un paiement change. Un contrôle à l'émission évite d'envoyer une facture à une entreprise fermée ou à un numéro faux.
L'API valide-t-elle ma facture électronique ?+
Non. Elle contrôle les numéros d'identification (SIREN, SIRET, TVA) et l'entreprise qu'ils désignent. Le format et le contenu du fichier de facture dépendent de votre logiciel ou de votre plateforme.
Peut-on vérifier la TVA d'un fournisseur étranger ?+
Oui. La route de contrôle accepte les numéros de TVA des pays de l'Union européenne. Si le service du pays ne répond pas, le résultat est « non vérifiable », ce qui n'équivaut pas à un numéro invalide.
Faut-il un compte payant ?+
Non, le compte gratuit donne accès à toutes les routes, avec 100 requêtes par minute et 1 000 requêtes par jour. Les forfaits payants lèvent le plafond quotidien.
Que faire si le SIRET et la TVA ne correspondent pas ?+
Demandez à votre interlocuteur de confirmer le couple de numéros avant de facturer. La liste des contrôles indique si le SIRET existe, s'il est actif et s'il désigne la même entreprise que la TVA.
Pour aller plus loin
- FACTURE ÉLECTRONIQUEFacture électronique 2026 : la liste des mentions obligatoiresChecklist des mentions d'une facture et les quatre nouvelles de la réforme : SIREN du client, livraison, nature de l'opération, débits.
- FACTURATIONUn client reçoit-il les factures électroniques ?Consulter l'annuaire officiel pour trouver la plateforme agréée d'un client, et ce que prévoit le calendrier 2026-2027.
- FACTURATION ÉLECTRONIQUEFacturation électronique 2026 : pourquoi le SIREN de vos clients devient obligatoireLes quatre nouvelles mentions obligatoires, le calendrier 2026-2027 et la vérification des SIREN de vos clients.
- APIAPI de vérification de TVA intracommunautaire en JSONVérifiez un numéro de TVA en un appel : format, entreprise, statut valide ou invalide. France, Belgique, Suisse, Norvège, Finlande, Lettonie, Suède, Estonie, Lituanie. Prix fixe.