DueBuddy
← DueBuddy

DueBuddy APIDueBuddy API

Eingehende Rechnungen per API verarbeiten: Rechnung hochladen — Felder und eine Datei für die Buchhaltung erhalten. Guthabenmodell, kein Abonnement.Eingehende Rechnungen über REST verarbeiten: Dokument hochladen, strukturierte Felder und einen buchhaltungsfertigen Export erhalten. Vorausbezahltes Guthaben, kein Abonnement.

Was die API machtWas die API macht

Nimmt eine eingehende Rechnung eines anderen Unternehmens (von einem Lieferanten) entgegen und gibt strukturierte Daten sowie eine Datei für die Buchhaltung zurück. Wir stellen keine Rechnungen aus und nehmen keine Zahlungen entgegen — nur Verarbeitung.Nimmt eine eingehende Lieferantenrechnung entgegen und gibt strukturierte Felder sowie eine buchhaltungsfertige Datei zurück. Wir stellen keine Rechnungen aus und nehmen keine Zahlungen entgegen — nur Verarbeitung.

Elektronische Rechnungen lesen wir per Code — präzise und kostenlos. Sie bezahlen nur für Scans und Fotos.Elektronische Rechnungen werden per Code verarbeitet — präzise und kostenlos. Sie bezahlen nur für Scans und Fotos.

SchnellstartSchnellstart

  1. Laden Sie im Dashboard Guthaben auf (ab 8 € / 790 ₽).Laden Sie im Dashboard Guthaben auf (ab €8 / ₽790).
  2. Erstellen Sie einen API-Schlüssel. Der Schlüssel wird nur einmal angezeigt — speichern Sie ihn sicher.Erstellen Sie einen API-Schlüssel. Der Schlüssel wird nur einmal angezeigt — speichern Sie ihn sicher.
  3. Übergeben Sie den Schlüssel im Header X-Api-Key.Übergeben Sie den Schlüssel im Header X-Api-Key.

AuthentifizierungAuthentifizierung

X-Api-Key: your_api_key_here

EndpunkteEndpunkte

MethodeMethodePfadZweckZweck
POST/v1/parseRechnung hochladen (multipart: file, country)Rechnung hochladen (multipart: file, country)
GET/v1/parse/{job_id}Verarbeitungsergebnis und FelderAuftragsstatus und verarbeitete Felder
GET/v1/usageVerbrauch und verbleibendes GuthabenVerbrauch und verbleibendes Guthaben
GET/v1/pricePreis (öffentlich, ohne Schlüssel)Preis (öffentlich, ohne Schlüssel)
GET/v1/countriesLänder und Formate (öffentlich)Länder und Formate (öffentlich)

Interaktive Dokumentation: /docs · /redoc · openapi.jsonInteraktive Referenz: /docs · /redoc · openapi.json

BeispieleBeispiele

curl

curl -X POST https://duebuddy.work/v1/parse \
  -H "X-Api-Key: your_api_key_here" \
  -F "country=de" \
  -F "[email protected]"

# {"ok":true,"job_id":41,"status":"queued","charged":true}

curl https://duebuddy.work/v1/parse/41 \
  -H "X-Api-Key: your_api_key_here"

Python

import requests, time

BASE = "https://duebuddy.work/v1"
HEAD = {"X-Api-Key": "your_api_key_here"}

def parse(path, country="de"):
    with open(path, "rb") as f:
        r = requests.post(f"{BASE}/parse", headers=HEAD,
                          files={"file": f}, data={"country": country}, timeout=60)
    r.raise_for_status()
    job = r.json()
    for _ in range(30):                      # ждём результат
        time.sleep(2)
        out = requests.get(f"{BASE}/parse/{job['job_id']}", headers=HEAD, timeout=30).json()
        if out.get("status") in ("done", "failed"):
            return out
    raise TimeoutError("parse timeout")

res = parse("invoice.pdf", "de")
print(res["fields"])                          # поля счёта

JavaScript / Node

const fd = new FormData();
fd.append("country", "us");
fd.append("file", fileInput.files[0]);

