Before you begin
You need an access token and your partner id. See Authentication and first request.
Only server integrations using the client-credentials flow can
create a payment. X-Partner-Id is required and names
the partner that owns the payment.
This is not customer billing. Payments move money to the ATO. To charge your own customers for verification and KYB work, see Customer billing.
Create a payment
POST /v1/payments
X-Partner-Id: YOUR_PARTNER_ID
Content-Type: application/json
{
"amount": 125000,
"prn": "1234567890123",
"payerDisplayName": "Acme Pty Ltd",
"paymentFor": "BAS Jul-Sep 2026"
}
amount is in cents and
prn is the ATO payment reference number. Both are
required. contactId lets a contact's saved card be
used, and redirectUrl returns the payer to your
platform when they finish.
Creates a hosted payment for your partner account. The response carries the payment and the hosted URL your customer completes it on.
Check a payment
GET /v1/payments/{id}
X-Partner-Id: YOUR_PARTNER_ID
The {id} is a payment id only. Guest
tokens are not accepted on this route. One in the
{id} slot resolves to 404.
The partner id must match both the payment owner and the OAuth client you used to fetch the token.
List payments
GET /v1/payments?limit=20&from=0
X-Partner-Id: YOUR_PARTNER_ID
Returns the payments visible to the authenticated caller. Partner members receive only their own organisation's payments.
limit is 1 to 100 and defaults to 20.
from is an offset. Pass from + limit from
the previous response to fetch the next page.
status optionally filters the result.
Payment webhooks
Subscribe to the payment event category to be told when a payment changes state, rather than polling. See Webhooks for signature validation, retries and handling the same event twice.
Notification history for a payment
GET /v1/channel-payments/{id}/webhook-notifications
X-Partner-Id: YOUR_PARTNER_ID
Returns the delivery attempts made to your webhook endpoints for one payment. You can only access notifications for your own payments.
This route keeps the older channel-payments prefix on
purpose. In the API's own words: "The nested webhook-notifications
path is kept under the legacy channel-payments prefix
and is not part of the W8 prefix-drop, there is no canonical alias."
So use this path even though the payment itself lives under
/v1/payments.
The legacy channel-payments surface
/v1/channel-payments still exists and still works, but
it is the legacy surface. Use /v1/payments for
creating, reading and listing payments in any new integration.
The one exception is the notification history route above, which has no equivalent under the new prefix.