Accepting payments
There are three ways to take a Digipae payment. All of them settle to the same balance and cost the same flat 1.29% on bank & wallet payments — pick whichever fits your counter, your checkout, or your invoice.
Static QR#
Print your merchant QR once and tape it to the counter. Customers scan it, type the amount, and pay. No integration required — download your static QR from Dashboard → QR codes. Best for stalls, counters, and anywhere the customer enters the amount.
Dynamic signed QR (sessions)#
Your POS creates a session for an exact amount; Digipae returns a signed payload that you render as a QR. The customer scans and confirms — no typing, no wrong amounts. The signature and 3-minute expiry prevent QR swapping and replay at the counter.
/api/v1/sessionsPOST https://quirky-chameleon-588.convex.site/api/v1/sessions
Authorization: Bearer dgp_live_YOUR_KEY
Content-Type: application/json
Idempotency-Key: order_1042
{
"amountCents": 2500,
"orderRef": "ORDER-1042",
"taxCents": 190,
"tipCents": 0,
"customerEmail": "buyer@example.com"
}| Field | Type | Notes |
|---|---|---|
amountCents | number · required | Total charge in cents. Must be > 0 and ≤ $100,000. |
orderRef | string · optional | Your order id; echoed back in webhooks so you can reconcile. |
taxCents | number · optional | Informational tax component, included in amountCents. |
tipCents | number · optional | Informational tip component, included in amountCents. |
customerEmail | string · optional | Attach a receipt email to the session. |
Idempotency-Key | header · recommended | Retry-safe session creation: same key returns the same session instead of double-charging. |
{
"sessionId": "j5xkg8...",
"status": "PENDING",
"expiresAt": 1746489600000,
"qrPayload": "digipae://qr/j5xkg8...",
"idempotent": false
}Encode qrPayload with any QR library and display it. When the customer pays, your webhook fires (or your poll flips to COMPLETED).
Pay by ID#
Every merchant has a short display ID (like DIG-7F82-Q4A1). Customers can pay you directly from the app by entering it — useful over the phone or on an invoice where scanning isn't practical. Find yours on your dashboard.
Polling a session#
/api/v1/sessions/:sessionIdAPI-key scoped status check for the session you created. Terminal states are COMPLETED, FAILED, EXPIRED, and CANCELLED.
curl https://quirky-chameleon-588.convex.site/api/v1/sessions/j5xkg8... \ -H "Authorization: Bearer dgp_live_YOUR_KEY"
Public status (embeddable checkout)#
/api/v1/public/sessions/:sessionIdA keyless, payer-facing status endpoint for browser widgets — it returns only what the paying customer may see (merchant name, amount, live status). The unguessable session id is the capability; your API key never ships to the browser.