"EPC QR API: Generate SEPA Payment QR Codes with One HTTP Call"

The problem: invoicing tools skip the QR code

SEPA Credit Transfer QR codes (EPC standard) are on millions of European invoices. Every major EU bank app can scan one and pre-fill the payment form. Yet most invoicing tools, accounting SaaS products, and freelance platforms still don't include them — because generating a compliant EPC QR image requires knowing an obscure spec and wiring up a QR library.

The EPC QR API solves this with a single HTTP GET.


How it works

GET https://c.pixeldev.eu/epc-api/v1/qr
  ?iban=DE89370400440532013000
  &name=Acme+GmbH
  &amount=49.99
  &remittance=INV-2026-042
  &format=png

You get a PNG (or SVG) back. Embed it in an invoice PDF, an email, a web page — wherever.

POST also works with a JSON body, which is cleaner for programmatic use:

curl -X POST https://c.pixeldev.eu/epc-api/v1/qr \
  -H 'Content-Type: application/json' \
  -d '{"iban":"DE89370400440532013000","name":"Acme GmbH","amount":49.99}' \
  --output payment.png

Parameters

Parameter Required Description
iban Beneficiary IBAN (any valid EU IBAN)
name Beneficiary name (max 70 chars)
amount Amount in EUR (min 0.01)
remittance Payment reference (max 140 chars)
bic BIC/SWIFT (optional within SEPA)
purpose 4-letter purpose code (optional)
format png (default) or svg
size Image size in px (default 400)
ecc Error correction: L / M / Q / H (default M)

What's EPC v002?

The European Payments Council defines a standard QR payload format (EPC v002) for SEPA Credit Transfers. It's plain text, newline-separated:

BCD        ← service tag
002        ← version
1          ← character set (UTF-8)
SCT        ← identification
           ← BIC (optional in SEPA)
Acme GmbH  ← beneficiary name
DE89370400440532013000  ← IBAN
EUR49.99   ← amount
           ← purpose
INV-2026-042  ← remittance reference

This payload is what gets encoded into the QR. All major EU banking apps (Sparkasse, ING, Revolut, N26, Wise, etc.) recognise it.


No keys, no limits (with fair-use guardrails)

The API is completely open — no account, no API key, no credit card. It's designed to be used directly from browser-side code, server-side scripts, PDF generation pipelines, whatever you need.

Fair-use rate limiting is in place: 300 requests per 15-minute window per IP. For production integrations that need higher throughput, a premium tier with higher limits is on the roadmap.

Response headers tell you where you stand:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 298
X-RateLimit-Window: 900

CORS enabled

The API responds with Access-Control-Allow-Origin: *, so you can call it directly from browser JavaScript — no proxy needed.


Try it live

The live playground lets you fill in IBAN, name, amount, and reference, then see the QR code render in real time. It also shows the generated API URL so you can copy it into your code.


Available at c.pixeldev.eu/epc-api. Part of the c.pixeldev.eu toolbox.

← All posts