Skip to content
Rechnungskit
Guide · E-invoicing
Playbook

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

  1. You or your application create an invoice with payment terms in Stripe and finalize it, in the dashboard or through the API.
  2. 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.
  3. 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.
  4. Rechnungskit sends the invoice by email in your name, with a bank transfer block: amount, due date, IBAN, BIC, account holder and payment reference.
  5. 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.
Recreated in Stripe test mode
Two open invoices of the same amount: what Stripe does with the payment reference
Stripe number onlyMatch
Payment reference571874D5-0014
Stripe matchesthe intended invoice
With extra textMiss
Payment referenceRechnung 571874D5-0014
Stripe matchesthe older invoice of the same amount
That is why the e-invoice shows only the Stripe number as the payment reference.

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

  1. Connect Stripe to Rechnungskit if you haven't yet (guide).
  2. In the Stripe key, set the Funding Instructions permission to write. Rechnungskit uses it to fetch your customer's virtual IBAN.
  3. 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.
  4. 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

No. It is the same Stripe connection that already handles your payments and subscriptions. You turn the feature on in the document rules, and the Stripe key also needs the Funding Instructions permission (write).
Read more
Guide E-invoicing for B2C in Germany: does the mandate apply to online shops? Guide E-invoicing in Germany: the mandate explained for founders Guide Invoicing in a foreign currency in Germany: which exchange rate applies? (ECB, DATEV, OSS) Guide GoBD explained: principles, retention and what they mean for your invoices Guide Small-amount invoices in Germany (§ 33 UStDV): when the buyer's address can be left out Guide E-invoicing for small businesses in Germany (Kleinunternehmer): duties, exemptions, thresholds 2026 Guide The German cancellation button (§ 312k BGB): who needs it and how it works Guide The date of supply on German invoices: shipping date or payment date? Guide Leitweg-ID: what it is, how it is structured and how it gets onto the invoice Guide The OSS scheme explained: the €10,000 threshold, registration and an example Guide Deferred revenue for SaaS and online courses in Germany: when a pRAP is required Guide Proforma invoices in Germany: what they are for and why they are not invoices Guide Deferred revenue in German accounting (pRAP): definition, bookings and an example Guide Changing the billing address on a German invoice afterward: is it possible? (without a cancellation) Guide Correcting an invoice in Germany: which route for which error? Guide Server-side tracking for Meta: Conversions API with a lean consent bar Guide Shopify gift cards in Germany: gift card, discount code and store credit for VAT Guide Shopify invoices in Germany: what Shopify does, what is missing, what applies from 2027 Guide Shopware invoices: what Shopware 6 does on its own and what is missing Guide Stripe DATEV export: getting Stripe payments into DATEV as a booking batch Guide Booking Stripe fees in Germany: clearing account, reverse charge and Stripe Technology Europe Ltd Guide Stripe Invoicing in Germany: creating invoices, pricing and e-invoicing Guide Stripe invoices in Germany: what Stripe Invoicing and Billing do, what is missing, and what applies from 2027 Guide Shipping costs and VAT in Germany: 7%, 19% or tax-exempt? Guide The German withdrawal button (§ 356a BGB): mandatory since June 19, 2026 Guide WooCommerce DATEV export: options, file format and account mapping Guide WooCommerce invoices in Germany: plugins, mandatory details, e-invoicing Guide XRechnung vs ZUGFeRD: the XRechnung format explained Guide Payment terms on invoices in Germany: rules, due date calculation and wording Guide ZUGFeRD explained

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
de en