BACS Direct Debit for API only
Last updated: July 29, 2026
Before you start, you must have a Service User Number (SUN) set up for your account. To enable BACS Direct Debit payments, contact your account manager or request support.
To process a BACS Direct Debit payment:
- Set up the Direct Debit Instruction, which includes account validation.
- Send a pre-notification to your customer.
- Request a payment.
- Configure your webhook server to listen for the final result.
To set up a Direct Debit Instruction, call the Create an instrument endpoint. This action validates your customer's bank details and, if successful, creates the mandate with the BACS scheme.
Information
A BACS mandate typically becomes active within five business days of creation. You cannot collect a payment against the mandate during this period.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/instruments
You must provide your customer's bank details and account holder information. The bank_code field is the UK sort code.
When you verify the instrument, we check the first_name and last_name provided in account_holder against the bank account details provided in account_number and bank_code:
- If the details match, we automatically create the mandate and return a
201 Createdresponse. - If the details partially match, we return a
422error to warn you of a discrepancy, and share the suggested name where available. Add"allowPartialMatch": trueto your request to bypass the validation warning and create the mandate anyway. - If the details do not match, we return a
422error to warn you of a discrepancy.
1{2"type": "bacs",3"instrument_data": {4"account_number": "31392621",5"bank_code": "609242",6"currency": "GBP",7"country": "GB",8"allow_partial_match": true9},10"account_holder": {11"first_name": "Toby",12"last_name": "Arden",13"type": "individual",14"email": "toby.arden@example.com"15},16"account": {17"processing_channel_id": "pc_ovo75iz4hdyudnx6tu74mum3fq"18}19}
1{2"type": "bacs",3"id": "src_wmlfc3zyhqzehihu7giusaaawu",4"fingerprint": "vnsdrvikkvre3dtrjjvlm5du4q"5}
The id returned represents the saved instrument containing your mandate ID. You must provide this ID when you request a BACS Direct Debit payment.
You can retrieve a mandate by calling the following endpoints:
get
https://{prefix}.api.checkout.com/instruments/{id}
delete
https://{prefix}.api.checkout.com/instruments/{id}
After you set up the Direct Debit Instruction, call the pre-notification endpoint to send your customer an advance notice email before you collect the payment.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/apms/bacs/notifications
1{2"source_id": "src_wmlfc3zyhqzehihu7giusaaawu",3"notification_type": "advance_notice",4"collection_date": "2026-10-20",5"amount": 45999,6"currency": "GBP",7"customer_email": "toby.arden@example.com",8"reference": "ORDER_01234",9"billing_descriptor": "CHECKOUT RE TEST PAYMENT",10"support_email": "support@example.com",11"support_phone": "+44 1234 567890"12}
To request a payment, call the Request a payment endpoint. Set source.type to id and provide the instrument ID returned when you set up the Direct Debit Instruction, along with the mandate reference.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/payments
1{2"source": {3"type": "id",4"id": "src_wmlfc3zyhqzehihu7giusaaawu"5},6"amount": 2500,7"currency": "GBP",8"reference": "ORDER_01234",9"processing_channel_id": "pc_ovo75iz4hdyudnx6tu74mum3fq",10"customer": {11"id": "cus_ru2v6vjljcgu5t4iaxrb6pjhno"12},13"processing": {14"mandate_reference": "MANDATE-001"15}16}
If you receive a 201 Created response with a status field set to Pending, the payment has been initiated against the mandate.
1{2"id": "pay_er3uvjvfgpauje7o64agv3damy",3"status": "Pending",4"reference": "ORDER_01234",5"customer": {6"id": "cus_ru2v6vjljcgu5t4iaxrb6pjhno",7"name": "Toby Arden"8},9"_links": {10"self": {11"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_er3uvjvfgpauje7o64agv3damy"12}13}14}
You can partially or fully refund a payment through the Dashboard or the Refund API if both of the following conditions are true:
- It's been seven or more days since the original payment date.
- The payment status is
captured.
When you request a refund, you receive a payment_refund_pending webhook.
Information
If you plan to issue a refund, communicate this to the customer to prevent them from simultaneously canceling the payment with their bank. If the customer is credited twice, contact them directly to resolve the situation.
If the refund is successfully sent and accepted by the BACS Direct Debit scheme, you receive a payment_refunded webhook, and the payment status changes to refunded or partially_refunded.
If the refund is declined by the BACS Direct Debit scheme or the customer's bank, you receive a payment_refund_declined webhook.