Zum Inhalt springen
E-Rechnung Software · made in Germany

Rechnungen für deine Lovable-App

Lovable baut deine App und wickelt Zahlungen über Stripe Checkout ab, erstellt aber keine rechtssichere E-Rechnung. Rechnungskit schließt diese Lücke: In der Supabase Edge Function, die Lovable ohnehin für den Stripe-Webhook anlegt, schickst du die Bestellung mit einem API-Aufruf an Rechnungskit. Sobald die Stripe-Zahlung eintrifft, entsteht automatisch eine GoBD-konforme ZUGFeRD-Rechnung nach EN 16931 mit deinem Nummernkreis, DATEV-Export und Archiv.

Ein API-Aufruf aus deiner Supabase Edge Function, und aus jedem Verkauf deiner Lovable-App wird eine konforme E-Rechnung mit DATEV-Export, ohne dass du Buchhaltungslogik selbst baust.

Keine Kreditkarte · Anbindung in unter einer Stunde · persönliches Onboarding
Deine Lovable-App
Espresso-Set Stripe Checkout · bezahlt
49,00 €
POST /v1/orders
RE-2026-0517 E-Rechnung erzeugt
Espresso-Set 41,18 €
Leistungsdatum = Versandtag · zzgl. 19 % USt
ZUGFeRD nach EN 16931 · GoBD-archiviert
Versanddatum aus /v1/fulfillments (§ 13 UStG)
DATEV-Export · Steuersatz je EU-Land
Die Lücke

Rechnungen schreiben ist einfach. Rechtssicher schreiben nicht.

Der Unterschied zwischen einem PDF und einer konformen E-Rechnung entscheidet bei der nächsten Steuerprüfung. Rechnungskit schließt genau diese Lücke.

Ohne RechnungskitMit Rechnungskit
Lovable erzeugt die Stripe-Zahlung, aber nur eine Bestätigung, keine Rechnung ein API-Aufruf in der Edge Function, die Rechnung entsteht automatisch
E-Rechnung nach EN 16931, GoBD-Archiv und Umsatzsteuerlogik fehlen komplett jede Zahlung wird zur ZUGFeRD-Rechnung mit deinem eigenen Nummernkreis
deutsche Steuersätze je Land und Reverse Charge müsstest du selbst bauen Steuersatz je Land, OSS für B2C und Reverse Charge für B2B automatisch
kein fertiger DATEV-Export für deine Steuerkanzlei GoBD-Archiv und fertiger DATEV-Export, ohne eigene Buchhaltungslogik
So funktioniert es

In vier Schritten zur konformen E-Rechnung.

  1. 01
    API-Schlüssel anlegen
    In Rechnungskit unter Einstellungen, API erstellst du einen Schlüssel mit der Berechtigung orders:write (und invoices:read, wenn du die fertige Rechnung abrufen willst). Zum Testen nimmst du einen rk_test_-Schlüssel, der Code bleibt später identisch. Den Schlüssel legst du in Lovable unter Cloud, Secrets ab, nie im Frontend.
  2. 02
    Stripe einmal verbinden
    Deine Lovable-App nutzt bereits deinen eigenen Stripe-Account. Denselben Account verbindest du einmalig in Rechnungskit unter Einstellungen, Verbinden und stellst als Verkaufsgrundlage deine API-Bestellungen ein. So weiß Rechnungskit, dass die Stripe-Zahlung zu deiner per API gemeldeten Bestellung gehört. Diesen Schritt macht kein Code, er läuft einmal im Dashboard.
  3. 03
    Bestellung aus der Edge Function melden
    Lovable legt für den Stripe-Checkout ohnehin eine Supabase Edge Function mit Webhook an. Dort ergänzt du einen Aufruf an POST /v1/orders mit Käuferadresse, Positionen in ganzzahligen Cent und der Stripe-Zahlungsreferenz (payment_intent). Genau dafür sind Edge Functions da: Der Schlüssel bleibt serverseitig, der Aufruf ist ein einzelner fetch.
  4. 04
    Rechnung entsteht automatisch
    Sobald die Stripe-Zahlung bei Rechnungskit eintrifft und zur gemeldeten Bestellung passt, entsteht die E-Rechnung: geprüft nach EN 16931, mit korrektem Steuersatz, GoBD-archiviert und fertig für den DATEV-Export. Bei physischer Ware meldest du zusätzlich den Versand über POST /v1/fulfillments, damit das Leistungsdatum stimmt; bei digitalen Produkten entfällt das. Über GET /v1/orders/{orderNo} holst du dir bei Bedarf die fertige Rechnung samt PDF und XML in deine App zurück.

