E-Rechnung für Apps, die über Stripe kassieren
Aus jeder Stripe-Zahlung wird eine ZUGFeRD-Rechnung — mit einer Edge Function und einem API-Aufruf.
Du hast deine App mit einem KI-Baukasten oder von Hand gebaut, und Stripe Checkout kassiert. Aus der Zahlung soll eine E-Rechnung mit strukturiertem Datensatz werden. Dafür brauchst du keinen zweiten Dienst mit eigenem Bestellmodell: Eine Edge Function hört auf das Zahlungsereignis, baut die Rechnungsdaten und ruft einen Endpoint auf. Zurück kommt ein PDF, das zugleich die XML-Rechnung enthält.
Was reinkommt
Das Stripe-Ereignis checkout.session.completed mit Käufer und Betrag
Die Positionen der Session, bei Stripe nachgeladen
Deine Rechnungsnummer, beim Anlegen der Session als Metadatum gesetzt
Deine Firmendaten: Name, Anschrift, USt-IdNr., Bankverbindung
Was das löst
Ein Aufruf, kein Bestellmodell
Du schickst die Rechnungsdaten als JSON und bekommst die Datei in derselben Antwort. Es gibt nichts abzugleichen und nichts abzufragen.
Code, der gelaufen ist
Die Edge Function im Rezept haben wir unverändert gegen die echte API ausgeführt. Was dabei echt war und was nachgestellt, steht unter dem Code.
Deine KI kann die Spec lesen
Die OpenAPI-Datei ist öffentlich. Gib sie deinem Baukasten oder Assistenten: Darin stehen Felder, Pflichtangaben und Fehlercodes.
Doppelte Ereignisse erkennst du selbst
Stripe kann ein Ereignis mehrfach zustellen. Die Antwort trägt payloadHash: gleiche Rechnungsdaten, gleicher Wert. Speichere die Datei unter diesem Wert, und eine zweite Zustellung legt keine zweite Datei an.
Ein echtes Beispiel
Ausschnitt aus dem Rezept „Aus einer Stripe-Zahlung eine E-Rechnung machen“ — die Felder, die die Function aus der Zahlung ableitet.
{ "invoice": { "invoiceNumber": "RE-2026-0042", "buyer": { "name": "Beispiel AG", "street": "Beispielweg 42", "postalCode": "80331", "city": "München", "countryCode": "DE" }, "taxSummary": [ { "taxRate": 19, "netAmount": 250, "taxAmount": 47.5 } ], "total": 297.5 }}POST /api/v1/invoice/DE/zugferd/generate
Antwort: ein Base64-kodiertes PDF/A-3 mit eingebettetem EN-16931-XML über 297,50 €, dazu filename und payloadHash.
Das vollständige RezeptDie beteiligten Endpoints
- Invoice CreatorLive
POST /api/v1/invoice/{countryCode}/{format}/generate
Gegenüber der Alternative
Die Alternative ist eine fertige Anwendung wie Rechnungskit, die Rechnung, Archiv und DATEV-Export für deutsche Shops übernimmt. Das passt, wenn du nichts bauen willst. Wenn du nur das Rechnungsdokument brauchst und den Rest selbst in der Hand behältst, reicht der eine Aufruf.
Zum VergleichSo läuft es
- 1
Checkout-Session mit metadata.invoice_number und Pflicht-Rechnungsadresse anlegen.
- 2
Edge Function aus dem Rezept als Stripe-Webhook für checkout.session.completed eintragen.
- 3
Die Function ruft POST /api/v1/invoice/DE/zugferd/generate auf; du speicherst das PDF und schickst es dem Käufer.
Was es bei diesem Umfang kostet
Rund 200 Rechnungen im Monat liegen im Tarif Starter bei 23 € pro Monat.
Alle Preise netto, zzgl. USt. · 20 % Rabatt bei Jahreszahlung · Free-Tier ohne Kreditkarte
Alle TarifeGrenzen
- Rechnungsnummern vergibt deine App. Die API prüft nicht, ob eine Nummer schon vergeben ist.
- Ein Archiv gibt es bei uns noch nicht (Archive API geplant 2027). Bis dahin speicherst du die Rechnung selbst.
- Den Steuersatz leitet das Beispiel aus den Beträgen von Stripe ab. Für Verkäufe ins EU-Ausland, Reverse Charge oder mehrere Sätze je Position brauchst du die Angaben aus Stripe Tax oder aus deiner eigenen Logik.
- Gutschriften und Stornos bei Erstattungen sind eigene Aufrufe; das Beispiel deckt nur die bezahlte Bestellung ab.
- In einem bestimmten Baukasten haben wir die Function nicht selbst gebaut. Geprüft ist sie als Supabase Edge Function außerhalb von Supabase, mit dem echten Aufruf an unsere API.
Häufige Fragen
Funktioniert das in Lovable, Bolt oder einem anderen KI-Baukasten?
Wir haben es dort nicht selbst gebaut und behaupten es deshalb nicht. Der Code ist eine gewöhnliche Supabase Edge Function. Wenn dein Baukasten Supabase Edge Functions und Stripe-Webhooks nutzt, gehört sie genau dorthin; die Secrets legst du in den Einstellungen deines Supabase-Projekts ab.
Reicht die Rechnung von Stripe nicht aus?
Für eine E-Rechnung nach EN 16931 braucht es einen strukturierten Datensatz, also XML, allein oder im PDF eingebettet. Ob und ab wann du im deutschen B2B solche Rechnungen ausstellen musst, hängt von deinem Umsatz ab: ab 2027 über 800.000 € Vorjahresumsatz, ab 2028 alle übrigen; Ausnahmen wie Kleinbetragsrechnungen bleiben.
Was kostet das bei wenigen Rechnungen?
Bis 20 Rechnungen im Monat nichts. Darüber rechnet der Preisrechner auf der Preisseite deinen Fall aus; alle Preise netto, zzgl. USt.