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; production https://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 a payment_agreement_type (e.g. MORTGAGE) and an agreement_details block that is one of four shapes:
The limit_amount caps each individual initiation. Pick it to cover your largest expected charge for variable/usage agreements.

Set up the agreement and start billing

1

Create the payment agreement

Call create-payment-agreement with a unique 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
The response returns a Hello Clever 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 id. Supply a unique client_transaction_id, the amount (within limit_amount), and a payment_initiation_notification webhook block.
Create initiation request
The response returns a 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 the limit_amount or frequency when a plan changes. Requires the Hello Clever id.
  • Change status (change-status) — set status to active, suspended, or cancelled to 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 initiation id, 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.

Webhook hygiene

Implement your webhook idempotently: Hello Clever may deliver the same payload more than once and expects a 200 OK every time. Non-200 responses are retried 3 times at 15-minute intervals. Use a distinct authorization_header per agreement/initiation to strengthen verification.