Bank Debits

Bank Debits payment method

Bank debits pull funds directly from the customer's bank account. Customers provide their bank account information and agree to a mandate to debit their account at specified intervals and amount.

Bank Debits enables merchants to directly pull funds from the customers' bank accounts once the customers provide authorization for the same. It is primarily used for recurring transactions/mandates and for large ticket transactions like rent, fees, etc.

Bank debits are delayed notification payment methods (it might take up to 2-7 days for the payment status to be updated).

Payments Flow

a. Customer selects bank debit on the checkout page

b. They are shown a form to enter their bank details followed by a checkbox to authorize the merchant to debit their bank account later. This authorization from the customer is called mandate

c. The customers are notified about the mandate setup and every time funds are debited from their account

d. The merchant can opt for microdeposits (only on Stripe) or allow the customer to link their bank account in order to verify the authenticity of the bank details.

Bank Debits

Supported Customer Countries

Supported Currencies

ACH

United States

USD

SEPA

EU

EUR

BACS

UK

GBP

BECS

Australia

AUD

Juspay Hyperswitch currently supports the following Bank Direct Debits:

ACH

US based Bank Debit payment method that is extensively used for recurring payments use cases where payments from customers with US bank accounts are debited through the Automated Clearing House (ACH) payments system operated by Nacha.

Since ACH Direct Debit is a delayed notification payment method, it can take up to 4 business days for the payment status to be updated.

SEPA

SEPA allows direct bank debits payment for EUR denominated bank accounts in the SEPA region (list of countries). The customer accepts a mandate that authorizes the merchant to debit the account.

Since SEPA Direct Debit is a delayed notification payment method, it can take up to 14 business days for the payment status to be updated after initiating a debit from the customer's account.

BACS

BACS is a popular bank debit payment method for customers with UK bank accounts where the customers authorize a mandate for debit through the Bankers' Automated Clearing Services (BACS).

Since BACS Direct Debit is a delayed notification payment method, it can take up to 6 business days for the payment status to be updated after initiating a debit from the customer's account.

BECS

BECS is a bank debit that is used for recurring payments for customers with Australian bank accounts who authorize a mandate for debit through the Bulk Electronic Clearing System (BECS).

Since BECS Direct Debit is a delayed notification payment method, it can take up to 3 business days for the payment status to be updated after initiating a debit from the customer's account.


Connector Capability Matrix

Sourced from each connector's SupportedPaymentMethods implementation in crates/hyperswitch_connectors.

Debit Rail
Connectors
Mandates
Refunds
Settlement Timeline

ACH

Stripe, Adyen, GoCardless

✓ (all)

Up to 4 business days

SEPA

Stripe, Adyen, GoCardless, Mollie

Stripe ✓ · Adyen ✓ · GoCardless ✓ · Mollie ✗

Up to 14 business days

BACS

Stripe, Adyen

✓ (both)

Up to 6 business days

BECS

Stripe, GoCardless

✓ (both)

Up to 3 business days

Settlement is delayed because bank debit rails (ACH, SEPA, BACS, BECS) operate on batch clearing cycles — they are not real-time rails. The payment status in Hyperswitch reflects the current state on the rail and updates via webhooks as the processor receives confirmation from the clearing house.


Mandate Lifecycle

Bank debits in Hyperswitch are mandate-first: every bank debit — including a one-time debit — requires a mandate to be established before funds can be pulled.

Step 1 — Create mandate (CIT)

Send setup_future_usage: off_session on the initial payment. The customer completes bank account authorization (form + consent checkbox, or Open Banking AIS account linking). A mandate_id is returned on success.

Step 2 — Subsequent debits (MIT)

Use the returned mandate_id for all future charges. The customer is not involved.

Webhook events to expect

Event
Meaning

payment_processing

Debit submitted to the clearing house — not yet confirmed

payment_succeeded

Funds confirmed received

payment_failed

Debit returned (insufficient funds, account closed, etc.)

mandate_active

Mandate successfully established

mandate_revoked

Customer cancelled the mandate at their bank


Common Failure Modes

Debit returned (R-code / SEPA return) Symptom: Payment shows payment_processing then transitions to payment_failed after 1–4 days. Fix: The customer's bank returned the debit — check the return reason code (insufficient_funds, account_closed, no_mandate). For recurring mandates, do not retry automatically on account_closed or no_mandate; contact the customer to re-establish the mandate.

Mandate not established before MIT charge Symptom: MIT charge fails with mandate_not_found or invalid_mandate. Fix: A mandate must be created via a CIT with setup_future_usage: off_session before any MIT charge. Verify mandate_id is from the original consent capture and belongs to the same customer.

Payment remains in processing beyond expected window Symptom: Payment does not update after the settlement timeline passes. Fix: Bank debits are cleared in batches — status updates arrive via webhooks, not synchronous API polling. Ensure your webhook endpoint is configured and reachable. Contact your connector if the window has passed without a webhook event.

Last updated

Was this helpful?