Waarom nummers controleren vóór de factuur
Deze pagina laat zien hoe u die nummers met een API-aanroep controleert voordat u een factuur uitreikt of die van een leverancier boekt, met voorbeelden in curl, JavaScript, Python, PHP en Ruby.
De elektronische facturatie wordt in Frankrijk gefaseerd ingevoerd: alle ondernemingen moeten vanaf september 2026 elektronische facturen kunnen ontvangen, en het uitreiken breidt zich vanaf september 2027 uit naar kmo's en micro-ondernemingen. De officiële kalender staat op impots.gouv.fr (in het Frans). Het SIREN-nummer van de klant wordt een vermelding op de factuur: zie wat e-facturatie verandert voor het SIREN-nummer en de lijst met verplichte vermeldingen.
Twee momenten lenen zich voor een automatische controle. Bij het uitreiken controleert u de koper: het nummer bestaat, de onderneming is actief, het SIRET en het btw-nummer wijzen naar dezelfde onderneming. Bij ontvangst controleert u de verkoper voordat u boekt en betaalt, wat ook het risico op een valse factuur verkleint.
Eén aanroep voor SIRET en btw-nummer
De route GET /v2/validate neemt een globale identificatie, een SIRET, een btw-nummer of meerdere tegelijk. Elke controle komt terug met haar resultaat, en valid is alleen waar als alle controles slagen. De API-sleutel gaat in de header X-API-Key.
curl "https://api.jsonpage.com/v2/validate?siret=55203253400646&vat=FR27552032534" \
-H "X-API-Key: $JSONPAGE_API_KEY"
Antwoord (fragment):
{
"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" }
}
}
Spaties, punten en streepjes worden in het SIRET en het btw-nummer genegeerd, zodat u de invoer niet vooraf hoeft op te schonen. Btw-nummers van alle landen van de Europese Unie worden aanvaard, niet alleen Franse.
Het resultaat lezen en beslissen
Stop niet bij valid: de lijst checks zegt welke controle mislukte, en dus wat u aan uw tegenpartij moet vragen.
| Resultaat | Wat het betekent | Wat te doen vóór de factuur |
|---|---|---|
valid: true | Alle controles zijn geslaagd. | Ga door: de factuur uitreiken of boeken. |
siret_key of vat_format mislukt | Het nummer is verkeerd ingevoerd: een tikfout of een foute controlesleutel. | Corrigeer het nummer aan de bron en voer de controle opnieuw uit. |
company_active mislukt | Het nummer bestaat, maar de onderneming of de vestiging is gesloten. | Vraag de klant of leverancier om een actueel nummer voordat u verdergaat. |
identifiers_match mislukt | Het SIRET en het btw-nummer wijzen niet naar dezelfde onderneming. | Laat het juiste paar nummers bevestigen. |
vat unverifiable | De dienst van het land antwoordde niet: het nummer is niet als fout aangemerkt. | Probeer het later opnieuw; behandel het niet als ongeldig. |
Voor een reeks nummers, bijvoorbeeld een heel klantenbestand vóór de eerste factureringsronde, doet de pagina Klantenbestand de controle zonder programmeren, en de werkwijze om een klantenbestand op te schonen beschrijft de stappen.
Codevoorbeelden
Dezelfde controle in vier talen, om aan uw facturatiesoftware of ERP te koppelen. De sleutel wordt uit een omgevingsvariabele gelezen: zet hem nooit in een pagina of in een toepassing die aan gebruikers wordt verspreid.
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
Wat de API niet doet
De API controleert nummers en de onderneming waarnaar ze verwijzen. Ze valideert het factuurbestand niet (structuur, velden, conformiteit met het vereiste formaat), stuurt de factuur niet naar een platform en vervangt het advies van uw boekhouder niet. Een btw-nummer dat "momenteel niet verifieerbaar" is, is geen fout nummer: probeer het later opnieuw.
Wat het volume betreft zijn de routes per minuut beperkt; daarboven is het antwoord 429 met een header Retry-After: wacht zo lang voordat u opnieuw probeert. Voor een grote reeks beperkt de batchroute (100 ondernemingen per aanroep) het aantal aanroepen. Zie de documentatie.
Veelgestelde vragen
Moet ik het SIREN vóór elke factuur controleren?+
Minstens bij het aanmaken van de klant of leverancier, en daarna wanneer een factuur wordt afgewezen of een betalingsgegeven wijzigt. Een controle bij het uitreiken voorkomt dat u een factuur naar een gesloten onderneming of een fout nummer stuurt.
Valideert de API mijn e-factuur?+
Nee. Ze controleert de identificatienummers (SIREN, SIRET, btw) en de onderneming waarnaar ze verwijzen. Formaat en inhoud van het factuurbestand hangen af van uw software of platform.
Kan ik het btw-nummer van een buitenlandse leverancier controleren?+
Ja. De controleroute aanvaardt btw-nummers van de landen van de Europese Unie. Antwoordt de dienst van het land niet, dan is het resultaat "niet verifieerbaar", wat niet hetzelfde is als een ongeldig nummer.
Heb ik een betaald account nodig?+
Nee, het gratis account geeft toegang tot alle routes, met 100 verzoeken per minuut en 1.000 verzoeken per dag. Betaalde abonnementen heffen het daglimiet op.
Wat als SIRET en btw-nummer niet overeenkomen?+
Vraag uw tegenpartij het paar nummers te bevestigen voordat u factureert. De lijst met controles toont of het SIRET bestaat, actief is en naar dezelfde onderneming wijst als het btw-nummer.
Verder lezen
- E-FACTURATIEE-facturatie Frankrijk 2026: de lijst van verplichte factuurvermeldingenChecklist van de vermeldingen op een Franse factuur en de vier nieuwe van de hervorming: SIREN klant, levering, aard, debetstelsel.
- FACTURATIEKan uw Franse klant e-facturen ontvangen?Zoek het erkende platform van een Franse klant op in het officiële register en wat de planning 2026-2027 voorschrijft.
- E-FACTURATIEE-facturatie in Frankrijk 2026: waarom het SIREN van uw klanten verplicht wordtDe vier nieuwe verplichte vermeldingen, de tijdlijn 2026-2027 en hoe u het SIREN van uw klanten controleert.
- APIAPI voor controle van intracommunautaire btw in JSONControleer een btw-nummer in één aanroep: formaat, bedrijf, status geldig of ongeldig. Frankrijk, België, Zwitserland, Noorwegen, Finland, Letland, Zweden, Estland, Litouwen. Vaste prijs.