Skip to main content
QR codes simplify payments by letting customers scan with their banking or wallet app instead of manually typing account details. This guide covers generating QR codes for both PayID (AUD) and crypto addresses.

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:
Example: 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:
Example for ERC-20 USDT:
Example for TRC-20 USDT:

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:
  1. Online scanner: Use an online QR decoder to verify the content matches payid:{address}
  2. Banking app test: Scan with a real Australian banking app (CommBank, ANZ, etc.)
  3. Edge cases: Test with different phone cameras, lighting conditions, and screen sizes

Quick Test Script