Pay By Bank#
Pay By Bank lets you collect a one-off payment directly from your customer's bank account with confirmation within minutes. Unlike Direct Debit, there's no mandate — the customer must authorise each payment individually via their banking app.
Availability: GBP (Faster Payments), EUR (SEPA Instant). You can also use Hosted Pages for a no-code approach — Drop-in Flow does not support Pay By Bank.
Best for: E-commerce checkouts, one-time purchases, time-sensitive payments, high-value transactions where immediate confirmation is needed, replacing card payments to reduce fees and eliminate chargebacks.
Pay By Bank vs One-off Direct Debit#
| Pay By Bank | One-off via Direct Debit | |
|---|---|---|
| Mandate required | No | Yes |
| Customer authorisation | Per payment | Once (mandate setup) |
| Confirmation speed | Minutes | 2-5 business days |
| Re-use for future payments | No, new authorisation each time | Yes, collect again without re-authorisation |
| Protection | None | Scheme-specific |
| Customer experience | The bank app redirects each time | One-time setup, then hands-off |
If you expect to charge the customer more than once, a Direct Debit mandate is usually better — the customer authorises once and you can collect future payments without requiring them to open their banking app again. If you need immediate confirmation for the first payment but also want a mandate for future charges, use Instant Payment + DD Setup instead.
How it works#
- You create a Billing Request with a payment_request — no mandate_request
- The customer authorises the payment via your chosen integration
- The customer is redirected to their banking app to approve
- Payment is confirmed within seconds
- You receive a billing_requests.fulfilled webhook — payment is processing
- You receive a payments.confirmed webhook — payment is settled
- Funds arrive in your account (typically next business day)
Step-by-step guide#
Create a Billing Request#
Response:
Confirm the payment#
After creating the Billing Request, direct the customer to authorise the payment. How you do this depends on your integration type:
- Hosted Pages — Create a Billing Request Flow and redirect the customer to the authorisation_url. See Hosted Pages.
- Custom API — Collect customer details and bank account via Billing Request actions, then confirm. See Custom Payment Pages.
Handle the outcome#
Listen for webhooks to confirm the payment status:
| Event | Meaning |
|---|---|
| billing_request_fulfilled | Customer authorised, payment is being processed |
| payment_confirmed | Payment confirmed and settled |
| payment_failed | Payment failed (e.g., insufficient funds) |
What's next?#
Understand the full event lifecycle for Pay By Bank payments.
Set up a mandate so future payments don't require re-authorisation.
Combine instant first payment with mandate setup for future charges.
Offer a fallback payment method when bank authorisation fails.