Rechnungen für deine Bolt-App
Bolt (bolt.new) baut deine App und bindet Stripe per Ein-Klick an, erstellt aber keine rechtssichere E-Rechnung. Rechnungskit schließt die Lücke: In der Supabase Edge Function, die Bolt für deine Stripe-Webhooks 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 der Supabase Edge Function, die Bolt ohnehin für deine Stripe-Webhooks generiert, und aus jedem Verkauf deiner Bolt-App wird eine konforme E-Rechnung mit DATEV-Export.
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.
In vier Schritten zur konformen E-Rechnung.
- 01API-Schlüssel anlegenIn Rechnungskit unter Einstellungen, API erstellst du einen Schlüssel mit der Berechtigung orders:write (und invoices:read zum Abrufen). Zum Testen nimmst du rk_test_, im Echtbetrieb rk_live_. Den Wert legst du in Bolt bzw. Supabase als Secret ab, nie im Frontend.
- 02Stripe einmal verbindenDeine Bolt-App nutzt deinen eigenen Stripe-Account. Denselben Account verbindest du einmalig in Rechnungskit unter Einstellungen, Verbinden und stellst als Verkaufsgrundlage deine API-Bestellungen ein. So ordnet Rechnungskit die Stripe-Zahlung deiner per API gemeldeten Bestellung zu. Ein Klick-Schritt, kein Code.
- 03Bestellung aus der Edge Function meldenBolt legt für Stripe eine Supabase Edge Function mit Webhook-Verarbeitung an (Zahlungen, Abos, Erstattungen). Genau dort ergänzt du einen Aufruf an POST /v1/orders mit Käuferadresse, Positionen in ganzzahligen Cent und der Stripe-Zahlungsreferenz. Der Schlüssel bleibt serverseitig, der Aufruf ist ein einzelner fetch.
- 04Rechnung entsteht automatischSobald die Stripe-Zahlung bei Rechnungskit eintrifft und zur Bestellung passt, entsteht die E-Rechnung: geprüft nach EN 16931, mit korrektem Steuersatz, GoBD-archiviert, fertig für den DATEV-Export. Bei physischer Ware meldest du zusätzlich den Versand über POST /v1/fulfillments, damit das Leistungsdatum stimmt. Über GET /v1/orders/{orderNo} holst du dir die fertige Rechnung zurück.
Bolt baut den Checkout, aber nicht die Rechnung
Mit Bolt baust du in Minuten eine App und schaltest Stripe per Ein-Klick frei, inklusive Webhook-Verarbeitung für Zahlungen und Abos. Was danach fehlt: Bolt 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.
Diese Lücke schließt Rechnungskit genau dort, wo Bolt 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 Bolt besonders gut passt
Bolt generiert eine echte Full-Stack-App: React-Frontend plus serverseitige Funktionen auf Basis von Supabase Edge Functions, dazu die native Stripe-Anbindung mit Webhooks. Das ist genau die Umgebung, die die Anbindung braucht: eine serverseitige Funktion, in der dein API-Schlüssel sicher liegt und in der du beim erfolgreichen Checkout einen Aufruf an Rechnungskit ergänzt. Du baust also keine neue Infrastruktur, sondern nutzt die, die Bolt schon angelegt hat.
Der Aufruf, den du ergänzt
In der Edge Function, die deinen Stripe-Webhook verarbeitet, kommt im Erfolgszweig ein
fetch auf POST /v1/orders dazu. Beträge in ganzzahligen Cent, die Stripe-Zahlungsreferenz
als paymentRef, der Schlüssel aus den Secrets:
// Supabase Edge Function (Bolt), im Stripe-Webhook nach erfolgreicher Zahlung
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
},
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 }]
})
})
Ein wichtiger Hinweis zu Bolt: Verifiziere in deiner eigenen Funktion die Stripe-Signatur des Webhooks, bevor du daraus eine Bestellung ableitest. Bolt lässt diesen Schritt in den generierten Webhooks gern aus. Auf der Rechnungskit-Seite ist das abgesichert, denn Rechnungskit prüft die Signatur der Stripe-Zahlung beim eigenen Eingang selbst.
Woher kommt der API-Schlüssel?
Den Schlüssel erstellst du in Rechnungskit unter Einstellungen, API (direkt unter
app.rechnungskit.de/settings/api), mit der Berechtigung orders:write. Er wird genau
einmal angezeigt. Den Wert legst du in Bolt bzw. Supabase als Secret ab (zum Beispiel
RECHNUNGSKIT_API_KEY), nie im Frontend, und liest ihn in der Edge Function mit
Deno.env.get('RECHNUNGSKIT_API_KEY').
Einmalige Einrichtung, ehrlich benannt
Der Code ist einfach, aber ein paar Dinge richtest du einmal ein:
- Stripe im Dashboard verbinden und auf API stellen. Deinen Stripe-Account verbindest du einmalig in Rechnungskit unter Einstellungen, Verbinden, Verkaufsgrundlage API-Bestellungen. Ein Klick-Schritt, kein Code.
- Länderkürzel mitschicken. Ohne
country_codein der Rechnungsadresse wird die Bestellung abgelehnt, die Umsatzsteuer lässt sich sonst nicht bestimmen. - Idempotency-Key setzen. Jeder POST braucht den Header, sonst erzeugt ein doppelter Webhook zwei Bestellungen. Die Stripe-Session-ID ist ein guter Wert.
- Stripe-Signatur in Bolt prüfen. Verifiziere den Webhook in deiner eigenen Funktion, bevor du die Bestellung ableitest.
- Bei 5xx erneut senden. Wiederhol den Aufruf mit etwas Abstand, dann geht keine Bestellung verloren.
Zeig deiner KI die Doku
Rechnungskit veröffentlicht eine vollständige OpenAPI-3.1-Spezifikation unter
api.rechnungskit.de/v1/openapi.json. Gib sie Bolts KI mit der Bitte, im Stripe-Webhook
nach erfolgreicher Zahlung eine Bestellung an Rechnungskit zu melden. Die komplette Referenz
mit lauffähigen Beispielen steht in der API-Dokumentation.
Baust du deine App lieber mit Lovable, Replit oder v0? Das funktioniert genauso, siehe
Rechnungen für no-code und KI-App-Builder.
Häufige Fragen zur E-Rechnung Software
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