Dev.to WebDev 🛠 Dev 👁 1 📖 1 min read

Add a scan-to-pay SEPA QR code (EPC/Girocode) to your invoices

Across the SEPA area, banking apps can scan an EPC QR code (a.k.a. Girocode) to pre-fill a bank transfer — recipient, IBAN, amount, reference. Putting one on your invoices or payment pages measurably speeds up getting pa

Across the SEPA area, banking apps can scan an EPC QR code (a.k.a. Girocode) to pre-fill a bank transfer — recipient, IBAN, amount, reference. Putting one on your invoices or payment pages measurably speeds up getting paid. Here's how to generate one with a single request.

The one-liner

curl "https://api.installateur1210.at/v1/epc-qr?key=demo\
&name=ACME%20GmbH&iban=DE89370400440532013000\
&amount=99.50&remittance=Invoice%202026-001" -o qr.png

That's a spec-compliant EPC069-12 QR as PNG (or format=svg). The IBAN is validated server-side (mod-97), so you get a clear error instead of a broken code.

Embed it directly in HTML

No backend needed — it's just an image URL:

<img alt="Pay by bank transfer"
  src="https://api.installateur1210.at/v1/epc-qr?key=demo&name=ACME%20GmbH&iban=DE89370400440532013000&amount=99.50&remittance=Invoice%202026-001">

Node.js

const p = new URLSearchParams({
  key: "demo", name: "ACME GmbH", iban: "DE89370400440532013000",
  amount: "99.50", remittance: "Invoice 2026-001",
});
const res = await fetch(`https://api.installateur1210.at/v1/epc-qr?${p}`);
await require("fs/promises").writeFile("qr.png", Buffer.from(await res.arrayBuffer()));

Validate an IBAN separately

curl "https://api.installateur1210.at/v1/iban/DE89370400440532013000?key=demo"

Free demo key demo, EU-hosted, nothing stored. Handy for invoicing tools, clubs, utilities and checkout flows in the euro area.

📰 Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.