Donation receipts (Zuwendungsbestätigungen) for nonprofits
Updated
We are enabling donation receipts account by account. Write to support@rechnungskit.de if your association wants to use them.
Tax-privileged nonprofits in Germany (registered associations, foundations, gGmbHs) can use Rechnungskit to issue donation receipts (Zuwendungsbestätigungen) for donations and membership fees. A donation is not a sale, so it never gets an invoice. It shows up under Donations instead of Invoices and never appears in the VAT report or in OSS.
Marking payments as donations
Rechnungskit treats a payment as a donation only when it is explicitly marked. On Stripe you add metadata to the payment, meaning the PaymentIntent (in Checkout, payment_intent_data.metadata):
rk_kind = donationfor a donation,rk_kind = membership_feefor a membership fee- optionally
rk_purpose(for example a campaign) andrk_recurring = truefor recurring donations and sponsorships
For sponsorships, recurring donations and membership fees paid through Stripe subscriptions, the marker goes on the subscription (subscription_data.metadata in Checkout) or on the price. A subscription payment carries no metadata of its own. Rechnungskit reads the marker from the paid Stripe invoice, creates no order and no invoice for it, and takes the Stripe customer's name and address. Every charge becomes a recurring donation. If the marker is on the subscription, every paid invoice of that subscription counts as a donation as a whole, including any sales line on it. If it is on the price, an invoice only counts when every line carries the same marker. So always keep donations and sales in two separate subscriptions.
For Payment Links you set the marker the same way, through the link's payment_intent_data.metadata or subscription_data.metadata. Rechnungskit does not read metadata that sits only on the Payment Link or the Checkout Session itself. For one-off payments only the marker on the payment counts; a marker on the price only works for subscriptions. The API guide shows what this looks like in code.
Make the billing address required in Stripe Checkout (billing_address_collection: required). Without the donor's address there is no donation receipt. If it is still missing, Rechnungskit fetches it from Stripe. If that fails, you add it under Donations with "Address".
Payments without a marker go through invoice matching as usual.
Setup
Under Settings → Donation receipts you enter:
- the tax office, the type and date of the notice (exemption notice, annex to the corporate income tax assessment, or a determination under § 60a AO, in German), and for an exemption notice the last assessment period
- the tax-privileged purposes, worded as in the notice
- whether membership fees are deductible. They are not deductible for organizations that promote sport, cultural activities that mainly serve leisure, local heritage and local history, or purposes under § 52(2) sentence 1 no. 23 AO, or whose purpose was declared charitable under § 52(2) sentence 2 AO because it corresponds to one of these (§ 10b(1) sentence 8 EStG, in German). Then membership fees get no receipt
- the date on which you notified the tax office of automated issuing, the name and role of the person who signs, and their signature as an image
Name, address and tax number come from the general settings. The page shows what is still missing. Receipts only go out once everything is complete.

Receipts without a handwritten signature, and sending them as a PDF, are only allowed if the association notified its tax office of the procedure beforehand (R 10b.1(4) EStR, which the BMF letter of 7 November 2013 refers to in no. 10; on sending them as a write-protected file, BMF letter of 6 February 2017, IV C 4 - S 2223/07/0012, BStBl I 2017, 287). The settings page has a template for this notice.

Once everything is filled in, the top of the page says "All set" and shows the last date on which the association may still issue receipts under its notice.

What the receipt says
Rechnungskit uses the binding templates from the BMF letter of 7 November 2013 (IV C 4 - S 2223/07/0018 :005, BStBl I 2013, 1333) word for word: the receipt for monetary donations/membership fees and the annual receipt with its annex. Under nos. 1 and 2 of the letter the templates are binding, and the wording and order stay unchanged. The amount appears in figures and in words (no. 5). The liability notice and the note on § 63(5) AO are always printed. Thanks and advertising never appear on the receipt (no. 2); the thank-you goes in the email. Every receipt has a number from its own sequence, ZB-YYYY-NNNN, separate from invoice numbers. The year in the number is the year of issue.

One at a time or once a year
You choose separately for one-off donations and for recurring donations:
- Immediately, per payment: the receipt is created once the payment arrives and is emailed to the donor.
- Once a year as an annual receipt: after the year ends, you create one annual receipt (Sammelbestätigung) per donor under Donations, with an annex listing every donation of that year. The annex breaks the total down into the individual donations (BMF letter of 7 November 2013, no. 9). You can only close a year once it is over.

A donation never appears on two receipts. The annual receipt states exactly that, and Rechnungskit also blocks a double receipt in the database.
The email to the donor goes out in your association's name. Its name appears as the sender, replies go to its contact email, and the bottom of the email shows its name, address, and register entry from your company details. Rechnungskit's own legal notice does not appear in it.
Under Donations you see every donation with its status: confirmed (with the receipt number), "Address missing", or "Waiting for annual receipt".

How long the association may issue receipts
Under § 63(5) sentence 1 AO (in German), a tax-privileged organization may only issue donation receipts if the date of the exemption notice or of the annex to the corporate income tax assessment is no more than five years ago (no. 1), or if the determination under § 60a(1) AO is no more than three calendar years ago and no exemption notice or annex has been issued yet (no. 2). The period is counted to the day (sentence 2). Rechnungskit counts five or three years to the day from the date of the notice, shows the last permitted date on the settings page, and blocks issuing after that until you enter the new notice.
If the notice only grants the tax exemption from a later date, enter "Tax-exempt from". Donations before that date are not confirmed, because they are not deductible under § 10b EStG (BMF letter of 7 November 2013, no. 14).
Refunds
If a donation is refunded in full or in part, no cancellation invoice is created. Rechnungskit withdraws the receipt with a separate, numbered letter to the donor and automatically issues a new receipt for the remaining amount. Receipts themselves are never changed or deleted. The withdrawal and the new receipt are not emailed automatically: you find both under Donations on the Receipts tab and send them to the donor with "Send again".

If a donation is refunded before it is confirmed, there is no withdrawal. The later receipt then shows only the remaining amount, and a fully refunded donation is never confirmed.
Archive
Every receipt is archived as an encrypted, unchangeable original with a SHA-256 checksum. That covers the duty to keep a duplicate (§ 50(7) sentence 1 EStDV, in German). The PDF is rendered from the original on every download.
Test mode
In test mode, Rechnungskit creates test documents numbered TEST-ZB-YYYY-NNNN and stamped "Testbeleg – keine gültige Zuwendungsbestätigung" (test document, not a valid donation receipt). The email goes to the association's contact address instead of the donor. At go-live, test donations and test documents disappear from view, their files are deleted, and the real sequence starts at ZB-YYYY-0001.
Fetching receipts via the API
The association's website can fetch the receipt itself after a donation and show it to the donor. It needs an API key with the documents:read permission, which you create under Connections → API.
GET /v1/donation-receipts?paymentRef=<payment ID>with the payment's ID at the payment provider (on Stripe, for example,pi_…). The response contains the donation and its receipts, including a withdrawal and the replacement receipt after a refund. If Rechnungskit does not know the payment as a donation yet, the API answers 404not_found. If the donation is booked but its receipt is not issued yet (missing address, annual receipt), the code isreceipt_pending, and the website asks again later.GET /v1/donation-receipts/{number}/pdfreturns the PDF, rendered from the archived original after checking its SHA-256 checksum.
While the project is in test mode, the key sees only test documents; after go-live, only real receipts. If donation receipts are not enabled for the account, the API answers 403 donations_not_enabled. Every field, error code and the Stripe code examples are in the API guide.
What counts as a document
Every real donation receipt counts as one document (Beleg), and so do annual receipts, withdrawals and replacement receipts. They count once they are archived, at the same price as any other document. Test documents from test mode don't count.
Export when you cancel
The full GoBD export contains all donation receipts, annual receipts and withdrawals as archived originals (and as PDFs if you want), a register of the receipts, and the donation ledger with every donation. After the contract ends, the association keeps these duplicates itself (§ 50(7) sentence 1 EStDV, in German).
Limits
- Only monetary donations and membership fees. Donations in kind and waived expense reimbursements are not covered.
- No electronic transmission to the tax office under § 50(2) EStDV (in German); the receipt goes to the donor as a PDF.
- The marker is documented for Stripe. There is no guide for other payment providers.
- Payments with something in return (shop sales, nominal fees) are not donations. Don't mark them, and they go through as invoices as usual.
- If a Stripe subscription payment arrives before its invoice and Rechnungskit had already invoiced it by then (fixed matching), that invoice stays. It can only be corrected with a cancellation invoice.
Whether a payment is a donation for tax purposes is the association's decision. Rechnungskit does not provide tax or legal advice.
Where to find it in the app
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.