Partner API reference
Every endpoint. Every field. Every status code.
REST over HTTPS. JSON in, JSON out. Uniform response envelope. Idempotency keys honoured for twenty-four hours on every write.
- Base URL
- https://api.myaccountant.com.au
- Sandbox
- Available on request. Email support.
On this page
Authentication.
Every request carries an API key in the Authorization header. Keys are provisioned by myaccountant by hand, there is no self-serve key portal in v1. Each key is bound to a single tenant, your organisation, and grants access to the companies your tenant owns.
Authorization: ApiKey ma_live_your_api_key_here Headers.
| Header | Required | Description |
|---|---|---|
Authorization | Yes | ApiKey {your_key} |
X-Company-Id | Yes* | The company ID for the request. Required for every endpoint except company creation. |
Content-Type | For POST / PUT | application/json |
Idempotency-Key | Recommended | Unique value per POST / PUT request. Prevents duplicate operations on retry within 24 hours. |
* X-Company-Id is not required when creating a company, the new company
is automatically linked to your tenant.
Response envelope.
Every endpoint returns the same shape. Errors return the same shape too,
with isSuccess: false and a human-readable
message.
{
"data": { ... },
"message": "...",
"isSuccess": true,
"errors": []
}
HTTP status codes.
Status Meaning 200Success. 201Resource created. 204Success, no body. 400Validation error or business-rule violation. 401Invalid or missing API key. 403Route not allowed or company not accessible. 429Rate limit exceeded. See the Retry-After header.
Rate limits.
The default ceiling is 60 requests per minute, scoped to the tenant. Rate
limit headers are returned on every response.
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
When the ceiling is exceeded, the response is a 429 with a Retry-After
header naming the seconds to wait.
Idempotency.
Send an Idempotency-Key header on POST and PUT
requests. We recommend a UUID. If the same key arrives again within 24
hours, the original response is returned without re-running the
operation, finalising a pay run twice, creating duplicate employees on a
retry, lodging a super contribution twice, all impossible by design.
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
Quick start.
Six requests, end to end. Create a company, add an employee, create a pay
run, finalise it, download payslips. Replace ma_live_your_key with
the key issued to your tenant.
-
1. Create a company.
curl -X POST https://api.myaccountant.com.au/api/company \ -H "Authorization: ApiKey ma_live_your_key" \ -H "Content-Type: application/json" \ -d '{ "companyName": "Acme Pty Ltd", "countryCode": "AU" }'Response includes a
companyId, save it. -
2. Add an employee.
curl -X POST https://api.myaccountant.com.au/api/payroll/employees \ -H "Authorization: ApiKey ma_live_your_key" \ -H "X-Company-Id: abc123" \ -H "Content-Type: application/json" \ -d '{ "firstName": "Jane", "lastName": "Smith", "email": "jane@acme.com", "startDate": "2026-01-15", "payFrequencyType": "Weekly", "annualSalary": 75000, "residencyType": "Resident", "employeeType": "Employee" }' -
3. Create a pay run.
curl -X POST https://api.myaccountant.com.au/api/payroll/payruns \ -H "Authorization: ApiKey ma_live_your_key" \ -H "X-Company-Id: abc123" \ -H "Content-Type: application/json" \ -d '{ "periodStartDate": "2026-01-13", "periodEndDate": "2026-01-19", "payDate": "2026-01-20", "payFrequency": "Weekly" }' -
4. Add employees to the pay run.
curl -X POST https://api.myaccountant.com.au/api/payroll/payruns/{payRunId}/employees \ -H "Authorization: ApiKey ma_live_your_key" \ -H "X-Company-Id: abc123" \ -H "Content-Type: application/json" \ -d '{ "employeeId": "emp123" }' -
5. Finalise the pay run.
curl -X POST https://api.myaccountant.com.au/api/payroll/payruns/{payRunId}/finalise \ -H "Authorization: ApiKey ma_live_your_key" \ -H "X-Company-Id: abc123" -
6. Download payslips.
curl https://api.myaccountant.com.au/api/payroll/payruns/{payRunId}/payslips \ -H "Authorization: ApiKey ma_live_your_key" \ -H "X-Company-Id: abc123"
Companies.
Manage your client companies. Companies created via the API are automatically linked to your tenant.
/api/companyCreate a company. companyName (string, required) and countryCode (string, required, ISO code such as AU).
/api/company/detailsGet company details. Requires X-Company-Id. Returns company name, ABN, address, settings.
/api/companyUpdate company. Fields: companyName, abn (11 digits), acn, streetAddress, city, state (e.g. VIC), zipCode.
Company bank details.
Used for ABA file generation and payment processing. Fields:
accountName, accountNumber, ifsc (the BSB),
apca, financialInstitutionCode.
/api/company/bank-details/api/company/bank-details/api/company/bank-detailsEmployees.
/api/payroll/employees?page=1&pageSize=20&search=smith
List employees. Query params: page (default 1),
pageSize (default 20, max 100), search (by name).
/api/payroll/employees/{id}Returns full employee detail including tax, super, bank and leave records.
/api/payroll/employeesCreate an employee.
| Field | Type | Required | Description |
|---|---|---|---|
firstName | string | Yes | First name. |
lastName | string | Yes | Last name. |
email | string | Yes | Email address. |
startDate | date | Yes | Employment start date (YYYY-MM-DD). |
payFrequencyType | string | Yes | Weekly, Fortnightly, Monthly, Quarterly. |
residencyType | string | Yes | Resident or ForeignResident. |
employeeType | string | Yes | Employee or Contractor. |
annualSalary | decimal | — | Annual salary. Set 0 for hourly workers. |
perDayOrPerHrRate | decimal | — | Hourly or daily rate. |
hoursPerWeek | decimal | — | Standard hours (default 38). |
superGuaranteeRate | decimal | — | Super rate percent (default 12.0). |
mobile | string | — | Mobile number. |
dateOfBirth | date | — | Date of birth. |
jobTitle | string | — | Job title. |
countryCode | string | — | Country code (default AU). |
/api/payroll/employees/{id}Update. Same fields as create, only provided fields are updated.
/api/payroll/employees/{id}Soft-delete. The employee stays in historical pay runs.
Sub-resources.
Each employee carries four sub-resources, each behind its own PUT endpoint.
/api/payroll/employees/{id}/bank-details
Fields: bankBSB (6 digits), bankAccountNumber,
bankAccountName, paymentModeType (0 Cash, 1 Bank, 2 Cheque).
/api/payroll/employees/{id}/tax-details
Fields: tfn, categoryTaxType, taxScale2020,
isSTSL, medicareLevySurcharge, taxOffsetAmount.
/api/payroll/employees/{id}/super-details
Fields: superGuaranteeRate (default 12.0), superFundName,
superFundABN, usiNumber, employeeMemberShipNumber,
isEmployerNominatedFund.
/api/payroll/employees/{id}/leave-details
Fields: annualLeaveOpeningBalance, personalLeaveOpeningBalance.
Pay runs.
/api/payroll/payruns?page=1&pageSize=20&status=Draft
List pay runs. Filter by status (Draft,
Finalised, Submitted, Success),
and by startDate / endDate on the pay date.
/api/payroll/payruns/{id}Returns the pay run with all employees, pay items and calculated amounts (tax, super, net pay). Tax and super are recomputed on every GET while the pay run is in Draft.
Create a pay run, auto-populated.
/api/payroll/payrunsThe convenience endpoint. The system auto-selects active employees and carries forward pay items from each employee's last finalised pay run. Use this when you want myaccountant to do the bookkeeping for you. For full control, use the explicit partner endpoint below.
| Field | Type | Required | Description |
|---|---|---|---|
periodStartDate | date | Yes | Pay period start. |
periodEndDate | date | Yes | Pay period end. |
payDate | date | Yes | Payment date. |
payFrequency | string | Yes | Weekly, Fortnightly, Monthly, Quarterly. |
payRunType | string | — | Regular (default) or Migration. |
employeeIds | string[] | — | Pre-add specific employees. Omit to auto-select. |
Create a pay run, fully explicit.
/api/payroll/payruns/partnerRecommended for partner integrations. Creates a pay run from a fully-explicit payload, no auto-select, no carry-forward. Your system declares every employee, every pay item, every line amount. The pay run is created in Draft, tax and super are recomputed on every GET.
Identify pay items by payItemTypeMasterId, the stable ATO
master code (MPIT_AU_001 is Ordinary Earnings, see the master-id
catalogue), rather than employeePayItemTypeId, the per-company
hashid. If both are sent, master id wins. The master id must be
activated for the company first (POST /api/payroll/company-payitemtypes).
Every level (pay run, employee row, pay item) accepts an optional
externalReference stored verbatim for cross-system reconciliation.
You may pass reference grossEarnings, taxWithheld,
netPay and superGuarantee figures per employee. These
are not used to override our calculations, PAYG and STP correctness is
the platform's liability, but they are echoed back in the response so you
can reconcile.
curl -X POST https://api.myaccountant.com.au/api/payroll/payruns/partner \
-H "Authorization: ApiKey ma_live_your_key" \
-H "X-Company-Id: abc123" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"payPeriodStart": "2026-01-13",
"payPeriodEnd": "2026-01-19",
"payDate": "2026-01-20",
"payFrequency": "Weekly",
"externalReference": "partner-pr-2026-w03",
"employees": [
{
"employeeId": "emp_z4IEUysX",
"externalReference": "partner-pre-aiden-w03",
"payItems": [
{
"payItemTypeMasterId": "MPIT_AU_001",
"externalReference": "partner-pi-001",
"quantity": 20,
"amount": 28.85
}
],
"calculations": {
"grossEarnings": 577.00,
"taxWithheld": 78.00,
"netPay": 499.00,
"superGuarantee": 69.24
}
}
]
}'
Common rejection causes, missing both identifiers, master id not yet
activated for the company, unknown employeeId, period end
before period start.
Add an employee after creation.
/api/payroll/payruns/{payRunId}/employees{ "employeeId": "emp123" } Pay items are populated from the employee's assigned pay-item types or carried forward from their last finalised pay run.
Update pay items.
/api/payroll/payruns/{payRunId}/payitems{
"payRunEmployeeId": "pre123",
"payItems": [
{ "id": "item1", "quantity": 38, "amount": 35.10 },
{ "id": "item2", "quantity": 8, "amount": 52.65 }
]
} Tax, super and net pay are recalculated automatically the next time you GET the pay run.
Lifecycle.
Two shapes. Customers and legacy callers finalise straight from Draft. Partners with an approval workflow use the checkpointed path, Draft to Preview to Approved to Finalised, with revoke and revert paths back.
Once a pay run is in Preview or Approved, it is edit-locked, pay items, employees and leave cannot be modified until reverted to Draft. Both checkpoint transitions capture the acting user's id and timestamp for audit.
| Transition | Endpoint | Notes |
|---|---|---|
| Draft → Preview | POST /api/payroll/payruns/{id}/preview | Captures previewedById + previewedAtUtc. |
| Preview → Approved | POST /api/payroll/payruns/{id}/approve | Captures approvedById + approvedAtUtc. |
| Approved → Preview | POST /api/payroll/payruns/{id}/revoke-approval | Clears the approval audit fields. |
| Preview / Approved → Draft | POST /api/payroll/payruns/{id}/revert-to-draft | Clears both checkpoint audit fields. |
| Draft → Finalised | POST /api/payroll/payruns/{id}/finalise | Legacy direct path. |
| Approved → Finalised | POST /api/payroll/payruns/{id}/finalise | Same endpoint, handler accepts either input state. |
Finalise.
POST/api/payroll/payruns/{payRunId}/finalise
After finalisation, tax and super amounts are frozen, pay items are
snapshotted with type names and flags, payslips can be generated, the
journal can be posted, and the pay run cannot be edited unless reverted
to Draft.
Delete a pay run.
DELETE/api/payroll/payruns/{id} Only Draft pay runs can be deleted.
Remove an employee from a pay run.
DELETE/api/payroll/payruns/{payRunId}/employees/{payRunEmployeeId} Only works on Draft pay runs.
Timesheet ingestion.
Three import paths into a Draft pay run, one generic, two vendor-specific.
All three converge on the same persistence model, idempotent upserts of
PayRunEmployee and PayRunEmployeePayItem rows.
Generic ingestion.
/api/payroll/payruns/{payRunId}/timesheetsThe recommended path when you are not using Tanda or Deputy. Send a normalised payload with one entry per employee per pay-item type.
{
"employees": [
{
"employeeId": "EnC5Tosm",
"externalReference": "tanda-shift-12345",
"items": [
{
"payItemTypeMasterId": "MPIT_AU_001",
"quantity": 38,
"amount": 35.50,
"externalReference": "ordinary-mon-fri"
},
{
"payItemTypeMasterId": "MPIT_AU_003",
"quantity": 4,
"amount": 53.25,
"externalReference": "overtime-sat"
}
]
}
]
} Supply exactly one item identifier. payItemTypeMasterId is the stable ATO master id and the
preferred choice when your system does not store myaccountant ids,
master ids never change across companies. employeePayItemTypeId is the
per-company hashid, use it when you have cached the ids and want to skip
the master-id join. Supplying both on the same item is a validation
error.
Idempotency.
Upserts are keyed on (payRunEmployeeId, employeePayItemTypeId).
Re-submitting the full timesheet at any point brings the pay run back in
sync with your source system, quantities and amounts are replaced, never
accumulated. Safe to retry.
Failure isolation. The whole request runs in a transaction but per-employee and per-item errors (unknown employee, unactivated master id) surface in the response body rather than rolling back the rest.
{
"isSuccess": true,
"message": "Timesheet imported partially. Some items failed.",
"data": {
"successCount": 1,
"failedCount": 1,
"employees": [
{
"employeeId": "EnC5Tosm",
"externalReference": "tanda-shift-12345",
"isSuccess": true,
"message": "Imported successfully.",
"items": [
{ "employeePayItemTypeId": "epi_abc", "payItemTypeMasterId": "MPIT_AU_001",
"externalReference": "ordinary-mon-fri", "quantity": 38, "amount": 35.50,
"action": "Inserted" }
]
},
{
"employeeId": "no-such-id",
"isSuccess": false,
"message": "Employee not found in this company.",
"items": []
}
]
}
}
Per-item action values are Inserted, Updated, or
Failed. The pay run must be in Draft. Tax, super and net pay are
recalculated automatically the next time you GET the pay run.
Tanda.
/api/payroll/payruns/{payRunId}/import/tandaIf your customer has connected Tanda via the myaccountant UI, partners can trigger a Tanda timesheet pull on their behalf. No request body, the endpoint reads the pay run's period, calls Tanda for that window using the customer's stored OAuth token, and upserts pay items using the same idempotency contract as the generic endpoint. Tanda award names are mapped to pay-item types via the master-id catalogue.
Returns the same per-employee result shape with successCount and
failedCount. Common 400 errors, Tanda not connected on the
target company, pay run not in Draft, expired Tanda access token.
Deputy.
/api/payroll/payruns/{payRunId}/import/deputySame shape as the Tanda endpoint, against the customer's Deputy connection. Deputy pay rules are mapped via their pay-rule id (stable per Deputy tenant).
Pay schedules.
A pay schedule is a recurring template that auto-creates draft pay runs on cadence. Declare it once, the anchor period, the frequency, the employee roster, and a daily sweep materialises the next draft pay run whenever an occurrence falls within the schedule's lookahead window. No per-period create call needed for steady-state payroll.
Create a schedule.
/api/payroll/payschedules{
"name": "Weekly Permanents",
"payFrequency": "Weekly",
"anchorPeriodStart": "2026-05-11",
"anchorPeriodEnd": "2026-05-17",
"anchorPayDate": "2026-05-20",
"createDraftDaysBefore": 3,
"externalReference": "partner-sched-001",
"employeeIds": ["emp_z4IEUysX", "emp_abc123"]
} | Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name. |
payFrequency | string | Yes | Weekly, Fortnightly or Monthly. |
anchorPeriodStart | date | Yes | First period start. Defines the recurrence anchor. |
anchorPeriodEnd | date | Yes | First period end. |
anchorPayDate | date | Yes | First pay date. |
createDraftDaysBefore | int | — | Days before pay date to materialise the draft (default 3). |
externalReference | string | — | Partner-system identifier. |
employeeIds | string[] | — | Initial roster. Can also be added later. |
Every later occurrence is computed by adding multiples of the frequency
to the anchor, weekly is +7 days, fortnightly is +14, monthly is +1
calendar month. The (periodEnd - periodStart) and
(payDate - periodStart) offsets are preserved forever, set a
Monday-to-Sunday week with Wednesday pay once and every later week is
Monday-to-Sunday with Wednesday pay.
Read.
/api/payroll/payschedules?includeInactive=false/api/payroll/payschedules/{id}Response includes the roster size, the employee ids and the next occurrence the sweep will generate (period start, period end, pay date).
Update.
/api/payroll/payschedules/{id}{
"name": "Weekly Permanents",
"createDraftDaysBefore": 7,
"isActive": true,
"externalReference": "partner-sched-001"
} Anchor and frequency are immutable after creation, changing them would retroactively shift every historical occurrence. To change cadence, delete and recreate.
Delete.
/api/payroll/payschedules/{id}
Historical pay runs created by the schedule are kept (PayScheduleId
is set to null), only the template itself is removed.
Roster management.
/api/payroll/payschedules/{id}/employeesBody: { "employeeIds": ["emp_..."] }. Add is idempotent, employees already on the schedule are silently skipped. Unknown employee ids reject the whole call.
/api/payroll/payschedules/{id}/employees/{employeeId}Force-create the next pay run.
/api/payroll/payschedules/{id}/create-next-payrun?force=true
Normally the daily sweep handles this. Use the explicit endpoint when a
partner wants to control timing themselves (set force=true to
skip the cadence check), or to recover from a missed sweep.
force=false still works once the lookahead window has been
entered. Idempotent, calling on the same un-generated occurrence returns
the existing pay run rather than creating a duplicate.
Sweep cadence.
The background sweep runs once per day (24-hour periodic timer with a
five-minute boot warmup). For every active schedule it computes the next
occurrence and asks, is today on or after payDate - createDraftDaysBefore?
If yes, the draft is materialised and the schedule's
lastGeneratedPeriodStart cursor advances. The cursor makes the
sweep idempotent across crashes and restarts.
Headless calculation engine.
The /api/payroll/engine/* endpoints expose the cert-grade
calculation services as stateless functions. Use myaccountant as a tax,
super and leave oracle without creating pay runs, employees, or any
bookkeeping in our system. Every endpoint is a pure function of its
inputs. Same input, same output. No database writes. Safe to retry.
Auth is the same as the rest of the partner API, Authorization: ApiKey ...
plus an X-Company-Id header. The header value is required for
auth-policy reasons but is not read by any engine handler, the math is
company-agnostic.
PAYG, Schedule 1.
/api/payroll/engine/paygSchedule 1 (NAT 1004) PAYG withholding for a single pay period. Implements every BIG §10.6 Tax Treatment Code path, Regular, Actor, Horticulturist, Senior, WHM, Seasonal Worker, Foreign Resident, No-TFN, ATO-Defined, Voluntary.
{
"earningValue": 2596.00,
"earningDays": 7,
"payDate": "2024-10-01",
"categoryTaxType": "R",
"taxScale2020": "T",
"isStsl": false,
"medicareLevySurcharge": "X",
"medicareLevyExemption": "F",
"medicareLevyReduction": "X",
"tfn": "123456782"
} Returns { "withholding": 603.00 }.
ETP, Schedule 11.
/api/payroll/engine/etpSchedule 11 (NAT 70980) ETP withholding for a single ETP line. All eight ETP codes (R, O, S, P, D, B, N, T), preservation-age rate selection, ETP cap, whole-of-income cap, no-TFN flat rate, foreign-resident treatment, multi-instalment cap reduction.
{
"code": "R",
"amount": 10000,
"dateOfBirth": "1985-01-01",
"paymentDate": "2024-10-01",
"hasTfn": true,
"isForeignResident": false,
"previousEtpAmountSameTermination": 0,
"otherTaxableIncomeYtd": 0
}
Returns { "withholdingAmount", "taxableComponent", "taxFreeComponent" }.
For genuine redundancy, call /redundancy-split first and pass the
post-split etpAmount here.
Redundancy split, Section 83-170.
/api/payroll/engine/redundancy-splitITAA97 §83-170 tax-free split for genuine redundancy, early-retirement or invalidity payments. FY 2024-25 rates, base $12,524 plus $6,264 per completed year.
{ "totalPayment": 50000, "completedYearsOfService": 5 }
Returns { "taxFreeAmount": 43844, "etpAmount": 6156 }. The
tax-free amount is reported as a Lump Sum D entry on STP (not as
TerminationPayment.TaxFreeAmount), the ETP amount is taxed via
Schedule 11 code R.
Schedule 7 unused leave on termination.
/api/payroll/engine/sch7-unused-leaveSchedule 7 (NAT 7053) unused-leave-on-termination withholding. Picks the flat 32-percent method for redundancy, early-retirement or invalidity terminations and the marginal-rates method (weekly-equivalent retax) for everything else.
{
"lumpSumAmount": 20000,
"terminationReason": "GenuineRedundancy",
"normalGrossEarnings": 0,
"normalEarningDays": 7,
"baseTaxRequest": { /* same shape as /payg above */ }
} Returns { "withholdingAmount": 6400, "lumpSumCode": "R" }.
Extra-pay-year averaging.
/api/payroll/engine/extra-pay-yearAdditional withholding added to regular Sch 1 PAYG when the financial year contains 53 weekly or 27 fortnightly pays (NAT 1004, page 4). Quarterly and monthly periods always return zero.
{ "periodGrossEarnings": 2000, "earningDuration": "Week", "isExtraPayYear": true } Returns { "extraWithholding": 10 }.
Super Guarantee.
/api/payroll/engine/super-guaranteeCompute the SG liability: gross × rate / 100, rounded to 2 dp.
{ "grossApplicableToSuper": 5000, "superGuaranteeRatePercent": 12 } Returns { "superAmount": 600 }.
Leave accrual.
/api/payroll/engine/leave-accrualAccrual, taken and running balance for one period for one leave type. Implements both PerPay and PerHourWorked accrual methods.
{
"leaveType": "Annual",
"accrualMethodType": "PerPay",
"payFrequencyType": "Weekly",
"entitlement": 152,
"standardHoursPerWeek": 38,
"totalWorkedQuantity": 0,
"adjustment": 0,
"lastYtdBalance": 0,
"isFirstRecord": false,
"openingBalance": 0,
"payDate": "2024-10-01"
}
Returns { "accrued": 2.923, "taken": 0, "ytdBalance": 2.923, "openingBalance": 0, "isNegativeBalance": false }.
Preservation age.
/api/payroll/engine/preservation-ageReference helper, preservation age for the given DOB and whether the employee has reached it by atDate.
{ "dateOfBirth": "1985-01-01", "atDate": "2024-10-01" } Returns { "preservationAge": 60, "isPreservationAgeOrOver": false }.
Payslips.
Generate a single payslip.
/api/payroll/payruns/{payRunId}/payslip{ "payRunEmployeeId": "pre123", "isDirectDownload": true } Returns a PDF download. Set isDirectDownload: true to receive the PDF bytes directly.
Download all payslips.
/api/payroll/payruns/{payRunId}/payslipsReturns base64-encoded PDFs for every employee in the pay run.
Email a payslip.
/api/payroll/payruns/{payRunId}/payslips/email{
"payRunEmployeeId": "pre123",
"emailAddresses": ["jane@acme.com"],
"subject": "Your Payslip",
"body": "Please find your payslip attached."
} Journal posting.
Post payroll expense to the business accounting module. Double-entry, reversible.
/api/payroll/payruns/{payRunId}/journalCreates the standard double-entry payroll posting. DR Salaries & Wages, DR Superannuation, CR PAYG Withholding Payable, CR Superannuation Payable, CR Accounts Payable.
/api/payroll/payruns/{payRunId}/journalReverses all journal entries for the pay run.
Reports.
Report endpoints return JSON by default. Append ?format=csv or
?format=pdf to download in those formats.
Payroll activity summary.
/api/payroll/reports/activity-summary?fromDate=2025-07-01&toDate=2026-06-30One row per employee per pay run. Columns: Employee, Gross, Tax, Super, Deductions, Net Pay.
Employee year-to-date earnings.
/api/payroll/reports/ytd-earnings?financialYear=2026Cumulative totals per employee for the financial year. financialYear=2026 means FY 2025-26 (1 Jul 2025 to 30 Jun 2026).
Superannuation report.
/api/payroll/reports/superannuation?fromDate=2025-07-01&toDate=2026-06-30Super contributions per employee per pay period. Shows fund name, member number, SG amount.
Leave balances.
/api/payroll/reports/leave-balances?asOfDate=2026-03-31Current leave balances: opening balance, accrued, taken, closing balance for annual and personal leave.
ABA bank file.
/api/payroll/payruns/{payRunId}/abaReturns the ABA file for a finalised pay run, ready for upload to your bank for direct credit payments.
Superannuation.
Manage super contributions and lodgement through the bundled Beam clearing-house.
/api/payroll/superannuation?page=1&pageSize=20List super records.
Create from a pay run.
/api/payroll/superannuation/from-payrun{ "payRunId": "pr123", "paymentType": 0 } Create from a date range.
/api/payroll/superannuation/from-date-range{
"periodFromDate": "2026-01-01",
"periodToDate": "2026-03-31",
"paymentType": 0
} Create manually.
/api/payroll/superannuation/manual{
"periodFromDate": "2026-01-01",
"periodToDate": "2026-03-31",
"payDate": "2026-04-01",
"paymentType": 0,
"employees": [
{
"employeeId": "emp123",
"superGuaranteeAmount": 750.00,
"salarySacrificeAmount": 0
}
]
} Add employees to a super record.
/api/payroll/superannuation/{id}/employeesUpdate an employee contribution.
/api/payroll/superannuation/{id}/employees/{employeeRowId}Delete a super record.
/api/payroll/superannuation/{id}Only Draft records can be deleted.
Super funds.
Manage employer-nominated super funds.
/api/payroll/superfunds/api/payroll/superfunds{
"fundName": "Australian Retirement Trust",
"abn": "60905317120",
"usi": "60905317120003",
"employerNumber": "12345"
} /api/payroll/superfunds/{id}/api/payroll/superfunds/{id}Pay item types.
View and manage the company's pay-item configuration.
/api/payroll/payitemtypesReturns every configured pay-item type (earnings, deductions) with tax and super applicability flags.
/api/payroll/payitemtypes/assignmentsReturns which pay items are assigned to which employees.
Settings.
/api/payroll/settings/api/payroll/settings{ "isAutoLodgeSuperEnabled": true, "defaultPaymentType": 0 } Enums.
Pay frequency.
| Value | Description |
|---|---|
Weekly | Every week. |
Fortnightly | Every two weeks. |
Monthly | Once a month. |
Quarterly | Every three months. |
Residency type.
| Value | Description |
|---|---|
Resident | Australian resident for tax purposes. |
ForeignResident | Foreign resident. |
Employee type.
| Value | Description |
|---|---|
Employee | PAYG employee. |
Contractor | Independent contractor. |
Pay run status.
| Value | Numeric | Description |
|---|---|---|
Draft | 0 | Editable, not yet processed. |
Finalised | 1 | Locked for payment. |
Submitted | 2 | STP submitted to the ATO. |
Error | 3 | STP submission error. |
Success | 4 | STP accepted by the ATO. |
Pending | 5 | STP submission in flight. |
Preview | 10 | Edit-locked, awaiting review (optional checkpoint). |
Approved | 11 | Signed off, ready to finalise (optional checkpoint). |
Payment mode.
| Value | Description |
|---|---|
Cash | Cash payment. |
Bank | Bank transfer (direct credit). |
Cheque | Cheque. |
Webhooks Coming soon
Subscribe to events like payrun.finalised,
stp.submitted and super.lodged. Delivery will be
signed with HMAC-SHA256 so receivers can verify origin. Not live in v1,
poll the read endpoints on a schedule for now. Targeted for the next
partner-API milestone.
Support.
Stuck on something. Hit a 400 you cannot decode. Want to confirm the right shape for a fully-explicit partner pay run. We answer within two business days.
- Email us. support@myaccountant.com.au for integration enquiries, API questions and access requests.
- Status. myaccountant.com.au/status
Ready to start a conversation.
Send a short brief, what you are integrating, who your customers are, what volume you expect. We will respond with sandbox credentials and a 30-minute call slot.