API
QR-Rechnung per API als Bild erzeugen
Schick die Rechnungsangaben an einen Endpunkt und erhalte den Swiss QR Code oder den ganzen Einzahlungsschein als Bild – normgeprüft, ohne Registrierung, ohne Datenspeicherung.
Du wählst, was zurückkommt

part=qr-codeNur der QR-Code
part=payment-partGanzer Einzahlungsschein mit EmpfangsscheinSo rufst du sie auf
https://www.swissqrlink.ch/api/public/v1/qr-bill – per GET mit URL-Parametern (ideal für <img>) oder per POST mit JSON. Die Felder sind dieselben wie beim Dynamic Link.
curl -o einzahlungsschein.png "https://www.swissqrlink.ch/api/public/v1/qr-bill?part=payment-part&credAccount=CH0209000000100013997&credName=Max%20Muster&credAddress=Musterstrasse&credBuildingNumber=123&credZip=8001&credCity=Z%C3%BCrich&credCountry=CH&amount=500"const res = await fetch("https://www.swissqrlink.ch/api/public/v1/qr-bill?part=payment-part&format=png", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
credAccount: "CH0209000000100013997",
credName: "Max Muster", credAddress: "Musterstrasse", credBuildingNumber: "123",
credZip: "8001", credCity: "Zürich", credCountry: "CH",
amount: 500, reference: "RF18539007547034",
}),
});
const image = await res.blob();Felder
Alle Werte als Text, der Betrag darf bei POST auch eine Zahl sein. Unbekannte Felder werden abgelehnt.
| Feld | Pflicht | Inhalt |
|---|---|---|
| credAccount | ja | IBAN oder QR-IBAN (CH/LI), mit oder ohne Leerzeichen |
| credName | ja | Name des Empfängers, max. 70 Zeichen |
| credAddress, credBuildingNumber | ja | Strasse und Hausnummer |
| credZip, credCity | ja | 4-stellige PLZ und Ort |
| credCountry | nein | CH (Standard) oder LI, muss zur IBAN passen |
| amount | nein | Betrag, z. B. 500 oder 49.90 – leer lassen für offenen Betrag |
| currency | nein | CHF (Standard) oder EUR |
| reference | je nach Konto | Bei QR-IBAN Pflicht: 27-stellige QR-Referenz. Sonst optional: RF-Referenz |
| additionalInformation | nein | Mitteilung, max. 140 Zeichen |
| debName, debAddress, debBuildingNumber, debZip, debCity, debCountry | nein | Zahlende Person – entweder ganz oder gar nicht ausfüllen |
Optionen
Optionen stehen immer in der Adresse, auch bei POST.
| Option | Standard | Werte |
|---|---|---|
| part | qr-code | qr-code (nur Swiss QR Code) oder payment-part (ganzer Einzahlungsschein) |
| format | png | png oder svg |
| size | 1024 / 2480 | Breite in Pixel (nur PNG): QR-Code 100–2000, Einzahlungsschein 100–2480. Standard ist 2480 px, also 300 dpi Druckqualität. Die Breite wird für den QR-Code auf ganze Module gerundet, damit die Kanten pixelscharf bleiben |
| margin | 4 | Ruhezone um den QR-Code in Modulen, 0–10 |
| language | DE | Sprache des Einzahlungsscheins: DE, FR, IT oder EN |
Fehler und Limits
Fehler kommen als application/problem+json mit code und einer Feldliste in errors.
| Status | Code | Bedeutung |
|---|---|---|
| 400 | invalid_request / invalid_options | Unbekanntes Feld, falscher Typ, kaputtes JSON oder ungültige Option |
| 401 | invalid_api_key | Authorization-Header gesendet – heute werden keine Schlüssel vergeben |
| 405 | method_not_allowed | Andere Methode als GET, POST oder OPTIONS |
| 413 / 415 | payload_too_large / unsupported_media_type | POST grösser als 8 KB oder ohne Content-Type: application/json |
| 422 | validation_failed | Angaben verletzen die QR-Rechnungsnorm – Details pro Feld |
| 429 | rate_limited | Limit erreicht, Wartezeit in Retry-After |
Jede Anfrage zählt fürs Limit, auch fehlerhafte. Den Stand siehst du in den Kopfzeilen RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset.
Tarife
Gleicher Endpunkt, keine Datenspeicherung – die Tarife unterscheiden sich nur im Kontingent. Preise in CHF, exkl. MWST.
Free
CHF 0
dauerhaft kostenlos
- 100 Anfragen pro Minute
- 250 pro Tag
- Ohne Registrierung
Sofort nutzbar
Starter
CHF 19
pro Monat
- 120 Anfragen pro Minute
- 25'000 pro Tag
- Eigener API-Schlüssel
In Vorbereitung
Pro
CHF 59
pro Monat
- 600 Anfragen pro Minute
- Unbegrenzt pro Tag
- Mehrere Schlüssel, Support
Auf Anfrage
Interesse an Starter oder Pro? Melde dich über das Hilfe-Fenster unten rechts.
Häufige Fragen
- Kostet die API etwas?
- Free ist dauerhaft kostenlos und ohne Registrierung: 100 Anfragen pro Minute, 250 pro Tag. Starter und Pro folgen mit API-Schlüssel.
- Werden Rechnungsdaten gespeichert?
- Nein. Die Angaben werden nur für die Antwort verarbeitet. Für das Rate-Limit zählen wir einzig eine unlesbar gehashte Absenderkennung während 24 Stunden.
- Was ist der Unterschied zum Dynamic Link?
- Der Dynamic Link öffnet eine Rechnungsseite zum Bezahlen. Die API liefert dir direkt ein Bild für eigene PDFs, E-Mails oder Vorlagen.