Build Single Touch Payroll (STP) Phase 2 Pay Event
Skill: Convert a pay run into the STP Phase 2 pay event reported to the ATO
Region: Australia
Category: Payroll — Single Touch Payroll (STP) reporting
Does: Takes an ordinary pay run and produces the Single Touch Payroll Phase 2 pay event (the payevnt / payeventemp message) lodged with the ATO through the Standard Business Reporting (SBR2) channel, carrying employer details, per-payee year-to-date gross, PAYG withholding and super, with gross disaggregated into the STP2 income components.
System: ATO Single Touch Payroll (STP) Phase 2 via SBR2
The STP pay event reports cumulative year-to-date amounts, not just this period's figures — the latest accepted YTD set replaces the previous one. It must be lodged on or before the day employees are paid. Validate against the current ATO STP Phase 2 business implementation guide before sending.
When this applies
- You run payroll and make a payment of salary, wages, or other payments subject to PAYG withholding to an employee.
- You must report each pay event to the ATO on or before the payday (the
RPreporting party / payer). - Applies to STP Phase 2 reporting, which requires the disaggregation of gross and additional payee attributes (employment basis, income type, tax treatment code) over and above Phase 1.
Input data required
| Input | STP / payroll term |
|---|---|
| Employer ABN or WPN; branch number | Payer ABN (BMS payer identifier) / Withholding Payer Number |
| BMS identifier (your payroll software's ID) | BMS ID |
| Pay/Update indicator, run date, pay period start/end | Pay event header |
| Payee TFN (or exemption code), payroll ID, name, DOB, address | Payee identification |
| Employment basis, income type, country code, tax treatment code | STP2 payee attributes |
| YTD gross disaggregated (see mapping), allowances, deductions | Income components |
| YTD PAYG amount withheld | Payee withholding |
| YTD employer super (SG) liability and reportable employer super (RESC) | Super entitlement |
Each payee carries a TFN (or a valid TFN exemption code, e.g. 000000000 where not provided) and the payer-assigned payroll ID. The BMS ID ties the YTD figures to the payroll system that generated them; changing BMS ID requires care to avoid duplicating YTD.
Message structure (payevnt / payeventemp)
The pay event is one payer-level message (payevnt) containing one or more employee records (payeventemp):
PAYEVNT (payer level)
├── Australian Business Number / WPN, Branch
├── BMS Identifier
├── Pay/Update Date, Run Date-Time
├── Submission Id, Period totals (PAYEVNT signed amounts)
└── PAYEVNTEMP (one per payee)
├── Payee TFN (or exemption), Payroll ID, Name, DOB, Address
├── Employment Basis (F/P/C/L/D), Income Type, Country Code
├── Tax Treatment Code (6-char, e.g. RTXXXX)
├── Income Stream Collection
│ ├── Gross (disaggregated — see below)
│ ├── PAYG Amount Withheld (YTD)
│ ├── Allowances (by type code: CD, TD, KN, LD, MD, QN, TR, OD ...)
│ ├── Deductions (Union/Professional Assoc; Child Support G/D)
│ ├── Lump Sum (A/B/D/E/W), ETP collection
│ └── Super Entitlements (SG liability; RESC; OSO)
└── ...
Disaggregation of gross (STP2): Phase 2 splits what Phase 1 reported as a single "gross" into separately reported components. Report YTD amounts for: Gross (residual), Paid Leave, Allowances (itemised by type), Overtime, Bonuses and Commissions, Directors' Fees, Salary Sacrifice (S — superannuation, O — other employee benefits), Lump Sum payments and ETP separately. Amounts are signed and cumulative for the financial year.
Calculation rules
- All amounts are year-to-date for the current financial year (1 July – 30 June), not per-pay; the ATO retains the latest accepted YTD per payee/payroll ID.
- The reported residual Gross = total ordinary earnings minus the amounts moved out into Paid Leave, Overtime, Bonuses/Commissions, Directors' Fees, Allowances, Salary Sacrifice and Lump Sums (those are reported in their own fields, not inside Gross).
- Salary sacrifice is reported as a positive amount in its own component and is excluded from Gross (it reduces taxable gross).
- PAYG amount withheld is the YTD withholding for the payee; the payer-level period total reconciles to the sum across payees for the period.
- Super: report the YTD SG liability (super guarantee — 11.5% of ordinary time earnings for 2024–25, scheduled to be 12% from 1 July 2025) and any RESC separately.
- A Pay event sets new YTD; an Update event corrects YTD without an associated payment.
Worked example (one payee, financial year to date)
{
"PAYEVNT": {
"Australian.BusinessNumber.Identifier": "53004085616",
"Organisation.PayrollHeadcount.Number": 1,
"Software.Information.BusinessManagementSystemIdentifier": "BMS-ACME-001",
"PayEvent.RunDateTime.Generation.Datetime": "2025-08-15T18:05:00",
"Payer.PayPeriod.StartDate": "2025-08-01",
"Payer.PayPeriod.EndDate": "2025-08-15",
"Payer.MessageTimestamp.Generation.Datetime": "2025-08-15T18:05:00",
"Payer.TotalPaymentAmount": 4200.00,
"Payer.IncomeTaxAndSuperablePeriod.PayAsYouGoWithholding.TaxAmount": 980.00,
"PAYEVNTEMP": [
{
"Payee.TaxFileNumber.Identifier": "123456782",
"Payee.PayrollIdentifier": "EMP-0042",
"Payee.Person.FamilyName.Text": "Nguyen",
"Payee.Person.GivenName.Text": "Priya",
"Payee.Birth.Date": "1990-04-12",
"Payee.EmploymentBasis.Code": "F",
"Income.Stream.Type.Code": "SAW",
"Payee.Income.TaxTreatment.Code": "RTXXXX",
"Income": {
"Gross.Payments.Amount": 38000.00,
"PaidLeave": [{ "Type.Code": "O", "Payments.Amount": 1800.00 }],
"Overtime.Payments.Amount": 1200.00,
"BonusesAndCommissions.Payments.Amount": 0.00,
"Allowances": [
{ "Type.Code": "CD", "Payments.Amount": 600.00 },
{ "Type.Code": "TD", "Payments.Amount": 320.00 }
],
"SalarySacrifice": [{ "Type.Code": "S", "Payments.Amount": 2000.00 }],
"PayAsYouGoWithholding.Tax.Withheld.Amount": 8600.00
},
"Super": [
{ "Entitlement.Type.Code": "SGC", "Payments.Amount": 4600.00 },
{ "Entitlement.Type.Code": "RESC", "Payments.Amount": 2000.00 }
]
}
]
}
}
This is the logical payload; the SBR2 channel transports it as the payevnt/payeventemp XBRL/XML message. Code values (income type SAW, allowance types CD/TD, salary sacrifice S, super SGC/RESC, tax treatment code) follow the ATO STP Phase 2 lists.
Validation checklist
- Payer ABN (or WPN) and branch present; BMS ID matches the system that holds the YTD
- Pay/Update indicator and payday set; lodged on or before the date employees are paid
- Each payee has a TFN (or valid exemption code) and a stable payroll ID
- STP2 payee attributes present: employment basis, income type, tax treatment code
- Gross is disaggregated — paid leave, overtime, bonuses/commissions, directors' fees, allowances (itemised), salary sacrifice and lump sums reported in their own fields, not in Gross
- All income, withholding and super amounts are financial-year YTD, not per-pay
- Super reports SG liability and RESC separately at the current SG rate
- Payer-level period totals reconcile to the sum of payee amounts for the period
Last updated: 2026-06-04 — confirm the active schema version, field codes, and ATO/portal requirements against the current Australian Taxation Office specifications before use.