SEPA Direct Debit for Payment Setup API
Last updated: August 12, 2026
To accept SEPA Direct Debit payments, you must:
- Create a payment setup.
- Update the payment setup with the payment details.
- Confirm the payment.
Before you collect a SEPA Direct Debit payment, the customer must sign a mandate that authorizes you to debit their account, and you must send them a pre-notification before you debit any funds. These requirements come from the European Payments Council (EPC). For full instructions on setting up a mandate and sending a pre-notification, see Set up the mandate and Send a pre-notification.
If you already have a mandate ID, for example, from an existing payment instrument, provide it in payment_methods.sepa.mandate.id when you update the payment setup, rather than collecting a new signature.
Call the Create a payment setup endpoint.
Information
The Payment Setup API supports idempotency. You can safely retry API requests without the risk of duplicate requests.
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/setups
1{2"processing_channel_id": "pc_wzjki6hw5puepb5fnvqlizj2e4",3"currency": "EUR",4"amount": 10000,5"reference": "ORDER_01234",6"description": "SEPA Direct Debit payment",7"payment_type": "regular",8"settings": {9"success_url": "https://example.com/payments/success",10"failure_url": "https://example.com/payments/failure"11}12}
In the request body, provide the following:
processing_channel_id– The processing channel's unique identifieramount– The payment amountcurrency– The payment currency
1{2"id": "set_rcmepwrchqab2wsergcafvijfy",3"processing_channel_id": "pc_wzjki6hw5puepb5fnvqlizj2e4",4"amount": 10000,5"currency": "EUR",6"payment_type": "regular",7"reference": "ORDER_01234",8"description": "SEPA Direct Debit payment",9"payment_methods": {10"sepa": {11"status": "ready",12"flags": []13}14},15"available_payment_methods": [16"sepa"17],18"settings": {19"success_url": "https://example.com/payments/success",20"failure_url": "https://example.com/payments/failure"21}22}
The response returns a payment_methods object, which contains the payment methods enabled on your account.
For SEPA Direct Debit, payment_methods contains the following fields:
status– The status of the payment method. For SEPA Direct Debit, the status can be:readyunavailableinvalid
flags– An array of error codes or indicators that highlight missing or invalid information.
When the customer selects SEPA Direct Debit as the payment method on the checkout page, collect their account and mandate details and call the Update a payment setup endpoint to submit them.
Additionally, provide the following fields:
| Field | Description |
|---|---|
object | The account holder's information. |
string | The account holder type.
Required |
string | The account holder's IBAN (International Bank Account Number). |
string | The account holder's country, as an ISO 3166-1 alpha-2 country code. |
string | The account holder's account currency. |
string | The account holder's company name. |
string | The account holder's first name. |
string | The account holder's last name. |
string | The date the customer signed the mandate. |
object | The mandate information. |
string | The identifier of an existing mandate. Provide this field if you already have a mandate ID, for example, from a stored payment instrument, instead of collecting a new signature. |
string | The mandate type. Align this value with
|
1{2"processing_channel_id": "pc_wzjki6hw5puepb5fnvqlizj2e4",3"currency": "EUR",4"amount": 10000,5"reference": "ORDER_01234",6"description": "SEPA Direct Debit payment",7"payment_type": "regular",8"settings": {9"success_url": "https://example.com/payments/success",10"failure_url": "https://example.com/payments/failure"11},12"payment_methods": {13"sepa": {14"account_holder": {15"type": "individual",16"first_name": "Ali",17"last_name": "Farid"18},19"account_number": "FR7630006000011234567890189",20"country": "FR",21"currency": "EUR",22"mandate": {23"type": "core",24"date_of_signature": "2026-03-22"25}26}27}28}
1{2"id": "set_rcmepwrchqab2wsergcafvijfy",3"processing_channel_id": "pc_wzjki6hw5puepb5fnvqlizj2e4",4"amount": 10000,5"currency": "EUR",6"payment_type": "regular",7"reference": "ORDER_01234",8"description": "SEPA Direct Debit payment",9"payment_methods": {10"sepa": {11"status": "ready",12"flags": []13}14},15"available_payment_methods": [16"sepa"17],18"settings": {19"success_url": "https://example.com/payments/success",20"failure_url": "https://example.com/payments/failure"21}22}
The response returns a ready status when the payment details have been successfully validated. The payment is ready to confirm.
When the payment status changes to ready, confirm the payment by calling the Confirm a payment setup endpoint and provide:
- The payment setup
idas the{id}path parameter. sepaas the{payment_method_name}path parameter.
post
https://{prefix}.api.checkout.com/payments/setups/{id}/confirm/sepa
A successful response returns a latest.payment_id that you can use to track the payment.