Put the guidance into practice: open the related free tool. Examples use stated inputs and are not measured performance claims.
| Specification item | Documented constraint | Tidy QR choice |
|---|---|---|
| Error correction | M | Locked for EPC |
| Largest QR version | 13 | Rejects larger payloads |
| Payload size | 331 bytes maximum | UTF-8 byte limit checked |
| Beneficiary name | Up to 70 characters | Field limit checked |
| Unstructured remittance | Up to 140 characters | Field limit checked |
Use the right payment format for the job
EPC's guidance addresses data capture for initiating a SEPA credit transfer. It is useful when payment details appear on an invoice and the payer's banking application supports the format. It should not be described as a universal checkout or a replacement for a bank's official merchant payment product.
A QR scanner that displays the payload as text has demonstrated decoding, not payment integration. The receiving bank app must recognize the record and present the relevant transfer details. Its support and account conditions remain outside the generator's control.
Tidy QR creates the data record locally. It does not connect to a bank, verify account ownership or submit a payment. The normal review and authorization step in the banking app remains essential.
Keep the payment details visible
The EPC guidance requires payment details to remain available alongside the code. This lets the payer compare the captured recipient, account and amount with the invoice. A code alone should not become the only readable source of the transfer information.
Use the beneficiary details supplied through the business's trusted payment process. A valid IBAN checksum does not establish that the account belongs to the intended recipient. Confirm changed bank details independently rather than treating a freshly generated QR image as evidence of ownership.
The surrounding invoice should explain the purpose of the code. A brief instruction can say that it prepares payment details in a supporting bank app and that those details should be checked before approval. Avoid wording that suggests scanning itself completes payment.
Respect the constrained design
EPC's specification sets the correction level and maximum version for this format. Tidy QR locks the EPC design to a plain dark-on-light square pattern at level M and does not allow a logo overlay. That preserves a narrower, reviewable implementation than general decorative QR output.
The payload is also bounded by a byte limit. International characters can occupy multiple UTF-8 bytes, so individual field limits do not by themselves establish that the complete record fits. The generator checks the assembled payload before rendering it.
The code's printed dimensions and quiet zone still need care. A specification-compliant string can be placed in an unreadable physical layout. Test the final invoice output rather than only a large preview on a monitor.
A worked invoice preparation
Use an illustrative invoice amount of EUR 25.00 and a short remittance description such as Invoice sample. Enter the verified beneficiary name, IBAN and required BIC from the payment instructions. The amount is a chosen example, not a fee charged by Tidy QR or a claim about transfer pricing.
Generate the code and inspect the encoded lines. Compare the name, account, currency, amount and remittance with the invoice's readable details. A formatting check can catch some mistakes, but it cannot know whether the invoice's underlying bank instructions are authentic.
Scan the proof in a supporting bank app and review the proposed transfer without submitting it as part of a design test. Verify the captured details. Any real payment should follow the payer's normal approval process, separate from testing whether the QR image imports correctly.
Understand the validation boundary
Tidy QR checks IBAN structure and checksum, field lengths and the supported payload constraints. It conservatively requires a BIC in its current form. The implementation is intentionally narrower than every possible conditional variation described in the broader specification.
A passed checksum is not a bank-account lookup. A plausible BIC is not evidence that the beneficiary is correct. Those checks help detect typing and format errors, while recipient verification remains a business and banking responsibility.
The generator also checks whether its rendered image decodes to the intended payload. That is a useful end-to-end encoding check. It still does not establish that a particular bank will accept the record or that a transfer would succeed.
Avoid mixing payment systems
An EPC record is not an SGQR label, UPI merchant code or cryptocurrency URI. Those systems have different payloads, participant rules and application behavior. A generic QR encoder can render bytes, but that does not make arbitrary bytes interoperable across payment systems.
Use official merchant onboarding and bank guidance when a project needs a local payment acceptance scheme. The invoice helper here should not be presented as an all-country payment terminal or a way to bypass the provider's setup.
Keep labels specific. State that the code contains SEPA transfer details when that is what it does. A broad instruction such as pay with any app can promise support that has not been established.
Maintain invoice records carefully
Retain the final invoice, its readable payment details and the decoded QR payload together. This gives reviewers a direct comparison if a customer reports a mismatch. Do not rely on the visual appearance of a code to identify its contents.
If bank details change, follow the organization's verification process and replace affected templates. A static code on an old invoice keeps the old account information. Editing a new template does not update documents already sent or printed.
The useful outcome is fewer transcription steps with the same careful review of recipient and amount. The code supports that process; it does not replace the bank app's controls or the payer's decision.
Review amounts and optional fields
An invoice may carry a fixed amount or leave the amount for the payer to enter, depending on the intended workflow. Make that choice visible in the readable invoice instructions. A blank amount in a payload should not be mistaken for confirmation that the invoice is already settled or that any amount is acceptable.
Use the currency and decimal syntax required by the EPC format. Do not include currency symbols, grouping punctuation or explanatory prose inside a numeric amount field. Put the explanation in the invoice text or supported remittance field, then review how the bank app presents it.
If the business needs a structured payment reference or another variation beyond this implementation's unstructured description field, use a tool that implements and validates that requirement. Do not squeeze an unsupported format into a nearby field merely because it produces a decodable image.
The test record should be clearly illustrative unless it contains approved production bank details. Keep sample artwork out of the live invoice template library so a demonstration account is not accidentally presented to a customer.
Frequently asked questions
Does scanning send money?
No. The code supplies data to a supporting app. The payer must review and authorize any transfer separately.
Does a valid IBAN prove the recipient?
No. Format and checksum checks do not verify account ownership. Confirm the intended beneficiary through a trusted process.
Can I add a logo to the EPC code?
Tidy QR keeps this format plain and locks its specification-related settings. General logo styling is unavailable for EPC output.
Sources
Last checked: . Examples are illustrative inputs, not measured results.
- EPC069-12 version 3.1, European Payments Council. Checked 2026-10-29.
- Implementation specifications, checked against source code, Tidy QR. Checked 2026-10-29.