Skip to main content

NPP — New Payments Platform

Overview

The New Payments Platform (NPP) is Australia's real-time, data-rich payment infrastructure launched in February 2018. It enables near-instant payments 24/7/365 between accounts at participating Australian financial institutions.

  • Operator: NPP Australia Limited (NPPA)
  • Settlement: RBA Fast Settlement Service (FSS)
  • Message Standard: ISO 20022 (MX format)
  • Availability: 24/7/365

NPP Key Features

FeatureDetail
SpeedTypically < 15 seconds end-to-end
Availability24/7, 365 days/year
Data richnessUp to 280 characters of remittance data
PayIDProxy addressing (phone, email, ABN, org ID)
SettlementReal-time gross via RBA FSS
Amount limitNo mandated cap (FIs may set own limits)

NPP Architecture

                        ┌─────────────────────────┐
│ NPP Australia (NPPA) │
│ Basic Infrastructure │
│ (BI) — ISO 20022 Hub │
└────────────┬────────────┘

┌──────────────────────┼──────────────────────┐
│ │ │
┌────────▼──────────┐ ┌───────▼─────────┐ ┌────────▼──────────┐
│ Bank A │ │ Bank B │ │ Bank C │
│ (Direct │ │ (Direct │ │ (Indirect via │
│ Participant) │ │ Participant) │ │ Bank A) │
└───────────────────┘ └─────────────────┘ └───────────────────┘


┌───────────────────┐
│ RBA Fast │
│ Settlement │
│ Service (FSS) │
└───────────────────┘

NPP Message Flow (Credit Transfer)

Customer A                Bank A (Debtor)           Bank B (Creditor)
│ │ │
│── Initiate payment ────►│ │
│ (app/API/pain.001) │ │
│ │── Validate & screen │
│ │── Debit account │
│ │── Build pacs.008 ───────►│
│ │ │── Validate
│ │ │── Screen
│ │◄── pacs.002 ACK ─────────│
│ │ │
│ │◄── RBA FSS Settlement ──►│
│ │ (simultaneous) │
│ │ │── Credit account
│ │ │── camt.054 ──► Customer B
│◄── Debit notification ──│
(camt.054)

NPP Overlay Services

Overlay services are products built on top of NPP infrastructure:

Osko (by BPAY)

  • First NPP overlay service
  • Consumer and business payments
  • PayID-enabled
  • Real-time credit transfers

PayTo (launched 2022)

  • Agreement-based payments (replaces Direct Debit)
  • Payer authorises a payment agreement stored at NPP
  • Payee can initiate pull-based payments under the agreement
  • Near-real-time, 24/7
  • Replaces BECS Direct Debit for many use cases
PayTo Flow:
1. Biller creates Payment Agreement → sent to Payer's bank
2. Payer approves agreement (via banking app)
3. Biller initiates debit under agreement (any time)
4. Payer's bank validates agreement → credits biller

PayID

PayID is a proxy addressing system on the NPP that maps a simple identifier to a BSB/account number.

PayID TypeExample
Phone number0412 345 678
Email addressjane@example.com
ABN12 345 678 901
Organisation IDAssigned by NPPA

PayID Resolution Flow

Sender enters:  "jane@example.com"


NPP PayID Directory


Returns: Jane Smith, BSB 062-000, Acct 12345678


Sender confirms name match


Payment proceeds

NPP ISO 20022 Messages Used

MessagePurpose
pacs.008Credit transfer instruction
pacs.002Payment status report
pacs.004Payment return
camt.054Account notification
acmt.023PayID registration
acmt.024PayID lookup response

NPP vs BECS Direct Entry

FeatureNPPBECS/DE
Speed< 15 secondsNext business day
Hours24/7/365Business hours, cut-offs
Message formatISO 20022 (MX)Proprietary flat file
Remittance data280 charactersLimited
PayID
SettlementReal-time gross (RTGS-like)Deferred net (DNS)

NPP vs RTGS/HVCS

FeatureNPPHVCS/RTGS
Target useRetail/SMEHigh-value wholesale
Value limitNo mandated capLarge (>$250K typical)
Customer visibleTypically B2B only
Overlay services✅ Osko, PayTo

NPP Participation

TypeDescription
Connected Institution (CI)Direct NPP participant with own connection to BI
Identified Institution (II)Participates via a CI (sponsor); has own PayID space
Addressing Service Provider (ASP)Manages PayID on behalf of others

Java Spring Integration Notes

@Service
public class NppPaymentService {

@Value("${npp.endpoint}")
private String nppEndpoint;

public NppResult submitPayment(PaymentOrder order) {
// Build pacs.008
Pacs008 pacs008 = pacs008Builder.build(order);

// Validate against NPP-specific rules
nppValidator.validate(pacs008);

// Submit to NPP BI
NppResponse response = nppClient.submit(pacs008);

if (response.isAccepted()) {
order.setStatus(PaymentStatus.SUBMITTED_TO_NPP);
order.setNppTxId(response.getTransactionId());
}

return NppResult.from(response);
}

@Async
public void resolvePayId(String payId) {
PayIdLookupRequest request = new PayIdLookupRequest(payId);
PayIdResponse response = nppClient.lookupPayId(request);
// Cache and return account details
}
}

NPP Error Codes

CodeMeaning
AC01Incorrect account number
AC03Invalid creditor account number
NARRFree text error narrative
FF01Invalid file format
AM04Insufficient funds
RR04Regulatory reason (sanctions)