Zum Inhalt springen

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

01

Ein Aufruf, kein Bestellmodell

Du schickst die Rechnungsdaten als JSON und bekommst die Datei in derselben Antwort. Es gibt nichts abzugleichen und nichts abzufragen.

02

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.

03

Deine KI kann die Spec lesen

Die OpenAPI-Datei ist öffentlich. Gib sie deinem Baukasten oder Assistenten: Darin stehen Felder, Pflichtangaben und Fehlercodes.

04

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.

json
{
"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 Rezept

Die beteiligten Endpoints

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 Vergleich

So läuft es

  1. 1

    Checkout-Session mit metadata.invoice_number und Pflicht-Rechnungsadresse anlegen.

  2. 2

    Edge Function aus dem Rezept als Stripe-Webhook für checkout.session.completed eintragen.

  3. 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 Tarife

Grenzen

  • 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.

Aus der Zahlung wird die E-Rechnung — mit einem Aufruf.