Lovable baut die App, aber nicht die Rechnung

Mit Lovable baust du in Stunden einen Shop oder eine SaaS und schaltest über Stripe Checkout Zahlungen frei. Was danach fehlt, merkst du erst, wenn das Finanzamt oder deine Steuerkanzlei fragt: Lovable erzeugt eine Zahlung, aber keine Rechnung im deutschen Rechtssinn. Kein strukturierter Beleg nach EN 16931, kein GoBD-Archiv, keine Umsatzsteuerlogik nach Land, kein DATEV-Export. Das alles selbst in deiner App nachzubauen, ist genau die Arbeit, die man mit einem KI-Baukasten eigentlich vermeiden wollte.

Genau diese Lücke schließt Rechnungskit, und zwar dort, wo deine App die Zahlung ohnehin verarbeitet: in der Supabase Edge Function hinter deinem Stripe-Webhook. Ein API-Aufruf, und aus dem Verkauf wird eine ZUGFeRD-Rechnung mit deinem Nummernkreis, revisionssicher archiviert und fertig für die DATEV-Buchung.

Warum das mit Lovable besonders gut zusammenpasst

Eine Lovable-App bringt schon alles mit, was die Anbindung braucht. Sie läuft auf Supabase mit Edge Functions, also serverseitigen Funktionen, und genau so ruft man eine externe API sauber auf: nicht aus dem Browser, sondern aus der Edge Function, mit dem Schlüssel in den Secrets. Für den Stripe-Checkout legt Lovable diese Funktion inklusive Webhook ohnehin an. Du ergänzt dort nur den Aufruf an Rechnungskit. Deshalb ist die Integration weniger neuer Code als ein kleiner Zusatz an einer Stelle, die schon existiert.

Der Aufruf, den du ergänzt

In deiner Edge Function, die den erfolgreichen Stripe-Checkout verarbeitet, kommt ein fetch auf POST /v1/orders dazu. Beträge in ganzzahligen Cent, die Stripe-Zahlungsreferenz als paymentRef, der API-Schlüssel aus den Secrets:

// Supabase Edge Function, nach erfolgreichem Stripe-Checkout
const res = await fetch('https://api.rechnungskit.de/v1/orders', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${Deno.env.get('RECHNUNGSKIT_API_KEY')}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': session.id // Stripe-Session-ID: verhindert Doppel-Belege
  },
  body: JSON.stringify({
    orderNo: session.id,
    paymentRef: session.payment_intent, // pi_... aus Stripe
    email: session.customer_details?.email,
    billingAddress: {
      name: session.customer_details?.name,
      country_code: session.customer_details?.address?.country, // Pflicht für die USt
      postal_code: session.customer_details?.address?.postal_code,
      city: session.customer_details?.address?.city,
      street: session.customer_details?.address?.line1
    },
    items: [
      { name: 'Pro-Plan', quantity: 1, unitGrossCents: 2900, taxRate: 19 }
    ]
  })
})

Das war der Code. Die Rechnung selbst entsteht nicht in diesem Aufruf, sondern sobald die Stripe-Zahlung bei Rechnungskit eintrifft und zur Bestellung passt. Ein bezahlt-Feld gibt es bewusst nicht: Den Zahlungsstatus liefert immer dein Zahlungsdienst, nie der Absender. So kann aus einer abgebrochenen Bestellung nie eine echte Rechnung werden.

Woher kommt der API-Schlüssel?

Den Schlüssel erstellst du in Rechnungskit unter Einstellungen, API (direkt unter app.rechnungskit.de/settings/api). Klick auf Schlüssel erstellen, vergib die Berechtigung orders:write (und invoices:read, wenn du fertige Rechnungen zurückholen willst), und du bekommst den vollständigen Schlüssel genau einmal angezeigt. Zum Ausprobieren nimmst du einen rk_test_-Schlüssel, für den Echtbetrieb rk_live_. Den Wert legst du in Lovable unter Cloud, Secrets ab (zum Beispiel als RECHNUNGSKIT_API_KEY), nie im Frontend. In der Edge Function liest du ihn mit Deno.env.get('RECHNUNGSKIT_API_KEY'), genau wie im Beispiel oben.

Verkaufst du physische Ware? Ein Schritt mehr

Bei rein digitalen Produkten und SaaS bist du mit dem Aufruf oben fertig: Die Rechnung entsteht, sobald die Zahlung passt. Verschickst du dagegen echte Ware, kommt ein zweiter Aufruf dazu, denn das Leistungsdatum auf der Rechnung ist der Versandtag, nicht der Zahltag (§ 13 UStG). Sobald du die Bestellung verschickst, meldest du das mit POST /v1/fulfillments:

