EPC069-12 compliant payloads
SEPA Credit Transfer (SCT) QR codes that validate cleanly.
SepaQX · SEPA EPC · API
Lightweight HTTP/HTTPS server that generates EPC-compliant SEPA QR codes as PNG images. Built for billing systems, invoices, web apps, and internal tools. Public mode or API-key access with per-client customization.
curl -X POST http://127.0.0.1:8089/sepa-qr \
-H 'Content-Type: application/json' \
-d '{...}' --output sepa-qr.png
EPC069-12 compliant payloads
SEPA Credit Transfer (SCT) QR codes that validate cleanly.
Built for invoice pipelines
Fast PNG output for PDFs, billing portals, and internal tools.
Public or API-key mode
Open access or per-client control.
Branding per client
Logo, colors, gradients, and module styles by API key.
Hardened server behavior
Request limits, rate limiting, caching, and clear errors.
SepaQX is a self-hosted SEPA QR generator that produces EPC-compliant payment payloads and renders them as PNG QR codes. When scanned, the payment form is pre-filled.
Hardened HTTP server with limits, timeouts, rate limiting, and reverse-proxy aware client IP handling.
Designed for safe public exposure.
Returns ready-to-use PNG images for invoices, PDFs, and billing portals.
One endpoint, one PNG.
API-key configuration supports logos, colors, gradients, and QR module styles per client.
Optional per-key customization.
POST is recommended for production. GET is available for simple integrations, and /sepa-qr/validate returns JSON only.
POST /sepa-qr
Content-Type: application/json
X-API-Key: <optional>
{
"name": "Receiver Name",
"iban": "DE12345678901234567890",
"bic": "BANKDEFFXXX",
"amount": "12.34",
"purpose": "SALA",
"remittance_reference": "RF18539007547034",
"remittance_text": "Invoice 123",
"information": "Sample EPC QR code"
}
If purpose is omitted, the default is GDDS.
GET /sepa-qr?... (query params)
POST /sepa-qr/validate
GET /healthz
GET /readyz
GET /version
In public mode, HEAD /sepa-qr returns PNG headers for health checks.
Invalid input returns a static PNG error image by default. Use format=json or Accept: application/json for JSON errors. You can override the image with ERROR_PNG_PATH.
Use our APT repository or build from source.
Requirements: Linux with systemd. Build from source requires Go 1.24+.
curl -fsSL https://install.safe-cap.com/linux/apt/pubkey.gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/safe-cap.gpg
echo "deb [signed-by=/usr/share/keyrings/safe-cap.gpg] https://install.safe-cap.com/linux/apt stable main" | \
sudo tee /etc/apt/sources.list.d/safe-cap.list
sudo apt update
sudo apt install sepaqx
git clone https://github.com/safe-cap/sepaqx sepaqx
cd sepaqx
go build -o sepaqx .
sudo install -m 0755 sepaqx /usr/bin/sepaqx
sudo install -d /etc/sepaqx /etc/sepaqx/tls
sudo cp examples/.env.example /etc/sepaqx/.env
SepaQX is free and open-source. If it saves you time integrating SEPA QR payments or reduces invoice errors, supporting the project helps ensure long-term maintenance and continued development.
Commercial support and custom integrations available — get help tailored to your stack.
Install locally in minutes, or integrate via the HTTP/HTTPS API.