Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
    Overview
    Payment method integration options
    Manage default payment methods in the Dashboard
    Payment method types
    Cards
    Pay with Stripe balance
    Crypto
    Bank debits
      ACH Direct Debit
      Bacs Direct Debit
        Accept a payment
        Import Bacs data to Stripe
        Save bank details
      Pre-authorized debit in Canada
      Australia BECS Direct Debit
      New Zeland BECS Direct Debit
      SEPA Direct Debit
    Bank redirects
    Bank transfers
    Credit transfers (Sources)
    Buy now, pay later
    Real-time payments
    Vouchers
    Wallets
    Enable local payment methods by country
    Custom payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Handle multiple currencies
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
Beyond payments
Incorporate your company
Crypto
Financial Connections
Climate
HomePaymentsAdd payment methodsBank debitsBacs Direct Debit

Bacs Direct Debit payments

Learn to accept Bacs Direct Debit payments.

How it works

See the Bacs Direct Debit overview to learn more about this payment method.

Stripe users in the UK can use the Payment Element and a Payment Intent to accept Bacs Direct Debit payments from customers with a UK bank account.

Getting started

You need a Payment Element integration to accept Bacs Direct Debit through Payment Element. You can create one by following our quickstart guide to accept a payment using Payment Element.

Note

The Bacs Direct Debit scheme rules require that your customer accept a mandate in order for Stripe to debit their account. Payment Element collects this mandate when accepting the customer’s payment details and so you don’t need to take any action to comply with this requirement.

Set up Payment Element to accept Bacs Direct Debit

Note

Bacs Direct Debit is only available for payments in GBP. Bacs Direct Debit isn’t available if you use a different currency in your Payment Intent.

You can make Bacs Direct Debit available as a payment method in your Payment Element integration in two ways.

You can allow the available payment methods to be automatically selected for you by setting automatic_payment_methods when creating the Payment Intent. In the latest version of the API, specifying the automatic_payment_methods parameter is optional because Stripe enables its functionality by default.

Command Line
cURL
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=gbp \ -d "automatic_payment_methods[enabled]"=true

You can also manage payment methods from the Dashboard. Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow. This allows Stripe to pull your payment method preferences from the Dashboard to dynamically show the most relevant payment methods to your customers. To make Bacs Direct Debit available for payment methods that you manage from the Dashboard, you must turn it on in your payment methods in the Dashboard.

Handle post-payment events

Bacs Direct Debit payments are an asynchronous method, so funds are not immediately available.

A PaymentIntent for Bacs Direct Debit can remain in a pending state for up to 5 business days from its creation if it is against a newly created mandate and up to 3 business days otherwise. After the payment is complete, the PaymentIntent status is updated to succeeded.

Bacs Direct Debit timelines

It takes 3 business days to confirm the success or failure of a Bacs Direct Debit payment when a mandate is already in place and 6 business days when a new mandate must be collected. Payments made after 20:00 UTC are submitted the following business day.

In some cases, the bank may notify us of a payment failure after the payment has been marked as successful in your Stripe account. In this case the payment failure is identified as a dispute with the appropriate reason code.

This table shows the Bacs timeline in business days from the time (T) that a payment is made when a new mandate must be collected:

T+0Mandate submitted
T+3Mandate is active and the payment is submitted
T+5Funds leave the customer’s bank account
T+6Funds are available in Stripe

Setting up webhooks

Stripe sends multiple events during the payment process and after the payment is complete. Use the Dashboard webhook tool or follow the webhook guide to receive these events and run actions, like sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow.

For Bacs Direct Debit you need to handle the payment_intent.succeeded event to confirm that the payment has succeeded. Stripe also recommends handling the payment_intent.processing, and payment_intent.payment_failed events.

To test webhooks locally, you can use Stripe CLI. After you have it installed, you can forward events to your server:

Command Line
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)

Learn more about setting up webhooks.

Test the integration

There are several test bank account numbers you can use in a sandbox to make sure this integration is ready.

Sort code Account numberDescription
10880000012345The payment succeeds and the PaymentIntent transitions from processing to succeeded.
10880090012345The payment succeeds after three minutes and the PaymentIntent transitions from processing to succeeded.
10880033333335The payment is accepted but then immediately fails with a debit_not_authorized failure code and the PaymentIntent transitions from processing to requires_payment_method. The Mandate becomes inactive and the PaymentMethod can not be used again.
10880093333335The payment fails after three minutes with a debit_not_authorized failure code and the PaymentIntent transitions from processing to requires_payment_method. The Mandate becomes inactive and the PaymentMethod can not be used again.
10880022222227The payment fails with an insufficient_funds failure code and the PaymentIntent transitions from processing to requires_payment_method. The Mandate remains active and the PaymentMethod can be used again.
10880092222227The payment fails after three minutes with an insufficient_funds failure code and the PaymentIntent transitions from processing to requires_payment_method. The Mandate remains active and the PaymentMethod can be used again.
10880055555559The payment succeeds after three minutes and the PaymentIntent transitions from processing to succeeded, but a dispute is immediately created.
10880000033333Payment Method creation succeeds, but the Mandate is refused by the customer’s bank and immediately transitions to inactive.
10880000044444The request to set up Bacs Direct Debit fails immediately due to an invalid account number and the customer is prompted to update their information before submitting. Payment details are not collected.
10880034343434The payment fails with a charge_exceeds_source_limit failure code due to the payment amount causing the account to exceed its weekly payment volume limit.
10880012121212The payment fails with a charge_exceeds_weekly_limit failure code due to the payment amount exceeding the account’s transaction volume limit.

You can test using any of the account numbers provided above. However, because Bacs Direct Debit payments take several days to process, use the test account numbers that operate on a three-minute delay to better simulate the behavior of live payments.

Note

By default, Stripe automatically sends emails to the customer when payment details are initially collected and each time a debit will be made on their account. These notifications aren’t sent in sandboxes.

Payment failures

Payments can fail for a variety of reasons. The reason for a failure is available through charge.failure_code. Only payments with certain failure codes may be retried. If a payment can’t be retried, we recommend reaching out to the customer and asking them to pay again using a different bank account or a different payment method.

Below is a list of failure codes we currently send for Bacs Direct Debit. We may add more at any time, so in developing and maintaining your code, you should not assume that only these types exist.

Failure codeDescriptionRetryable
account_closedThe bank account has been closed.No
bank_ownership_changedThe account has been transferred to a new Payment Service Provider (PSP). Check if you have been notified of the new PSP’s details. If not, you must collect a new mandate from the customer.No
debit_not_authorizedThe customer has notified their bank that this payment was unauthorized or there is no mandate held by the paying bank.No
generic_could_not_processThis payment could not be processed.Yes
insufficient_fundsThe customer’s account has insufficient funds to cover this payment.Yes
invalid_account_numberThe account number is not valid. This could mean it is not for a GBP account or that the account can’t process Direct Debit payments.No

To retry a payment, confirm the PaymentIntent again using the same PaymentMethod.

To ensure success, we recommend reaching out to the payer before retrying a payment.

OptionalConfigure customer debit date

OptionalCustomize mandate references with a prefix

See also

  • Payment Intent webhooks
  • Managing Mandates
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc