API voor je eigen software
Java, PHP, Node.js, Python of elke site met een eigen backend (ook achter nginx). Eén aanroep: POST /api/v1/qr met het artikel en de prijs.
Toon een SEPA-QR-code voor een artikel en een prijs. Je klant scant hem met zijn bankapp en betaalt met een overschrijving, rechtstreeks op de GloryPay-rekening van de verkoper.
Kies wat bij je shop past. Elke manier maakt dezelfde SEPA-QR-code, en het geld komt rechtstreeks op de GloryPay-rekening van de verkoper.
De GloryPay-QR volgt de Europese EPC-standaard (SEPA-overschrijving). Zo ver zijn de bankapps vandaag. (stand 19/10/2026)
Camera: scant de QR van een ander scherm of papier. Zelfde gsm: leest de QR uit een PDF of afbeelding op de gsm zelf.
| Bank | Camera | Zelfde gsm |
|---|---|---|
| België | ||
| KBC / KBC Brussels PDF delen naar KBC Mobile (SmartPaste) | Ja | Ja |
| BNP Paribas Fortis (Easy Banking App) | Ja | Niet vermeld |
| Belfius | Ja | Niet vermeld |
| ING België | Onbekend | Onbekend |
| Argenta | Onbekend | Onbekend |
| Duitsland · heet daar "GiroCode" | ||
| Sparkasse Fotoüberweisung > Importieren (PDF, PNG, JPEG) | Ja | Ja |
| DKB importeren van PDF of foto (meldingen van gebruikers) | Ja | Waarschijnlijk |
| Deutsche Bank bestaande foto's | Ja | Ja |
| ING Deutschland | Ja | Niet vermeld |
| Commerzbank | Ja | Niet vermeld |
| Volksbank / Raiffeisenbank (VR Banking) | Ja | Niet vermeld |
| N26 | Ja | Niet vermeld |
| Nederland | ||
| ING | Ja | Niet vermeld |
| bunq | Ja | Niet vermeld |
| Knab | Ja | Niet vermeld |
| ASN Bank, SNS, RegioBank | Ja | Niet vermeld |
| Rabobank | Nee | Nee |
| ABN AMRO | Nee | Nee |
| Triodos | Nee | Nee |
| Frankrijk | ||
| BNP Paribas, Société Générale, Crédit Agricole en BPCE voeren de QR nog in. Nog niet betrouwbaar. | ||
| Revolut getest door GloryPay (Frans account): foto van het scherm en de PDF uploaden werken | Ja | Ja |
Bron: hulppagina's van de banken, niet per app door ons getest.
Elke verkoper met een GloryPay-account krijgt een verkoperscode van GloryPay. Vraag hem aan via support. De naam en het IBAN van de verkoper worden door GloryPay aan de code gekoppeld en kunnen nooit via de API gewijzigd worden.
Bewaar de code op je server. Zet hem nooit in een webpagina, een app of JavaScript die klanten kunnen lezen.
Testcode. Naast de verkoperscode is er een testcode (die begint met gps_test_). De verkoper maakt hem aan in het ledenportaal (Webshop & developers), of jij maakt hem aan in het developer-panel. Met een testcode antwoordt de API precies hetzelfde, met "test": true, maar de QR-code bevat geen betaalopdracht, de betaalpagina toont "TEST · niet betalen" en het verzoek verloopt na maximaal 1 uur. Gebruik hem om je koppeling te bouwen en te testen, en schakel daarna over op de verkoperscode.
POST https://glorypay.com/api/v1/qr
Authorization: Bearer <verkoperscode>
Content-Type: application/json
{
"article": "Fotoreeks Zomer",
"price": 24.99,
"order": "WC-10452",
"return_url": "https://shop.example/thanks",
"valid_minutes": 1440
}| Veld | Verplicht | Omschrijving |
|---|---|---|
article | ja | Wat de klant koopt, max. 140 tekens. |
price | ja | Bedrag in EUR, van 0.01 tot 100000. |
order | nee | Je bestelnummer, max. 60 tekens. Staat op de betaalpagina. |
return_url | nee | https-link terug naar je shop, staat op de betaalpagina. |
valid_minutes | nee | Van 5 tot 10080 (7 dagen). Standaard 1440 (24 uur). |
Antwoord 201:
{
"id": "Hk7pQ2xZra",
"test": false,
"status": "open",
"article": "Fotoreeks Zomer",
"order": "WC-10452",
"amount": "24.99",
"currency": "EUR",
"merchant": "Seller name",
"iban": "BE68539007547034",
"reference": "+++123/4567/89002+++",
"epc": "BCD\n002\n1\nSCT\n...",
"qr_svg": "<svg ...>",
"qr_svg_url": "https://glorypay.com/api/v1/qr/Hk7pQ2xZra/svg",
"payment_url": "https://glorypay.com/p/Hk7pQ2xZra",
"expires_at": "2026-10-19T14:40:00.000Z"
}<img src="{qr_svg_url}" width="280" alt="SEPA QR code"> (optioneel ?size=120 tot 1000), of voeg qr_svg rechtstreeks in. De klant scant hem met de bankapp op zijn gsm.payment_url. Die pagina toont kopieerknoppen voor IBAN, bedrag en mededeling, een knop om de betaalopdracht als PDF te downloaden, en de QR-code.De QR-code volgt de Europese EPC-standaard (SEPA-overschrijving). Bankapps vullen de begunstigde, het IBAN, het bedrag en de gestructureerde mededeling automatisch in.
Het geld komt rechtstreeks op de GloryPay-rekening van de verkoper. De verkoper vindt de betaling in de GloryPay-app aan de hand van de gestructureerde mededeling (reference). Automatische betaalbevestiging is nog niet beschikbaar.
GET https://glorypay.com/api/v1/qr/{id} geeft het verzoek terug met zijn status: open, expired of cancelled. Na het verlopen geeft de afbeelding 410.
| Status | error |
|---|---|
| 401 | missing_seller_code, invalid_seller_code |
| 400 | missing_article, invalid_price, invalid_return_url, invalid_valid_minutes |
| 500 | db_error, try_again |
| 503 | not_configured |
curl -X POST https://glorypay.com/api/v1/qr \
-H "Authorization: Bearer $GLORYPAY_SELLER_CODE" \
-H "Content-Type: application/json" \
-d '{"article":"Fotoreeks Zomer","price":24.99,"order":"WC-10452"}'$r = wp_remote_post('https://glorypay.com/api/v1/qr', [
'headers' => [
'Authorization' => 'Bearer ' . GLORYPAY_SELLER_CODE,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'article' => $product_name,
'price' => $order_total,
'order' => $order_id,
'return_url' => $thank_you_url,
]),
]);
$qr = json_decode(wp_remote_retrieve_body($r), true);
echo '<img src="' . esc_url($qr['qr_svg_url']) . '" width="280" alt="SEPA QR code">';
echo '<a href="' . esc_url($qr['payment_url']) . '">Betaal met je bankapp</a>';const res = await fetch("https://glorypay.com/api/v1/qr", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GLORYPAY_SELLER_CODE}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ article: "Fotoreeks Zomer", price: 24.99, order: "WC-10452" }),
});
const qr = await res.json(); // qr.qr_svg_url, qr.payment_url, qr.referencevar body = """
{"article":"Fotoreeks Zomer","price":24.99,"order":"WC-10452"}""";
var req = HttpRequest.newBuilder(URI.create("https://glorypay.com/api/v1/qr"))
.header("Authorization", "Bearer " + System.getenv("GLORYPAY_SELLER_CODE"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
// res.statusCode() == 201, res.body() bevat qr_svg_url, payment_url en referenceimport os, requests
r = requests.post(
"https://glorypay.com/api/v1/qr",
headers={"Authorization": f"Bearer {os.environ['GLORYPAY_SELLER_CODE']}"},
json={"article": "Fotoreeks Zomer", "price": 24.99, "order": "WC-10452"},
timeout=20,
)
qr = r.json() # qr["qr_svg_url"], qr["payment_url"], qr["reference"]