XRechnung & ZUGFeRD Prüfung

Laden Sie Ihre XML- oder PDF-Rechnung hoch, um die enthaltenen Daten zu analysieren.

Unser E-Rechnung/ZUGFeRD Analyse-Tool erlaubt es Ihnen sicherzustellen, dass Ihre E-Rechnungen valide Informationen enthalten. Nach der Auswertung werden Ihre PDF- und XML-Dateien von unseren Servern automatisch gelöscht.

Datei reinziehen oder klicken

Unterstützte Formate: .xml, .pdf (ZUGFeRD/XRechnung)

Metadaten
Extrahiertedaten (XPath)
XPath Wert Hinweise
POST https://www.bytes-commerce.de/api/invoice/insights

Eine PDF-Rechnung hochladen, um strukturierte Erkenntnisse zu extrahieren. Gibt eine InvoiceInsights-Ressource mit den extrahierten Daten sowie einer id und einem secret für den späteren Abruf zurück.

Wann verwenden: Diesen Endpunkt verwenden, wenn eine neue PDF-Rechnung erstmals verarbeitet wird.
Hinweis: Invoices uploaded via API will always be stored for 90 days. Do not upload sensitive data via API.
Codebeispiele
curl -X POST "https://www.bytes-commerce.de/api/invoice/insights" \
  -H "Content-Type: application/json" \
  -d '{
    "base64": "BASE64_ENCODED_PDF_CONTENT"
  }'
<?php
$pdfBase64 = base64_encode(file_get_contents('invoice.pdf'));

$payload = json_encode([
    'base64' => $pdfBase64,
], JSON_THROW_ON_ERROR);

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => 'https://www.bytes-commerce.de/api/invoice/insights',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Accept: application/json',
    ],
    CURLOPT_POSTFIELDS => $payload,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);
// Browser: pdfFile is a File (from <input type="file">)
const arrayBuffer = await pdfFile.arrayBuffer();
const bytes = new Uint8Array(arrayBuffer);

// Convert bytes -> base64
let binary = '';
for (const b of bytes) binary += String.fromCharCode(b);
const pdfBase64 = btoa(binary);

const response = await fetch('https://www.bytes-commerce.de/api/invoice/insights', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify({ base64: pdfBase64 })
});

if (!response.ok) throw new Error(`HTTP ${response.status}`);

const data = await response.json();
console.log(data.id, data.secret);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;

HttpClient client = HttpClient.newHttpClient();

byte[] pdfBytes = Files.readAllBytes(Path.of("invoice.pdf"));
String pdfBase64 = Base64.getEncoder().encodeToString(pdfBytes);

String json = """
{
  "base64": "%s"
}
""".formatted(pdfBase64);

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://www.bytes-commerce.de/api/invoice/insights"))
    .header("Content-Type", "application/json")
    .header("Accept", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() == 200 || response.statusCode() == 201) {
    String body = response.body();
    // Parse JSON as needed
} else {
    throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
}
Tipp: Bei Erfolg die id und das secret aus der Antwort speichern – sie werden später zum Abruf der zwischengespeicherten Erkenntnisse benötigt.
GET https://www.bytes-commerce.de/api/invoice/insights/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?secret=... Ersetze xxx durch deine UUID aus der Anfrage

Zuvor verarbeitete Rechnungserkenntnisse mit id und secret aus der POST-Anfrage abrufen. Zwischengespeicherte Ergebnisse sind bis zu 90 Tage verfügbar.

Wann verwenden: Diesen Endpunkt verwenden, um Erkenntnisse für eine bereits verarbeitete PDF abzurufen, ohne die Datei erneut hochzuladen.
Codebeispiel
curl -X GET "https://www.bytes-commerce.de/api/invoice/insights/{id}?secret={secret}
<?php
$id = 'your-uuid-here';
$secret = 'your-secret-here';

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => "https://www.bytes-commerce.de/api/invoice/insights/{$id}?secret=" . urlencode($secret),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPGET => true
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);
const id = 'your-uuid-here';
const secret = 'your-secret-here';

const response = await fetch(
  `https://www.bytes-commerce.de/api/invoice/insights/${id}?secret=${encodeURIComponent(secret)}`
);

if (!response.ok) {
  throw new Error(`HTTP ${response.status}`);
}

const data = await response.json();
HttpClient client = HttpClient.newHttpClient();

String id = "your-uuid-here";
String secret = URLEncoder.encode("your-secret-here", StandardCharsets.UTF_8);

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://www.bytes-commerce.de/api/invoice/insights/" + id + "?secret=" + secret))
    .GET()
    .build();

HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());

if (response.statusCode() == 200) {
    String json = response.body();
    // Parse JSON as needed
}
Hinweis: Zwischengespeicherte Erkenntnisse verfallen nach 90 Tage. Wird die Ressource nicht gefunden (404), muss die PDF erneut über den POST-Endpunkt hochgeladen werden.