What you’ll build
PayTo lets you set up a digital, bank-authorised mandate (a “payment agreement”) that your customer approves once from their banking app. After that, you can pull funds on demand — for subscriptions, instalments, mortgages, usage-based billing, and more — without re-prompting the customer each time. The model has two moving parts:Payment agreement
The standing authority the customer approves. Defines who pays, how (PayID or BSB/account), the per-payment limit, and the frequency pattern.
Payment initiation
An individual charge you draw against an active agreement.
This is an AUD-only (v1) capability. Endpoints below use the AUD Payment APIs.
Prerequisites
- A merchant account and an
app-id/secret-key(from the Merchant Portal). - Sandbox endpoint
https://api.cleverhub.co; productionhttps://api-merchant.helloclever.co. - A webhook endpoint (TLS 1.2, publicly reachable, commercially-issued certificate) to receive status changes.
Agreement types and frequency
When you create an agreement you set apayment_agreement_type (e.g. MORTGAGE) and an agreement_details block that is one of four shapes:
Set up the agreement and start billing
1
Create the payment agreement
Call create-payment-agreement with a unique The response returns a Hello Clever
client_transaction_id, the limit_amount, a description (5–140 chars), the agreement_details, the payer_details, and a payment_agreement_notification (your webhook auth header). Payer details carry either bank_account_details (BSB + account number) or pay_id_details (pay_id + pay_id_type, e.g. email).Create agreement request
id and a payment_agreement_id, with an initial status of created.2
Wait for the customer to authorise
The customer approves the mandate in their banking app. Hello Clever calls your webhook when the agreement status changes. Only charge against an
active agreement.3
Draw a payment (initiation)
Call create-payment-initiation, referencing the agreement’s Hello Clever The response returns a
id. Supply a unique client_transaction_id, the amount (within limit_amount), and a payment_initiation_notification webhook block.Create initiation request
payment_initiation_id with status: pending; your webhook fires again when it moves to received (settled) or failed. To bill on a schedule, run this call on your own cadence (e.g. a monthly cron) for each active agreement.4
Manage the agreement over its life
- Amend (
amend-payment-agreement) — change thelimit_amountor frequency when a plan changes. Requires the Hello Cleverid. - Change status (
change-status) — setstatustoactive,suspended, orcancelledto pause during a dispute or cancel on churn. - Get detail / Get list — reconcile agreement state, filter by date range with pagination.
Sandbox test PayIDs
Use these payer PayIDs in sandbox to force a resulting agreement state:Refunds
Refund an individual settled initiation via Refund a payment initiation: supply the initiationid, an optional refund_amount (defaults to full), and a reason (≥5 chars). Status moves to return_pending, then return_received once the refund lands. Initiation statuses mirror the payment lifecycle: received, return_pending, return_received, return_expired, return_rejected, failed.