Overview
QR codes bridge the gap between your app and the customer’s banking/wallet app. A single scan populates all payment fields, eliminating transcription errors.PayID QR Codes (AUD)
PayID QR codes follow the standard format:payid:john.doe@example.com
When scanned with an Australian banking app, the PayID field is auto-populated and the customer only needs to enter the amount and confirm.
Supported Banks
All major Australian banks support PayID/Osko QR scanning:Implementation
Node.js
Python
TypeScript / React
Best Practices
Crypto Address QR Codes
For crypto deposits, use the standard URI format:Simple Crypto QR Generator
Integration Flow
1
Create VA
Call
POST /virtual-account/create with customerId and currency.2
Extract PayID
From the response, get
response.data.payId.3
Generate QR
Use one of the code examples above to generate a QR code from
payid:{payId}.4
Display in UI
Embed the QR code in your payment page alongside the text PayID and BSB + Account Number.
5
Customer Scans
Customer opens their banking app, scans the QR code, enters the amount, and confirms.
6
Payment Arrives
Your webhook endpoint receives a
DEPOSIT_RECEIVED event. Processing begins automatically.Testing
Verify your QR codes before deploying:- Online scanner: Use an online QR decoder to verify the content matches
payid:{address} - Banking app test: Scan with a real Australian banking app (CommBank, ANZ, etc.)
- Edge cases: Test with different phone cameras, lighting conditions, and screen sizes

