Stripe invoices with payment terms as e-invoices: bank transfer to the Stripe IBAN
When you send an invoice with payment terms in Stripe, Rechnungskit creates the e-invoice the moment Stripe finalizes it. It carries your customer's virtual Stripe IBAN and uses the Stripe invoice number as the payment reference. When your customer pays by bank transfer, Stripe matches the money to the invoice and Rechnungskit closes the open item automatically. The feature is a switch in the document rules (Belegregeln) and is off by default.
What this is about
Many SaaS and B2B companies issue their invoices directly in Stripe: create the invoice, send it with payment terms, and the customer pays by bank transfer later. Stripe calls this "send invoice". Stripe gives each customer their own virtual IBAN, and when the money arrives there, Stripe matches it against the open invoice.
The payment side works. The invoice itself, though, is a PDF. From 2027, businesses with more than 800,000 euros in prior-year revenue must send invoices to other domestic businesses as an e-invoice under EN 16931, and from 2028 everyone must (§ 14(2) sentence 2 no. 1 and § 27(38) UStG, German). Stripe does not create this format itself (more under Stripe invoices). How to create the invoice in Stripe in the first place, and which settings German invoices need, is covered in the guide to Stripe Invoicing.
Rechnungskit lets Stripe keep collecting the money and issues the e-invoice. Timing is what matters here: with payment terms, the invoice has to reach the customer before they pay.
Which route fits you
Both routes end with an e-invoice that your customer pays to Stripe by bank transfer. The only difference is where the transaction starts.
| Route 1: invoice in Stripe | Route 2: invoice from your application | |
|---|---|---|
| Where the transaction starts | You create an invoice with payment terms in Stripe | Your application sends the order to the Rechnungskit API |
| How to turn it on | Switch in the document rules | Payment method "stripe_transfer" in the order |
| Payment reference | Stripe invoice number | Stripe's reference for exactly this payment |
| Stripe fees | Stripe Invoicing plus bank transfer | Bank transfer only |
| Stripe features | Stripe dunning, reports and customer portal stay available | No Stripe invoice; reminders come from Rechnungskit |
| Changes on your side | None if you already use Stripe invoices | Your application sends to the API instead of to Stripe |
| Additional key permissions | Funding Instructions (write) | Customers and Payment Intents (write) |
If you already invoice in Stripe and don't want to change anything, take route 1. If your application knows the order itself, route 2 saves the Stripe invoice and its Invoicing fee, and Rechnungskit stays the only place where invoices are created. The sections below describe route 1 in detail. Route 2 works the same way, except that Rechnungskit creates a bank transfer payment request in your Stripe account instead of the Stripe invoice. The technical details for route 2 are in the API documentation.
How it works
- You or your application create an invoice with payment terms in Stripe and finalize it, in the dashboard or through the API.
- At that moment Rechnungskit creates the ZUGFeRD invoice in your own number range. Line items, tax rates and the service period come from the Stripe invoice, and Rechnungskit takes the payment term from Stripe.
- The invoice shows your customer's virtual Stripe IBAN and the Stripe invoice number as the payment reference (Verwendungszweck), both in the PDF and as structured data in the XML.
- Rechnungskit sends the invoice by email in your name, with a bank transfer block: amount, due date, IBAN, BIC, account holder and payment reference.
- Your customer pays. Stripe matches the money to the invoice and reports it as paid, and Rechnungskit closes the open item.
Until then the invoice is listed under open items, and if you want, payment reminders go out once it is due.
The payment reference decides
Stripe matches a bank transfer in this order: first by the invoice number in the payment reference, then by amount, and if several invoices fit, the oldest first. We recreated this in Stripe test mode with two open invoices of the same amount for the same customer:
- Payment reference is exactly the Stripe number: Stripe hits the intended invoice.
- With extra text before or after, such as "Rechnung 571874D5-0014": Stripe does not recognize the number and pays the older invoice of the same amount.
So the invoice shows only the Stripe number as the payment reference, with an explicit request not to add anything. The Rechnungskit number is deliberately left out. If a transfer still lands on a different open invoice, the money is not lost: the IBAN belongs to exactly this customer, and only the assignment between their invoices is off.
Setup in four steps
- Connect Stripe to Rechnungskit if you haven't yet (guide).
- In the Stripe key, set the Funding Instructions permission to write. Rechnungskit uses it to fetch your customer's virtual IBAN.
- In Stripe, turn off invoice emails and payment reminders to customers. If your application explicitly triggers sending invoices through the API, Stripe still sends an email, so drop that call.
- In Rechnungskit, go to the document rules, card "Stripe invoices with a payment term", and turn it on. You confirm step 3 there, and Rechnungskit checks right away whether the permission from step 2 is in place.
From then on it applies to every invoice Stripe finalizes after you turned it on.
What happens after sending
Payment
Stripe reports the invoice as paid, and Rechnungskit closes the open item. No second document is created.
Cancellation in Stripe
If you void the invoice in Stripe, Rechnungskit creates a cancellation invoice (Stornorechnung) with its own number and closes the open item. The original invoice stays unchanged in the GoBD archive.
Credit note
A credit note in Stripe against the open invoice becomes a correcting invoice, and the open amount goes down accordingly.
Uncollectible
If you mark the invoice as uncollectible in Stripe, the open item is written off without a cancellation. Your tax advisor (Steuerkanzlei) books the bad debt. If the payment really is uncollectible, the VAT is corrected under § 17(2) no. 1 UStG.
Money without a match
If Stripe cannot match a transfer to an invoice, for example because the amount doesn't fit, the money stays in the customer's cash balance at Stripe. After 75 days Stripe tries to return it to the customer; if Stripe has no account details by day 90, the money moves to your Stripe balance (Stripe docs). Rechnungskit creates a task for this. You can apply the balance to the customer in Stripe, and the task then closes on its own.
Missing key permission
If the Funding Instructions permission is missing, no invoice is created and nothing goes to your customer. Rechnungskit does not put your own bank details in instead, because the money would then bypass Stripe. You get an email with instructions right away, the dashboard shows a red notice, and after fixing it you check again in the document rules with "Fixed, check now". The held invoices are then created and sent.
What it costs
With route 1, Stripe charges its Stripe Invoicing fees. According to Stripe's price list for Germany (as of October 4, 2026), that is 0.4% per paid invoice on the Starter plan (Stripe pricing), plus 0.5% per SEPA bank transfer, capped at 5 euros (Stripe pricing for local payment methods). Route 2 has no Stripe invoice, so only the bank transfer fee remains. Individual terms agreed with Stripe take precedence. Rechnungskit charges no markup on payment volume; it counts documents (see pricing).
Limits, stated plainly
- Bank transfer only. There is no payment link or card payment for these invoices.
- Euro only, and only invoices that Stripe finalizes after you turn the feature on.
- The Stripe invoice with its own number still exists in your Stripe dashboard. Your customers don't see it as long as Stripe's invoice emails are off.
- The IBAN is a virtual Stripe IBAN with your company as the account holder. If your customer's accounting team asks, Stripe offers a confirmation letter of account ownership.
- Subscriptions with automatic collection are not affected. There the document is still created as soon as Stripe reports the payment.
- Route 2 needs an email address in the order, because Stripe creates the customer from it. The transfer amount is the order's gross total. You can cancel by canceling the payment request in Stripe as long as it has not been paid.
FAQ
- [1] Stripe Docs - Bank transfers for invoices
- [2] Stripe Docs - Customer balance reconciliation
- [3] Stripe pricing Germany
- [4] German Federal Ministry of Finance - FAQ on mandatory e-invoicing (German)
- [5] § 14 UStG, issuing invoices (German)
- [6] § 27(38) UStG, e-invoicing transition rules (German)
- [7] § 17 UStG, change of the taxable amount (German)
- [8] BMF: VAT Application Decree (UStAE), section 14c.1, incorrectly stated tax (German)
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.
Every invoice automatically as a valid e-invoice.
Connect your payment provider and we take care of format, validation and archive. Start for free in test mode.
Try it now