Payments
EPC QR codes, GiroCode and BezahlCode explained
By OpenQR · updated 20 October 2026
8 min read · Updated 20 October 2026

The standard exists because typing IBANs is error-prone and slow. Since 2013 the EPC069 guideline (currently version 3.1) has defined a fixed payload that any European banking app can parse, and German banks in particular shipped it into every retail app — which is why the code is a fixture of German invoices, club membership bills and utility payments. The code never moves money itself: it pre-fills a transfer the payer reviews and confirms like any other.
The ten lines, exactly
The payload is plain text: ten lines, with an optional eleventh, separated by line breaks. Every line has a fixed meaning, and empty lines are part of the format.
| Line | Content | Notes |
|---|---|---|
| 1 | Service tag | Always BCD |
| 2 | Version | 001 or 002 |
| 3 | Character set | 1 = UTF-8 |
| 4 | Identification | SCT (SEPA Credit Transfer) |
| 5 | BIC | Optional inside SEPA; banks resolve from the IBAN |
| 6 | Beneficiary name | Up to 70 characters |
| 7 | IBAN | The destination account |
| 8 | Amount | EUR with dot decimals, e.g. EUR123.45; optional |
| 9 | Purpose | Four-character code, e.g. GDDS; optional |
| 10 | Structured reference | ISO 11649 creditor reference (RF…); optional |
| 11 | Unstructured text | Free remittance text up to 140 characters; optional |
Lines 10 and 11 are mutually exclusive by rule — a payment carries either a structured creditor reference or free text, never both. The whole payload is capped at 331 bytes, which is why the reference and text fields have their own length limits on top.
Why invoices carry a GiroCode
The structured reference is the quiet superpower. An RF creditor reference (RF18539007547034, per ISO 11649) is a machine-checkable invoice number: when the payer's app includes it in the transfer, the incoming payment reconciles itself against the invoice without anyone reading a number out loud. Combined with the pre-filled amount, that makes the EPC code the cheapest accounts-receivable automation available to a small business in the eurozone — a printed pattern that removes two manual entry steps and one matching step from every invoice.
What the code does not do
An EPC QR code initiates a SEPA credit transfer, which settles during banking hours and can take up to one business day — it is not an instant-payment rail, and it is not a card replacement at a till. Nothing comes back to the code's owner: no confirmation, no scan count, no expiry. The code keeps working as long as the IBAN is valid. And the payer can always edit the pre-filled amount or reference before confirming, which is a feature of the transfer, not a flaw in the code.
One standard, several names
EPC QR Code is the European Payments Council's own name. GiroCode and BezahlCode are German market names for the same payload. Software that says it generates one but not the other is generating the same ten lines either way.
Where EPC codes work and where they do not
- German and Austrian banking apps read them natively in the camera and in-app
- Most eurozone bank apps support scanning EPC codes for transfer pre-fill
- UK and non-euro accounts generally cannot use them — SEPA is a euro scheme
- Any printer works: the payload is under 331 bytes and scans comfortably at 2 cm wide
You can build one at the free EPC / GiroCode QR code generator — IBAN checksum validated, reference and text handled per the spec's exclusivity rule, payload assembled in your browser. For how PIX in Brazil and UPI in India solve the same problem differently, see payment QR codes compared and the PIX QR code explainer.