BECS Direct Debit
Overview
BECS Direct Debit draws funds directly from an Australian bank account. Unlike cards, BECS is a batch rail: payments are submitted for processing and settle T+3, and a payment that appears to be processing can still dishonour several business days later.
What the customer provides
BSB, account number, and account name — plus electronic acceptance of a Direct Debit Request (DDR). The BECS widget collects all of this, including the mandate acceptance evidence, in one flow.
The mandate
Every BECS payment must be authorised by an active direct debit mandate. When a customer completes the BECS widget flow, ElasticPay:
- captures electronic acceptance of the DDR (timestamp, IP, user agent)
- stores the mandate and retains the evidence for the BECS-required period
- returns a payment method token (
pm_xxx) linked to that mandate
You don’t manage mandate documents yourself — ElasticPay generates and retains them.
Collecting bank details
Embedded widget (recommended):
import { ElasticPayBecsWidget } from "https://pay.elasticpay.co/v1/widget.js";
const widget = new ElasticPayBecsWidget("becs-widget", { apiUrl: "https://api.elasticpay.co", publishableKey: "pk_sandbox_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", clientSecret: "pi_0abc123_secret_xyz987", onTokenize: (result) => { console.log("BECS payment method:", result.id); },});Direct API (server-side, where you already hold the details under an existing authority):
curl -X POST https://api.elasticpay.co/api/v1/payment_methods \ -H "Authorization: Bearer sk_sandbox_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "type": "au_becs_debit", "payment_method_data": { "bsb_number": "062000", "account_name": "Jane Citizen", "account_number": "12345678" } }'Processing and settlement
| Property | Value |
|---|---|
| Processing | Batch — submitted on business days |
| Settlement | T+3 |
| Dishonours | Reported after processing; a payment can fail days after submission |
| Currency | AUD |
Treat processing as genuinely pending for BECS: don’t release goods or
services on submission alone. The payment_intent.succeeded webhook is the
authoritative signal, and a dishonour arrives as payment_intent.failed.
Recurring charges
BECS is built for recurring billing: once the mandate is in place, charge the
saved pm_xxx on your schedule or via a
payment plan — no customer
interaction required.
Refunds and failures
- Refunds — supported via the Refunds API.
- Dishonours — failed debits (insufficient funds, closed account, cancelled
authority) surface as
payment_intent.failedwith a reason code. Repeated dishonours automatically cancel the mandate.