Invovate ← Zurück zum Rechnungsgenerator

Rechnungsgenerator API

Professionelle PDF-Rechnungen programmatisch über eine einfache REST API erstellen

v1.0

Übersicht

Die Invovate Rechnungs-API ermöglicht Entwicklern die automatisierte Erstellung professioneller Rechnungen über einen einfachen HTTP-POST-Aufruf. Sie können zwischen einer strukturierten JSON-Antwort mit allen Berechnungen oder einem direkten PDF-Download wählen. Die API unterstützt 11 Sprachen, mehr als 20 Währungen und 5 Designvorlagen — ideal für deutsche Freiberufler, SaaS-Unternehmen und Buchhaltungsanwendungen.

Kostenlos starten

40 Anfragen/Stunde, keine Kreditkarte

JSON oder PDF

Wählen Sie Ihr Ausgabeformat

MwSt.-Berechnung

Pro Position oder global (19%/7%)

Mehrsprachig

de, en, fr, nl, es und mehr

Basis-URL:
https://invovate.com/api

Schnellstart

Ihre erste Rechnung in drei Schritten erstellen:

Schritt 1 — Konto erstellen
Registrieren Sie sich kostenlos auf invovate.com und verifizieren Sie Ihre E-Mail-Adresse.
Schritt 2 — API-Schlüssel abrufen
Öffnen Sie das Dashboard und klicken Sie auf "API-Schlüssel generieren". Ihr Schlüssel beginnt mit inv_.
Schritt 3 — Ersten Aufruf durchführen
curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_ihrApiSchluessel" \ -d '{ "from": {"name": "Muster GmbH"}, "to": {"name": "Kunde GmbH"}, "items": [{"description": "Beratung", "quantity": 1, "unit_price": 2000, "tax_rate": 19}], "invoice": {"currency": "EUR", "language": "de"} }'

Authentifizierung

Die API unterstützt drei Authentifizierungsmethoden:

1. API-Schlüssel (empfohlen für serverseitige Nutzung)

Authorization: Bearer inv_ihrApiSchluesselHier

2. Sitzungs-Cookie (für Webanwendungen)

Wenn Sie über den Browser eingeloggt sind, wird das Sitzungs-Cookie inv_session automatisch mitgesendet.

3. Anonym (ohne Authentifizierung)

Aufrufe ohne Authentifizierung sind möglich, aber auf JSON-Ausgabe beschränkt und werden per IP-Adresse limitiert. Geeignet zum Testen der API.

Sicherheit: Verarbeiten Sie Ihren API-Schlüssel niemals in clientseitigem Code oder speichern Sie ihn in einem Git-Repository. Verwenden Sie Umgebungsvariablen auf Ihrem Server.

Limits & Tarife

TarifPreisPro StundePro Woche
Kostenlos0 €40400
Starter9 €/Monat2004.000
Pro29 €/Monat1.00040.000
EnterpriseAuf AnfrageUnbegrenztUnbegrenzt

Die Limits werden über die Antwort-Header zurückgegeben:

X-RateLimit-Limit-Hourly: 40 X-RateLimit-Remaining-Hourly: 39 X-RateLimit-Reset-Hourly: 1712123456 X-RateLimit-Limit-Weekly: 400 X-RateLimit-Remaining-Weekly: 399 X-RateLimit-Reset-Weekly: 1712345678

Rechnung erstellen

POST
/api/generate-invoice

Erstellt eine Rechnung und gibt entweder JSON mit allen Berechnungen oder eine binäre PDF-Datei zurück.

Anforderungsformat

Absender (from)

FeldTypPflichtBeschreibung
from.namestringJaIhr Unternehmensname
from.addressstringNeinIhre Unternehmensadresse
from.emailstringNeinIhre E-Mail-Adresse
from.tax_idstringNeinUSt-IdNr. (z.B. DE123456789)

Empfänger (to)

FeldTypPflichtBeschreibung
to.namestringJaName des Kunden oder Unternehmens
to.addressstringNeinAdresse des Kunden
to.emailstringNeinE-Mail-Adresse des Kunden

Rechnungsdaten (invoice)

FeldTypStandardBeschreibung
invoice.numberstringAutoRechnungsnummer
invoice.datestringHeuteRechnungsdatum (JJJJ-MM-TT)
invoice.due_datestringFälligkeitsdatum (JJJJ-MM-TT)
invoice.currencystringUSDWährungscode (z.B. EUR)
invoice.languagestringenSprachcode (z.B. de)
invoice.termsstringZahlungsbedingungen
invoice.po_numberstringBestellnummer

Positionen (items-Array)

FeldTypPflichtBeschreibung
descriptionstringJaBeschreibung der Leistung oder des Produkts
quantitynumberJaAnzahl der Einheiten
unit_pricenumberJaPreis pro Einheit (netto)
discountnumberNeinRabatt (Prozent oder Betrag)
discount_typestringpercent"percent" oder "amount"
tax_ratenumberNeinMwSt.-Satz pro Position (z.B. 19)

Weitere Felder

FeldTypBeschreibung
global_taxnumberGlobaler MwSt.-Satz (gilt wenn kein positionsspezifischer Satz gesetzt)
global_discountnumberRabatt auf den Gesamtbetrag
global_discount_typestring"percent" oder "amount"
amount_paidnumberBereits bezahlter Betrag (für Teilzahlung)
notesstringAnmerkungen am Ende der Rechnung
refund_policystringRückerstattungsrichtlinie
templatestringVorlagenname: classic, modern, bold, minimal, navy
outputstring"json" (Standard) oder "pdf"

Antwortformat

JSON-Antwort (output: "json")

