SEPA Direct Debit
Introduction
SEPA Direct Debit (DD) is a bank-to-bank payment method available across the Single Euro Payments Area, enabling merchants to collect funds directly from a customer's account in EUR-Currency. It is widely used for recurring billing and one-off payments, particularly in markets where bank transfers are preferred over cards. SEPA Direct Debit is designed to standardize euro-denominated bank payments across participating countries, and offers a secure and reliable method for debiting accounts with the customer's authorization.
SEPA DD operates as a "pull-based" payment method, where the merchant initiates the debit after receiving prior authorization from the customer.
This authorization is granted through a mandate, which is a legal document signed by the customer to allow the merchant to collect funds from their account. The mandate includes information such as the customer's IBAN, the merchant's unique creditor ID, a unique mandate reference to identify the agreement, and the terms under which funds may be collected. Once signed, the mandate permits the merchant to initiate future payments without requiring repeated customer input.
The merchant, referred to as the creditor in SEPA terminology, is the entity authorized to collect payments from customers by initiating direct debit transactions. As part of their role, the creditor is required to store and manage mandates securely. The Creditor Identifier used can either be inherited from MPS or configured as a merchant-specific Creditor Identifier.
The customer, who authorizes the payment by signing the mandate, is referred to as the debtor. The debtor agrees to allow the creditor to initiate direct debits from their account under the terms specified in the mandate. The debtor's bank processes the payment based on the mandate details provided, ensuring that the amount and conditions match the agreement established between the customer and the shop.
SEPA Schemes
SmartPay supports both SEPA Direct Debit schemes: SEPA Core (B2C) and SEPA B2B.
SEPA Core (B2C) is the default scheme and can be used for charging standard bank accounts. It is governed by consumer protection regulations, including a right to dispute transactions within 8 weeks. Disputed transactions will be immediately returned to the customer without any option for the merchant to hold funds back. The mandate does not require pre-validation by the customer's bank which simplifies signing but increases exposure to chargeback risks. SEPA B2C is suitable for merchants offering recurring services for customers, such as digital subscriptions or memberships. For other use-cases, especially if they include shipment of physical goods, merchants must be considering the 8-weeks dispute risk.
SEPA B2B is available exclusively for designated business accounts and requires the customer to instruct their bank to pre-authorize the mandate before the first debit can be collected. The scheme does not offer chargeback rights for authorized transactions, making it a preferred option for B2B merchants with contractual agreements. Due to the additional validation and stricter format, B2B mandates carry a lower risk of unpaid debts and reduce operational exposure for the merchant.
If you are unsure which SEPA scheme to implement, contact your assigned Product Solution Specialist (PSS) for guidance.
For implementation details, please refer to documentation pages:
Supported SmartPay SEPA Mandate Options
Integration Option | Integration Reference | Core Scheme | B2B Scheme | Mandate managed by JPM MPS | Mandate managed by Merchant | JPM MPS as Creditor | Merchant as Creditor |
---|---|---|---|---|---|---|---|
SDK integration (Guest) | Checkout Web SDK | ✓ | ✓ | ✓ | |||
SDK integration (Stored) | Checkout Web SDK | ✓ | ✓ | ✓ | |||
API-only integration | Mandate management | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
The table outlines the available SmartPay SEPA mandate integration options and their supported features. The SDK integrations (Guest and Stored) support only SEPA Core (B2C) payments, with JPM MPS acting as the creditor. Mandates are created, signed, and stored by JPM MPS, and merchants are not involved in mandate handling. Mandate management via API supports both SEPA Core and B2B transactions. It allows either JPM MPS or the merchant to act as the creditor. When merchants act as creditors, they are responsible for mandate creation, signing and storage. SDK integrations are limited to SEPA Core with JPM MPS creditor setup. Mandate Management via API is required for B2B and custom Creditor ID handling.
SmartPay Integration Flow for SEPA
SmartPay enables merchants to accept SEPA Direct Debit payments through API and SDK integrations. Payments are processed synchronously, providing immediate transaction status. Mandates can either be stored for future payments or collected as one-time mandates during checkout. Mandate creation and management are handled either by JPM MPS or by the merchant, depending on the onboarding configuration. The SmartPay API supports mandate management and payment processing, while the SDKs simplify the customer authorization flow during checkout in line with SEPA requirements.
Please refer to our SEPA integration options table for more information on the appropriate setup. Our Product Solution Specialist (PSS) are at your disposal for guidance.
- For Guest and Registered flows, please see our Integration Journey.
- For Guest Checkout using SDK integration, see SmartPay's Checkout Web SDK.
- For Mandate Management via API, see Mandate Management.
- For recurring payments using SDK, see the Integration Journey MIT
SEPA DD Stored Payment Options
SmartPay supports SEPA Direct Debit for one-time and recurring payments. Customer mandates are collected and managed within SmartPay's Stored Payment Options (SPO) system to ensure SEPA compliance. Please refer to our Get SPO endpoint for more information.
When using Mandate Management, additional mandate-related data is included in the request and response payloads. The additionalData
placement varies between API responses but is consistent across create and update operations.
{
"name": "SEPA Direct Debit B2B",
"code": "SEPADDB2B", //Or "SEPADDCORE"
"carrierNumber": "DE******",
"reference": "U861vQBGPgSn8iPeNfGH5",
"isDefault": false,
"isExpired": false,
"expiresSoon": false,
"expiryDate": "12/2999",
"additionalData": [
{
"name": "dd.creditorName",
"value": "J.P. Morgan Mobility Payments Solutions"
},
{
"name": "dd.creditorIdentifier",
"value": "LU11ZZZ0000000000000001491"
},
{
"name": "dd.creditorAddressCity",
"value": "Munich"
},
{
"name": "dd.creditorAddressCountryCode",
"value": "DE"
},
{
"name": "dd.creditorAddressNumber",
"value": "456"
},
{
"name": "dd.creditorAddressLine1",
"value": "Leopoldstr."
},
{
"name": "dd.creditorPostCode",
"value": "80807"
},
{
"name": "dd.mandateStatus",
"value": "ACTIVE"
},
{
"name": "dd.mandateReference",
"value": "HM3BY4H***V4F5SQDXYZD5"
},
{
"name": "dd.mandateDateOfSignature",
"value": "2021-02-23"
},
{
"name": "dd.mandateId",
"value": "224e1e25-12d5-4015-8d18-64383a14d50e"
},
{
"name": "dd.mandateVersionTag",
"value": "0001"
},
{
"name": "dd.debtorBankName",
"value": "Banca Frencesa new"
},
{
"name": "dd.debtorBankBic",
"value": "PSSTFRPPNEW"
}
]
}
SEPA DD Additional Data Parameters
For SEPA Direct Debit with Mandate Management, the API responses consistently include mandate-related data under the additionalData
field. This structure is uniform across all SEPA payment options and remains consistent between create and update operations.
Name | Description | Type | Max Length |
---|---|---|---|
additionalData | A list of "name" and "value" pairs. | Array | - |
- dd.creditorName | Name of the creditor created in the mandate. | String | 70 |
- dd.creditorIdentifier | Creditor ID created in the mandate. | String | 35 |
- dd.creditorAddressCity | City in creditor address created in the mandate. | String | 35 |
- dd.creditorAddressCountryCode | Country code of the creditor's address. | String | 2 |
- dd.creditorAddressNumber | Address number of the creditor's address. | String | 10 |
- dd.creditorAddressLine1 | Address line 1 of the creditor's address. | String | 60 |
- dd.creditorPostCode | Postcode of the creditor's address. | String | 10 |
- dd.merchantName | Name of the merchant in the mandate. | String | 30 |
- dd.mandateStatus | Possible values:
| String | - |
- dd.mandateReference | Reference number for the mandate. | String | 35 |
- dd.mandateDateOfSignature | Date of signature of B2B or CORE mandate. | String | 70 |
- dd.mandateId | Mandate ID. | String | 39 |
- dd.mandateVersionTag | Version tag of the mandate. | String | 4 |
- dd.debtorBankName | Debtor Bank Name from Create Mandate API. | String | 70 |
- dd.debtorBankBic | Debtor Bank Bic from Create Mandate API. | String | 11 |
These "name/value pairs" represent SEPA-specific mandate attributes that can be included in additionalData
and it in turn help SmartPay manage SEPA Direct Debit transactions efficiently by storing relevant mandate information within the payment option.
SEPA Test Data
Test data is provided to support simulation of payment flows across all available payment options during integration and testing. It facilitates validation of API behavior, verification of SDK rendering, and end-to-end troubleshooting without processing real transactions. The same test data applies to both SEPA Core and B2B payment flows.
Debtor Bank Accounts
IBAN | SWIFT / BIC | Country | Result |
---|---|---|---|
DE89370400440532013000 | COBADEFFXXX | Germany | Success |
DE72710900000147433891 | GENODEF1BGL | Germany | Success |
DE75512108001245126199 | SOGEDEFFXXX | Germany | Success |
MT84MALT011000012345MTLCAST001S | MALTMTMT | Malta | Success |
FR1420041010050500013M02606 | PSSTFRPPLIL | France | Success |
PL61109010140000071219812874 | WBKPPLPPXXX | Poland | Success |
IT60X0542811101000000123456 | BLOPIT22 | Italy | Success |
ES9121000418450200051332 | CAIXESBBXXX | Spain | Success |
AT483200000012345864 | RLNWATWWXXX | Austria | Success |