Jsonpage · SIREN- und SIRET-API

API zur Prüfung von SIREN und USt-IdNr. Ihrer E-Rechnungen

Eine französische E-Rechnung enthält die SIREN des Kunden und, je nach Fall, SIRET und USt-IdNr. beider Parteien. Eine falsche Nummer oder ein geschlossenes Unternehmen fällt zu spät auf, bei der Ablehnung der Rechnung.

01 / WARUM

Warum die Nummern vor der Rechnung prüfen

Diese Seite zeigt, wie Sie diese Nummern mit einem API-Aufruf prüfen, bevor Sie eine Rechnung ausstellen oder die eines Lieferanten verbuchen, mit Beispielen in curl, JavaScript, Python, PHP und Ruby.

Die E-Rechnung wird in Frankreich schrittweise eingeführt: Alle Unternehmen müssen ab September 2026 elektronische Rechnungen empfangen können, und die Ausstellungspflicht erreicht ab September 2027 kleine und Kleinstunternehmen. Der offizielle Zeitplan steht auf impots.gouv.fr (auf Französisch). Die SIREN des Kunden wird zur Angabe auf der Rechnung: siehe was die E-Rechnung für die SIREN ändert und die Liste der Pflichtangaben.

Zwei Zeitpunkte eignen sich für eine automatische Prüfung. Bei der Ausstellung prüfen Sie den Käufer: Die Nummer existiert, das Unternehmen ist aktiv, SIRET und USt-IdNr. gehören zum selben Unternehmen. Beim Empfang prüfen Sie den Verkäufer, bevor Sie verbuchen und zahlen, was auch das Risiko einer gefälschten Rechnung senkt.

Was die API prüftDie Identifikationsnummern und das Unternehmen, auf das sie verweisen. Die Rechnung selbst prüft sie nicht: Dateiformat und Inhalt sind Sache Ihrer Rechnungssoftware oder Ihrer Plattform.
02 / AUFRUF

Ein Aufruf für SIRET und USt-IdNr.

Die Route GET /v2/validate nimmt eine globale Kennung, eine SIRET, eine USt-IdNr. oder mehrere zugleich. Jede Prüfung kommt mit ihrem Ergebnis zurück, und valid ist nur wahr, wenn alle Prüfungen bestehen. Der API-Schlüssel gehört in den Header X-API-Key.

curl "https://api.jsonpage.com/v2/validate?siret=55203253400646&vat=FR27552032534" \
  -H "X-API-Key: $JSONPAGE_API_KEY"

Antwort (Auszug):

{
  "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" }
  }
}

Leerzeichen, Punkte und Bindestriche werden in SIRET und USt-IdNr. ignoriert, Sie müssen die Eingabe also nicht vorab bereinigen. USt-IdNr. aller Länder der Europäischen Union werden akzeptiert, nicht nur französische.

03 / ERGEBNIS

Das Ergebnis lesen und entscheiden

Bleiben Sie nicht bei valid stehen: Die Liste checks sagt, welche Prüfung fehlgeschlagen ist und was Sie Ihrem Gegenüber also fragen müssen.

ErgebnisWas es bedeutetWas vor der Rechnung zu tun ist
valid: trueAlle Prüfungen sind bestanden.Weitermachen: Rechnung ausstellen oder verbuchen.
siret_key oder vat_format fehlgeschlagenDie Nummer ist falsch eingegeben: Tippfehler oder falsche Prüfziffer.Die Nummer an der Quelle korrigieren und die Prüfung wiederholen.
company_active fehlgeschlagenDie Nummer existiert, aber das Unternehmen oder die Niederlassung ist geschlossen.Vor dem Weitermachen beim Kunden oder Lieferanten eine aktuelle Nummer erfragen.
identifiers_match fehlgeschlagenSIRET und USt-IdNr. gehören nicht zum selben Unternehmen.Das richtige Nummernpaar bestätigen lassen.
vat unverifiableDer Dienst des Landes hat nicht geantwortet: Die Nummer gilt nicht als falsch.Später erneut versuchen; nicht als ungültig behandeln.

Für viele Nummern auf einmal, etwa eine ganze Kundendatei vor dem ersten Rechnungslauf, übernimmt die Seite Kundendatei die Prüfung ohne Programmierung, und das Vorgehen zum Bereinigen einer Kundendatei beschreibt die Schritte.

04 / CODE

Codebeispiele

Dieselbe Prüfung in vier Sprachen, zum Einbinden in Ihre Rechnungssoftware oder Ihr ERP. Der Schlüssel wird aus einer Umgebungsvariablen gelesen: Legen Sie ihn nie in eine Seite oder in eine an Nutzer verteilte Anwendung.

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
05 / GRENZEN

Was die API nicht tut

Die API prüft Nummern und das Unternehmen, auf das sie verweisen. Sie validiert nicht die Rechnungsdatei (Struktur, Felder, Übereinstimmung mit dem geforderten Format), übermittelt die Rechnung nicht an eine Plattform und ersetzt nicht den Rat Ihrer Steuerberatung. Eine USt-IdNr. mit dem Ergebnis „derzeit nicht prüfbar“ ist keine falsche Nummer: Versuchen Sie es später erneut.

Beim Volumen sind die Routen pro Minute begrenzt; darüber ist die Antwort 429 mit einem Header Retry-After: Warten Sie so lange, bevor Sie es erneut versuchen. Für eine große Menge senkt die Batch-Route (100 Unternehmen pro Aufruf) die Zahl der Aufrufe. Siehe die Dokumentation.

06 / HÄUFIGE FRAGEN

Häufige Fragen

Sollte ich die SIREN vor jeder Rechnung prüfen?+

Mindestens beim Anlegen des Kunden oder Lieferanten, danach wenn eine Rechnung abgelehnt wird oder sich eine Zahlungsangabe ändert. Eine Prüfung bei der Ausstellung vermeidet, dass eine Rechnung an ein geschlossenes Unternehmen oder eine falsche Nummer geht.

Validiert die API meine E-Rechnung?+

Nein. Sie prüft die Identifikationsnummern (SIREN, SIRET, USt-IdNr.) und das Unternehmen, auf das sie verweisen. Format und Inhalt der Rechnungsdatei hängen von Ihrer Software oder Plattform ab.

Kann ich die USt-IdNr. eines ausländischen Lieferanten prüfen?+

Ja. Die Prüfroute akzeptiert USt-IdNr. der Länder der Europäischen Union. Antwortet der Dienst des Landes nicht, lautet das Ergebnis „nicht prüfbar“, was nicht dasselbe ist wie eine ungültige Nummer.

Brauche ich ein kostenpflichtiges Konto?+

Nein, das kostenlose Konto bietet alle Routen, mit 100 Anfragen pro Minute und 1.000 Anfragen pro Tag. Kostenpflichtige Tarife heben die Tagesgrenze auf.

Was, wenn SIRET und USt-IdNr. nicht zusammenpassen?+

Bitten Sie Ihr Gegenüber, das Nummernpaar vor der Rechnung zu bestätigen. Die Liste der Prüfungen zeigt, ob die SIRET existiert, aktiv ist und zum selben Unternehmen gehört wie die USt-IdNr.

07 / VERWANDTE ARTIKEL

Weiterlesen

API

Probieren Sie es mit Ihren eigenen Nummern

Das kostenlose Konto bietet die Prüfroute: 100 Anfragen pro Minute, ohne Kreditkarte.