const r = await fetch("https://duebuddy.work/v1/parse", {
  method: "POST",
  headers: { "X-Api-Key": API_KEY },
  body: fd
});
const { job_id } = await r.json();
const out = await fetch(`https://duebuddy.work/v1/parse/${job_id}`,
  { headers: { "X-Api-Key": API_KEY } }).then(r => r.json());
console.log(out.fields);

Desktop-Anwendung (Drag-and-drop)Desktop-Anwendung (Drag-and-drop)

Speichern Sie die Datei als parse.html und öffnen Sie sie im Browser — ziehen Sie eine Datei hinein und erhalten Sie das Ergebnis. Der Schlüssel bleibt ausschließlich in Ihrem Browser.Speichern Sie die Datei als parse.html, öffnen Sie sie im Browser und legen Sie eine Datei darin ab. Der Schlüssel bleibt ausschließlich in Ihrem Browser.

<!doctype html>
<meta charset="utf-8">
<title>DueBuddy parse</title>
<style>body{font:15px system-ui;margin:40px;max-width:640px}
#d{border:2px dashed #999;border-radius:12px;padding:40px;text-align:center}
pre{background:#f4f4f5;padding:14px;border-radius:8px;overflow:auto}</style>

<input id="k" placeholder="API key" style="width:100%;padding:8px">
<div id="d">Drop an invoice here (PDF / JPG / PNG / XML)</div>
<pre id="o">—</pre>

<script>
const d = document.getElementById("d"), o = document.getElementById("o");
d.ondragover = e => e.preventDefault();
d.ondrop = async e => {
  e.preventDefault();
  const f = e.dataTransfer.files[0];
  const fd = new FormData();
  fd.append("country", "de");
  fd.append("file", f);
  const head = { "X-Api-Key": document.getElementById("k").value };
  const j = await fetch("https://duebuddy.work/v1/parse",
              { method: "POST", headers: head, body: fd }).then(r => r.json());
  o.textContent = JSON.stringify(j, null, 2);
  for (let i = 0; i < 30; i++) {
    await new Promise(r => setTimeout(r, 2000));
    const out = await fetch("https://duebuddy.work/v1/parse/" + j.job_id,
                  { headers: head }).then(r => r.json());
    o.textContent = JSON.stringify(out, null, 2);
    if (out.status === "done" || out.status === "failed") break;
  }
};
</script>

Was wir lesenWas wir lesen

Was wir zurückgebenWas wir zurückgeben

{
  "ok": true,
  "job_id": 41,
  "status": "done",
  "fields": {
    "invoice_number": "RE-2026-04871",
    "invoice_date": "2026-09-14",
    "due_date": "2026-10-14",
    "vendor_name": "Hartmann GmbH",
    "net_amount": "1048.74",
    "vat_amount": "199.26",
    "gross_amount": "1248.00",
    "currency": "EUR"
  },
  "fields_detailed": [{"key": "gross_amount", "value": "1248.00", "edited": false}]
}

Die Felder hängen von country ab. Zusätzlich sind länderspezifische Exporte verfügbar: XRechnung, ZUGFeRD, DATEV, 1С, UBL, FatturaPA und weitere.Der Feldumfang hängt von country ab. Zusätzlich sind länderspezifische Exporte verfügbar: XRechnung, ZUGFeRD, DATEV, 1C, UBL, FatturaPA und weitere.

FehlerFehler

CodeCodedetailGrundGrund
400unsupported_countryLand wird nicht unterstütztLand wird nicht unterstützt
400unsupported_file_typeNicht PDF/JPG/PNG/XMLNicht PDF/JPG/PNG/XML
400empty_fileLeere DateiLeere Datei
413file_too_largeDatei überschreitet das LimitDatei überschreitet das Limit
429rate_limitedMehr als 120 Anfragen pro MinuteMehr als 120 Anfragen pro Minute

Limits und AbrechnungLimits und Abrechnung

Siehe auchSiehe auch

Wir verarbeiten eingehende Rechnungen. Wir stellen keine Rechnungen in Ihrem Namen aus und nehmen keine Zahlungen für Sie entgegen.Wir verarbeiten eingehende Rechnungen. Wir stellen keine Rechnungen in Ihrem Namen aus und nehmen keine Zahlungen für Sie entgegen.