{ "success": true, "invoice": { "number": "RE-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "de", "template": "classic", "from": { "name": "Muster GmbH", "tax_id": "DE123456789" }, "to": { "name": "Kunde GmbH" }, "items": [ { "description": "Webentwicklung", "quantity": 1, "unit_price": 2000, "discount": 0, "tax_rate": 19, "tax_amount": 380.00, "line_total": 2380.00 } ], "subtotal": 2000.00, "global_discount": 0, "total_tax": 380.00, "grand_total": 2380.00, "amount_paid": 0, "balance_due": 2380.00, "notes": "Vielen Dank fuer Ihren Auftrag!" }, "meta": { "processing_ms": 12, "credits_remaining": { "hourly": 39, "weekly": 399 }, "rate_limits": { "hourly": { "limit": 40, "used": 1, "reset_at": 1712123456 }, "weekly": { "limit": 400, "used": 1, "reset_at": 1712345678 } } } }

PDF-Antwort (output: "pdf")

Gibt eine binäre PDF-Datei mit folgenden Headern zurück:

Content-Type: application/pdf Content-Disposition: attachment; filename="rechnung.pdf"

Fehlercodes

{ "success": false, "error": { "message": "Mindestens eine Position ist erforderlich" } }
HTTP-StatusBedeutung
400Validierungsfehler — prüfen Sie Ihr Anforderungsformat
401Authentifizierung erforderlich oder API-Schlüssel ungültig
403E-Mail-Adresse nicht verifiziert
429Ratenlimit überschritten
500Interner Serverfehler

Authentifizierungs-Endpoints

MethodePfadBeschreibung
POST/api/auth/registerKonto mit E-Mail und Passwort erstellen
POST/api/auth/loginEinloggen, gibt Sitzungs-Cookie zurück
POST/api/auth/logoutAusloggen
GET/api/auth/meAktuelle Benutzerinfos und API-Schlüssel abrufen
POST/api/auth/generate-api-keyNeuen API-Schlüssel generieren (verifizierte E-Mail erforderlich)

Codebeispiele

cURL — PDF-Rechnung mit MwSt.

curl -X POST https://invovate.com/api/generate-invoice \ -H "Content-Type: application/json" \ -H "Authorization: Bearer inv_ihrApiSchluessel" \ -d '{ "from": { "name": "Webdesign Berlin GmbH", "address": "Unter den Linden 10, 10117 Berlin", "tax_id": "DE123456789" }, "to": { "name": "Auftraggeber GmbH", "address": "Maximilianstr. 1, 80539 Muenchen", "email": "[email protected]" }, "invoice": { "number": "RE-2026-042", "date": "2026-04-03", "due_date": "2026-05-03", "currency": "EUR", "language": "de", "terms": "30 Tage netto" }, "items": [ {"description": "Website-Entwicklung", "quantity": 1, "unit_price": 4500, "tax_rate": 19}, {"description": "SEO-Beratung", "quantity": 10, "unit_price": 120, "tax_rate": 19} ], "notes": "Vielen Dank fuer Ihren Auftrag!", "template": "modern", "output": "pdf" }' --output rechnung.pdf

JavaScript (Node.js)

// Rechnung mit der Invovate API erstellen const response = await fetch('https://invovate.com/api/generate-invoice', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer inv_ihrApiSchluessel' }, body: JSON.stringify({ from: { name: 'Muster GmbH', tax_id: 'DE123456789' }, to: { name: 'Kunde GmbH', email: '[email protected]' }, invoice: { number: 'RE-001', currency: 'EUR', language: 'de', due_date: '2026-05-03' }, items: [{ description: 'Beratungsleistung', quantity: 8, unit_price: 150, tax_rate: 19 }], output: 'json' }) }); const data = await response.json(); if (data.success) { console.log('Gesamtbetrag (inkl. MwSt.):', data.invoice.grand_total, 'EUR'); console.log('Verbleibende Anfragen (stundlich):', data.meta.credits_remaining.hourly); }

Python

import requests API_KEY = "inv_ihrApiSchluessel" URL = "https://invovate.com/api/generate-invoice" rechnung = { "from": { "name": "Freelancer Hamburg", "tax_id": "DE123456789" }, "to": { "name": "Kundenunternehmen GmbH", "address": "Koenigsallee 1, 40212 Duesseldorf" }, "invoice": { "number": "RE-2026-001", "currency": "EUR", "language": "de", "terms": "30 Tage netto" }, "items": [ {"description": "Grafikdesign", "quantity": 1, "unit_price": 1200, "tax_rate": 19}, {"description": "Druckdaten", "quantity": 3, "unit_price": 80, "tax_rate": 19} ], "output": "pdf" } response = requests.post(URL, json=rechnung, headers={"Authorization": f"Bearer {API_KEY}"}) if response.status_code == 200: with open("rechnung.pdf", "wb") as f: f.write(response.content) print("Rechnung gespeichert als rechnung.pdf") else: print(f"Fehler: {response.json()['error']['message']}")

Unterstützte Sprachen

CodeSpracheSchreibrichtung
deDeutschLTR
enEnglischLTR
nlNiederländischLTR
frFranzösischLTR
esSpanischLTR
itItalienischLTR
ptPortugiesischLTR
ruRussischLTR
hiHindiLTR
jaJapanischLTR
arArabischRTL

PDF-Vorlagen

NameStil
classicBlauer Akzent, abwechselnde graue Zeilen (Standard)
modernTeal/Cyan, klares modernes Design
boldDunkle Anthrazit-Kopfzeile, hoher Kontrast
minimalHellgrau, randlos
navyTiefblaue Kopfzeile mit goldenem Akzentstreifen

Unterstützte Währungen

EUR, USD, GBP, JPY, CAD, AUD, CHF, CNY, INR, AED, SAR, SGD, NZD, KRW, BRL, MXN, ZAR, SEK, NOK, DKK