PayID in QuickStream
Westpac’s PayID Biller is designed to speed up the push payment experience by providing a real-time receivables solution via QuickStream REST API. It enables businesses to generate unique, easily-recognisable PayIDs for customers, facilitating instant payments through online banking.
PayIDs can be configured as Static or Single-use, depending on your payment use case.
How it works
- Create a PayID for your customer. This is an email address that you choose. It can represent your customer, an invoice, or use it for a one-off payment.
- Provide this to your customer. You can do this on the web, on bills and invoices, in person or over the phone.
- Your customers send the payment to this PayID using their banking app.
- You will be notified that the payment was received.
PayIDs
PayID are unique aliases (e.g., 12345678@yourdomain.com.au
) linked to your settlement account. It replaces traditional Biller Codes and Customer Reference Numbers (CRNs) used in BPAY, offering a streamlined real-time payment experience.
A PayID can be linked to various identifiers such as a mobile number, email address, Australian Business Number (ABN), or Organisation ID.
With Westpac’s PayID Biller, you can create PayIDs in the form of email addresses.
PayID Types
Single-use PayID
- Automatically deregisters after one payment.
- Can be configured to receive a fixed value to prevent an incorrect amount being received.
Static PayID
- Used for ongoing payments like subscriptions, memberships or regular invoices.
- Stays active until you request it to be deregistered.
PayID Domains
When setting up PayID Biller, Westpac will configure the domains that will be linked to your PayIDs. These domains must be owned by your business and will form part of the PayID.
For example: 12345678@yourdomain.com.au
If your business requires additional flexibility for reporting, reconciliation, or operational segmentation, you can optionally configure subdomains for your PayID.
For example: 12345678@nsw.yourdomain.com.au
PayID Display Names
Each PayID will be associated with a display name. This must be your legal, business, or trading name, and must be easily recognisable to your customers.
The display name is registered with the PayID Addressing Service and is shown to customers when they enter your PayID in their online banking. This ensures customers can confidently identify your business before making a payment.
Choosing a PayID
The PayID local-part is the numeric or alphanumeric string that appears before the @
symbol in a PayID (e.g., 123456@biller.com.au
). It serves as a unique reference for the customer or transaction.
You can determine the local-part based on your business case, including:
- Repurposing BPAY Customer Reference Numbers (CRNs) or internal customer references that already appear on your invoice/bill.
- Using invoice numbers or order numbers for single-use PayIDs.
PayID Length
When constructing a PayID in the format local-part@domain
, the entire PayID value must not exceed 255 characters. This includes:
- The local-part (the part before
@
.) - The
@
symbol. - The domain.
Other considerations:
- No white spaces are allowed.
- PayIDs are converted to lowercase before registration.
- While the PayID format allows for a maximum of 255 characters, using a shorter PayID is recommended for a better customer experience. Shorter PayIDs will also fit more cleanly on invoices, bills and digital interfaces, particularly mobile screens.
UI and Invoicing Guidance
You may wish to include the PayID brandmark when you are presenting PayID as a payment option on a bill, on a payment page or within your checkout screen on a site or in an app.
- The PayID Brand Guidelines has information on using the PayID brandmark appropriately.
- The PayID brandmark can be downloaded in various formats from the PayID Brand Portal.
Copyright
- On first use, the word PayID should be accompanied by the ® symbol.
- You must include the following trademark note - "PayID is a registered trademark of NPP Australia Limited".
Instructions to payers
- Consider including instructions such as "Pay this invoice from your online banking using this PayID".
- If you are presenting the PayID online, consider including a copy button to enable customers to copy the PayID easily into their online banking.
Reporting
Use these methods to find PayID transactions made through QuickStream:
- You can find PayID transactions in QuickStream portal.
- Use the Transactions API to find PayID transactions.
- Download a CSV report containing PayID transactions using QuickStream portal and the REST API.
- If you have applied for BankRec, you can link QuickStream to a BankRec facility to automate in-depth bank statement reconciliation for every payment made.
The End-to-end ID appears in the QuickStream CSV file and your bank statement narrative, making it easier to match and reconcile transactions.
The payer’s name also appears in your bank statement narrative. However, be mindful when referencing this information as banks often allow payers to edit their name when making a PayID payment.
Use BankRec to access to the PayID and remittance information in bank statement formats.
Note that Westpac is unable to assist with debtor trace requests. All available information for reconciliation is already provided through your QuickStream reporting and bank statements.
Refunds
Refund PayID transactions using QuickStream portal and the REST API.
type=SINGLE
and a paymentAmount
is specified during registration, only payments that exactly match this amount will be accepted. All other amounts will be returned automatically.
Settlement and response codes
- Transaction processing and settlement for PayTo.
- Transaction response codes for PayTo.
Surcharging
Automatic calculation of surcharges by QuickStream is not supported for PayTo.
PayID with QuickStream REST API
Getting started
This page explains adding PayID to your QuickStream REST API integration. If you haven't done this integration yet, refer to our API reference.
Before starting your PayID integration:
- Ensure you have received your Secret REST API key for our QuickStream REST API.
- Create a Webhook Subscription for the
payid.registered
andpayid.payment.received
events that are posted to your back-end implementation. - Update your existing back-end integration to be ready to:
- Find or create a Customer using the Customers API.
- Create a new PayID using the PayIDs API.
- Receive PayID Webhooks for events.
How to implement PayID
Find or create a Customer
PayIDs are associated with a Customer. Perform the following steps to find or create a Customer.
-
Obtain a unique identifier for a Customer.
-
From your server, request GET
/v1/customers?customerNumber={customerNumber}
using your Secret REST API key.GET /rest/v1/customers?customerNumber=CUSTOMER123 HTTP/1.1 Host: api.quickstream.support.qvalent.com Authorization: Basic ••••••
-
The response contains the result of the query. Determine if there is an existing Customer returned in the response and retrieve the
customerId
. -
If there is no existing Customer returned, create a new one. From your server, request POST
/v1/customers
using your Secret API key. Provide at least acustomerName
and a uniquecustomerNumber
in the request body.POST /rest/v1/customers HTTP/1.1 Host: api.quickstream.support.qvalent.com Accept: application/json Content-Type: application/json Authorization: Basic •••••• Content-Length: 78 { "customerNumber": "AMIRAF", "customerName": "Amira Fontius" }
-
Retrieve the value of
customerId
from the response.
Create a PayID
Perform the following steps to create a new PayID for the Customer.
- From your server, request POST
/v1/customers/{customerNumber}/payids
with the details of the PayID. Sendtype=STATIC
andpayId=testpayment@<your domain>
. Replacewith one of the allowed domains you have registered in your facility. POST /v1/customers/{customerId}/payids HTTP/1.1 Host: api.quickstream.support.qvalent.com Content-Type: application/json Authorization: Basic •••••• Content-Length: 108 { "payId": "testpayment@mydomain.com.au", "type": "STATIC", "supplierBusinessCode": "MYCOMPANY" }
2.The response contains a PayID Model. The status will be PENDING
. Retrieve the value of id
.
Receive PayID Webhooks
QuickStream will post a Notification to the endpoint you used in your Webhook Subscription when PayID events occur. Your server will listen for an event signalling that the PayID was created.
- Your server receives the request. The
data
object in the Notification is the PayID Model.POST /notifications HTTP/1.1 Host: myserver.com.au X-Webhook-Signature: t=1704075274000,v1=a78e48ed6b5dd86830f6c571d41d19fb4829ce33f9da0c2f72656b1a4cd4dab8 Content-Type: application/json Content-Length: 404 { "id": "f9424430-3abc-49b5-be58-1f772be68d83", "timestamp": "2024-01-01T13:14:34+1100", "eventType": "payid.registered", "data": { "id": "f27371ce-0757-4767-aaf6-05ac7ce9dbe3", "payId": "testpayment@mydomain.com.au", "type": "STATIC", "supplierBusinessCode": "MYCOMPANY", "customerId": "87556623117", "status": "REGISTERED" } }
- Acknowledge the request immediately by returning an HTTP 200.
- Confirm
eventType=payid.registered
,data.status=REGISTERED
anddata.id
matches the one you created in the previous step.
Receive PayID Transaction Webhooks
QuickStream will post a Notification to the endpoint you used in your Webhook Subscription when PayID events occur. Your server will listen for an event signalling that a payment was received for the PayID.
- Your server receives the request. The
data
object in the Notification is the Transaction Response Model.POST /notifications HTTP/1.1 Host: myserver.com.au X-Webhook-Signature: t=1704075274000,v1=a78e48ed6b5dd86830f6c571d41d19fb4829ce33f9da0c2f72656b1a4cd4dab8 Content-Type: application/json Authorization: Basic •••••• Content-Length: 1373 { "id": "f9424430-3abc-49b5-be58-1f772be68d83", "timestamp": "2024-01-01T13:15:12+1100", "eventType": "payto.payment.received", "data": { "receiptNumber": "1694965611", "principalAmount": { "currency": "AUD", "amount": 10.00, "displayAmount": "$10.00" }, "surchargeAmount": { "currency": "AUD", "amount": 0.00, "displayAmount": "$0.00" }, "totalAmount": { "currency": "AUD", "amount": 10.00, "displayAmount": "$10.00" }, "status": "Approved", "responseCode": "ACSC", "responseDescription": "Accepted Settlement Completed Debtor Account", "summaryCode": "0", "transactionType": "PAYMENT", "fraudGuardResult": null, "transactionTime": "2024-01-01T13:15:12+1100", "settlementDate": "2024-01-01", "source": "PAYID", "voidable": false, "refundable": true, "comment": null, "ipAddress": null, "debtRepayment": false, "supplierBusinessCode": "MYCOMPANY", "payIdBillerAccount": { "displayName": "xxx-002 xxxxxx465", "currency": "AUD" }, "payIdAccount": { "accountType": "PAYID", "customerId": "87556623117", "id": "f27371ce-0757-4767-aaf6-05ac7ce9dbe3", "payId": "testpayment@mydomain.com.au" } } }
- Acknowledge the request immediately by returning an HTTP 200.
- Confirm
eventType=payid.payment.received
,data.status=Approved
anddata.payId.id
matches the one you created in a previous step.
Testing PayID with QuickStream
QuickStream can generate different responses to test a broad range of PayID scenarios. See the Test PayID Account Numbers.
Improving your solution
- If you are building a UI for your customers, refer to the PayID Brand Portal guidelines:
- Determine whether Static and/or Single-Use PayID implementations are suitable for your business processes.
- Subscribe to and listen for other PayID events in your Webhook integration.
- Improve the security of your Webhook integration by adding Basic Authorisation and Verifying Signatures.
Go live
Once you are ready to go live you must:
- Complete your integration with the QuickStream REST API in the Production environment.
- Perform live testing for PayID. Create PayIDs in Production, and send payments using Osko® via banking apps.
- Roll out your solution to customers as a new payment method.
See also
- PayID - Australian Payments Plus.
- Osko - Australian Payments Plus.
- What is a PayID? - Westpac.
- PayID Biller for corporates and institutions - Westpac.
- Real-time payment partners - Westpac
PayID is a registered trademark of NPP Australia.
Osko is a registered trademark of BPAY Pty Limited.