// Wenn die Ware rausgeht (z. B. im "als versendet markieren"-Flow deiner App)
await fetch('https://api.rechnungskit.de/v1/fulfillments', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${Deno.env.get('RECHNUNGSKIT_API_KEY')}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': `fulfill-${orderNo}`
  },
  body: JSON.stringify({
    orderNo,                       // dieselbe Bestellnummer wie bei /v1/orders
    status: 'fulfilled',
    shippedAt: new Date().toISOString(),
    trackingNumber: 'DHL-1234567'  // optional
  })
})

Beim Anlegen der Bestellung setzt du dafür requiresShipping: true, dann wartet Rechnungskit auf diese Fulfillment-Meldung, bevor die Rechnung mit dem richtigen Leistungsdatum entsteht. Lässt du requiresShipping weg (Standard), gibt es keine Warte-Stufe und du brauchst /v1/fulfillments nie.

Einmalige Einrichtung, ehrlich benannt

Der Code ist einfach, aber ein paar Dinge richtest du einmal ein, sonst wundert man sich, warum keine Rechnung erscheint. Diese Punkte nimmt dir kein fetch ab:

  • Stripe im Dashboard verbinden und auf API stellen. Deinen Stripe-Account verbindest du einmalig in Rechnungskit unter Einstellungen, Verbinden und wählst als Verkaufsgrundlage deine API-Bestellungen. Erst dann bringt Rechnungskit Zahlung und Bestellung zusammen. Das ist ein Klick-Schritt, kein Code.
  • Länderkürzel mitschicken. Ohne country_code in der Rechnungsadresse lässt sich die Umsatzsteuer nicht bestimmen, und die Bestellung wird abgelehnt. Ein reiner E-Mail-Checkout reicht also nicht.
  • Idempotency-Key setzen. Jeder POST braucht den Header, sonst erzeugt ein doppelt ausgelöster Stripe-Webhook zwei Bestellungen. Die Stripe-Session-ID ist ein guter Wert.
  • Bei 5xx erneut senden. Deployments verursachen kurze Aussetzer. Wiederhol den Aufruf mit etwas Abstand, dann geht keine Bestellung verloren, während die Zahlung schon da ist.
  • Steuersätze deiner Produkte prüfen. Rechnungskit ordnet neue Produkte automatisch zu, du bestätigst die Zuordnung einmal. Fehlt sie, wird der Beleg zurückgestellt, nicht falsch ausgestellt.

Zeig deiner KI die Doku

Rechnungskit veröffentlicht eine vollständige OpenAPI-3.1-Spezifikation unter api.rechnungskit.de/v1/openapi.json. Du kannst sie der KI in Lovable oder ChatGPT direkt geben mit der Bitte, eine Supabase Edge Function zu erzeugen, die nach dem Stripe-Checkout eine Bestellung an Rechnungskit meldet. Weil die Spezifikation die Pflichtfelder und sogar die Wiederhol-Regel enthält, kommt meist eine korrekte Funktion heraus. Den einen Schritt, den die KI nicht aus dem Code kennt, das Verbinden von Stripe im Dashboard, findest du oben. Die komplette Referenz mit lauffähigen Beispielen steht in der API-Dokumentation. Baust du deine App lieber mit Bolt, Replit oder einem anderen Baukasten? Das funktioniert genauso, siehe Rechnungen für no-code und KI-App-Builder.

FAQ

Häufige Fragen zur E-Rechnung Software

Ja, und zwar auf dem Standardweg. Eine Lovable-App ruft externe APIs nicht direkt aus dem React-Frontend auf (das blockiert der Browser per CORS), sondern über eine Supabase Edge Function, die als serverseitiger Proxy dient. Genau diese Funktion legt Lovable für deinen Stripe-Webhook ohnehin an. Du ergänzt dort einen einzigen fetch-Aufruf an Rechnungskit. Den API-Schlüssel legst du in Lovable unter Cloud, Secrets ab, damit er nie im Browser landet.
Stand:

Dieser Beitrag erklärt allgemeine Zusammenhänge und ist keine Steuerberatung (§ 5 StBerG). Rechnungskit richtet sich an in Deutschland ansässige Unternehmen und bereitet Belege, Steuersätze und Buchungen automatisch auf. Die steuerliche Bewertung im Einzelfall bleibt deine Entscheidung, im Zweifel gemeinsam mit deiner Steuerkanzlei.

Bereit für die E-Rechnungs-Pflicht?

Wir öffnen nach und nach und onboarden jeden Kunden persönlich. Komm auf die Warteliste, wir melden uns, sobald du dran bist.

Auf die Warteliste
de