OpenQR

Payments

EPC QR codes, GiroCode and BezahlCode explained

By OpenQR · updated 20 October 2026

An EPC QR code is a QR pattern containing the details of a SEPA credit transfer — IBAN, beneficiary name, optional amount and reference — in a ten-line layout defined by the European Payments Council's EPC069 guideline. German banking brands it GiroCode, invoice software calls it BezahlCode; they are the same payload. Scanning one opens the payer's banking app with the transfer pre-filled for confirmation.

8 min read · Updated 20 October 2026

A paper invoice on a desk with a QR code printed in its corner, a fountain pen resting alongside.

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.

LineContentNotes
1Service tagAlways BCD
2Version001 or 002
3Character set1 = UTF-8
4IdentificationSCT (SEPA Credit Transfer)
5BICOptional inside SEPA; banks resolve from the IBAN
6Beneficiary nameUp to 70 characters
7IBANThe destination account
8AmountEUR with dot decimals, e.g. EUR123.45; optional
9PurposeFour-character code, e.g. GDDS; optional
10Structured referenceISO 11649 creditor reference (RF…); optional
11Unstructured textFree 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.

Yes. GiroCode is the German banking brand for the EPC069 payload; BezahlCode is another market name. One format, three names.

Related reading