Invoices for no-code and AI app builders
AI app builders such as Lovable, Bolt, Replit or v0 build your app and connect Stripe, but they do not create a legally valid e-invoice. Rechnungskit fills the gap with a REST API: in the server-side function your builder sets up for the Stripe webhook, you report the order to Rechnungskit with one API call. As soon as the Stripe payment arrives, a GoBD-compliant ZUGFeRD invoice under EN 16931 is created automatically, with your own number sequence, a DATEV export and archiving.
One API call from your builder's server-side function, whether that's Lovable, Bolt, Replit or v0, and every sale becomes a compliant e-invoice with a DATEV export.
Writing invoices is easy. Writing compliant ones is not.
The difference between a PDF and a compliant e-invoice matters at the next tax audit. Rechnungskit closes exactly this gap.
Four steps to a compliant e-invoice.
- 01Create an API keyIn Rechnungskit, go to Connections → API and create a key with the orders:write permission (plus invoices:read for fetching invoices). Use rk_test_ for testing and rk_live_ for live operation. Store the value in your builder's secrets store, never in the frontend.
- 02Connect Stripe onceYour builder uses your own Stripe account. Connect that same account once in Rechnungskit under Connections → Connect and set your API orders as the sales basis. Rechnungskit then matches the Stripe payment to the order you reported via the API. It's a click in the dashboard, not code.
- 03Report the order from the backendAlmost every builder sets up a server-side function for Stripe, often with a webhook (an edge function in Lovable and Bolt, a server endpoint in Replit, a Next.js route in v0). Add a call to POST /v1/orders there, with the buyer address, line items in whole cents and the Stripe payment reference. The key stays on the server, and the call is a single fetch.
- 04The invoice is created automaticallyOnce the Stripe payment reaches Rechnungskit and matches the order, the e-invoice is created: validated against EN 16931, with the correct tax rate, archived to GoBD standards and ready for the DATEV export. For physical goods you also report the shipment via POST /v1/fulfillments. GET /v1/orders/{orderNo} returns the finished invoice.
Your builder makes the app, not the invoice
AI app builders like Lovable, Bolt, Replit or v0 build you an app in hours and connect Stripe. What's missing only shows up when the tax office or your tax advisor (Steuerkanzlei) asks: these tools create a payment, but not an invoice in the sense of German law. There's no structured document under EN 16931, no GoBD archive (GoBD being the German rules for keeping digital records), no VAT logic per country and no DATEV export. Rebuilding all of that yourself is exactly the work you picked a builder to avoid.
Rechnungskit closes that gap with a REST API, at the point where your builder already handles the payment: the server-side function behind your Stripe webhook. One API call turns the sale into a ZUGFeRD invoice with your own number sequence, archived in an audit-proof way and ready for booking in DATEV.
Does your builder fit? An honest overview
It comes down to one question: can your builder make an API call on the server (with a secret key that never reaches the browser) and process Stripe payments through a webhook? If so, the connection works.
- Very well suited, with a dedicated guide: Lovable and Bolt. Both set up edge functions for Stripe, which is the environment the connection needs (Lovable docs, Bolt docs).
- Very well suited: Replit (a real backend plus a secrets store) and v0 by Vercel (Next.js with server-side code, v0 docs). The call goes into your Stripe webhook endpoint.
- Suited with a backend: WeWeb with its own backend or together with Supabase or Xano (WeWeb docs), as well as Bubble (backend workflows) and FlutterFlow (Cloud Functions).
- Needs a layer in between: Framer has no backend for your own server code. There, the call runs through a small serverless function (for example on Cloudflare or Vercel) that you put in between. Softr calls external APIs directly from its workflows on the Professional plan and above; below that you need the same layer in between.
- Probably not needed: builders with their own invoicing feature, such as Wix or Jimdo. Do check whether their documents are EN 16931 e-invoices and how they are archived, though.
The call you add
Whatever builder you use: in the function that processes your Stripe webhook, add a fetch
to POST /v1/orders in the success branch. Amounts go in whole cents, the Stripe payment
reference goes in paymentRef, and the key comes from the secrets:
// Your builder's backend function, in the Stripe webhook after a successful payment
const res = await fetch('https://api.rechnungskit.de/v1/orders', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.RECHNUNGSKIT_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': session.id
},
body: JSON.stringify({
orderNo: session.id,
paymentRef: session.payment_intent, // pi_... from Stripe
email: session.customer_details?.email,
billingAddress: {
name: session.customer_details?.name,
country_code: session.customer_details?.address?.country, // required for VAT
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 }]
})
})
The invoice isn't created by this call. It's created as soon as the Stripe payment reaches
Rechnungskit and matches the order. There is deliberately no paid field.
One-time setup, stated plainly
The code is simple; a few things you set up once:
- Connect Stripe in the dashboard and set it to API (Connections → Connect, with API orders as the sales basis). It's a click, not code.
- Send the country code. Without
country_codein the billing address the order is rejected. - Set an Idempotency-Key. Every POST needs the header; otherwise a duplicate webhook creates two orders.
- Verify the Stripe signature in your builder and retry on 5xx, so no order gets lost.
Show your AI the docs
Rechnungskit publishes a complete OpenAPI 3.1 specification at
api.rechnungskit.de/v1/openapi.json. Give it to your builder's AI and ask it to report an
order to Rechnungskit in the Stripe webhook after a successful payment. The full reference
with working examples is in the API documentation.
FAQ
Rechnungskit is not a tax advisory or law firm. This article explains general principles and does not replace advice from a tax advisor (Steuerberater, § 5 StBerG) or a lawyer (§ 3 RDG). Rechnungskit is built for businesses based in Germany and prepares documents, tax rates and bookings automatically. How your specific case is treated remains your decision, ideally together with your tax advisor or a lawyer.
Ready for the e-invoicing mandate?
Create an account, connect your payment provider, check everything in free test mode. Billing starts when you go live.
Try it now