SEPA Direct Debit
Intro
SEPA Direct Debit (SDD) is the direct debit scheme for SEPA countries.
SDD allows you to debit an amount directly from your customers’ bank accounts. A SEPA mandate signed by your customer authorises you to debit this amount (or subsequent ones in the future for Card On File). To enable transaction processing, your customers sign a mandate using a one-time password received via SMS during the actual payment flow.
This payment method is only available via Full Service mode. Contact us to sign up for it.
Key benefits
- Cost-effective transaction processing by integrating the SEPA mandate creation in the payment flow.
- Secure payments with limited contestation period (8 weeks instead of 13 months) for valid mandates. Using our CreditorID solution decreases the risk of chargeback/fraud even more. Contact us if you want to sign up for this service.
- Ideal for recurring payments (i.e. subscriptions, on-demand services, pay-as-you-use services) or as an alternative to credit cards by splitting large amounts in individual instalments.
- Popular European payment method for direct debit transactions.
Integration
We offer this payment methods for the following integration modes. Learn in our dedicated guides about their individual differences:
Find a high level overview in the "Process flows" chapter.
This payment method allows you to address various business cases. Depending on the integration mode and the business case, differences apply. Have a look at this matrix to know exactly what is most suitable for you:
I want my customers to fill in the mandate.... |
|||
---|---|---|---|
On our platform | In my webshop | ||
I will process the first transaction.... | Right after the mandate creation | CreateHostedCheckout with mandate creation |
CreatePayment with mandate creation |
Later | CreateHostedCheckout with mandate creation for a 0-amount transaction + Create payment |
Create mandate + Create payment |
If you want to process a transaction with an existing mandate, apply the flow Server-to-server with existing mandate.
Hosted Checkout Page with mandate creation
Add the following properties to a standard CreateHostedCheckout request:
{
"hostedCheckoutSpecificInput":{
"returnUrl":"https://yourReturnUrl.com",
"locale":"en_GB",
"paymentProductFilters":{
"restrictTo":{
"products":[
771
]
}
}
},
"order":{
"amountOfMoney":{
"amount":1000,
"currencyCode":"EUR"
}
},
"sepaDirectDebitPaymentMethodSpecificInput":{
"paymentProduct771SpecificInput":{
"mandate":{
"customerReference":"CustomerRef_{{TIMESTAMP}}",
"recurrenceType":"RECURRING",
"signatureType":"SMS"
}
}
}
}
Properties | Remarks |
---|---|
hostedCheckoutSpecificInput paymentProductFilters.restrictTo.products |
returnURL: The URL we redirect your customers to after the payment has been finalised. locale: The language version of our Hosted Checkout Page, including the SEPA mandate form.
|
order.amountOfMoney |
Amount: The gross amount you want to charge for this order. If you want to create the mandate first and process the transaction later, set the value to "0" |
sepaDirectDebitPaymentMethodSpecificInput. |
customerReference: A unique reference for your customer. recurrenceType: The mandate's validity. Possible values:
signatureType: The mode for signing the mandate. Possible values:
|
Find detailed information about this object and its properties in our CreateHostedCheckoutAPI.
Server-to-server with mandate creation
Add the following properties to a standard CreatePayment request:
{
"order": {
"amountOfMoney": {
"amount": 123,
"currencyCode": "EUR"
}
},
"sepaDirectDebitPaymentMethodSpecificInput": {
"paymentProduct771SpecificInput": {
"mandate": {
"returnUrl": "https://yourReturnUrl.com",
"customer": {
"bankAccountIban": {
"iban": "BE45000253450589"
},
"companyName": "yourCompanyName",
"contactDetails": {
"emailAddress": "customer@domain.com"
},
"mandateAddress": {
"city": "Paris",
"countryCode": "FR",
"street": "27 rue des fleurs",
"zip": "75008"
},
"personalInformation": {
"name": {
"firstName": "john",
"surname": "doe"
},
}
},
"customerReference": "0efaa98944324234b9ad27f9355a1093",
"language": "en",
"recurrenceType": "RECURRING",
"signatureType": "SMS"
}
},
"paymentProductId": 771
}
}
Properties | Remarks |
---|---|
order.amountOfMoney |
Amount: The gross amount you want to charge for this order. |
sepaDirectDebitPaymentMethodSpecificInput. |
returnURL: The URL we redirect your customers to after the payment has been finalised. customer: All required information for creating the mandate. customerReference: A unique reference for your customer. language: The language version of the SEPA mandate form. recurrenceType: The mandate's validity. Possible values:
signatureType: The mode for signing the mandate. Possible values:
paymentProductId: The numeric identifier of the payment method on our platform. Find this id in the "Overview" chapter. |
Find detailed information about this object and its properties in our CreatePaymentAPI.
Server-to-server with existing mandate
Add the following properties to a standard CreatePayment request:
{
"order": {
"amountOfMoney": {
"amount": 200,
"currencyCode": "EUR"
}
},
"sepaDirectDebitPaymentMethodSpecificInput": {
"paymentProduct771SpecificInput": {
"existingUniqueMandateReference": "mandateRef_existingReference"
},
"paymentProductId": 771
}
}
Properties | Remarks |
---|---|
order.amountOfMoney |
Amount: The gross amount you want to charge for this order. |
sepaDirectDebitPaymentMethodSpecificInput. |
The reference of the mandate your customer signed during the creation of the first transaction. |
paymentProductId |
The numeric identifier of the payment method on our platform. Find this id in the "Overview" chapter. |
Find detailed information about this object and its properties in our CreatePaymentAPI.
Create mandate
Our CreateMandateAPI allows you to create a mandate for later use, thus separating it from the transaction request linked to this mandate. Consequentially, you can use this mandate in subsequent Server-to-server with existing mandate requests.
Add the following properties to a standard CreateMandate request:
{
"customer":{
"bankAccountIban":{
"iban":"BE45000253450589"
},
"mandateAddress":{
"city":"Monument Valley",
"countryCode":"US",
"houseNumber":"13",
"street":"Desertroad",
"zip":"84536"
},
"personalInformation":{
"name":{
"firstName":"Jane",
"surname":"Doe"
},
}
},
"customerReference":"uniqueCustomerReference123456789012",
"language":"en",
"recurrenceType":"UNIQUE",
"returnUrl":"https://yourReturnUrl.com",
"signatureType":"SMS"
}
Properties | Remarks |
---|---|
customer |
All required information for the mandate. |
customerReference |
customerReference: A unique reference for your customer. language: The language version of the SEPA mandate form. signatureType: The mode for signing the mandate. Possible values:
returnUrl: The URL we redirect your customers to after the payment has been finalised. recurrenceType: The mandate's validity. Possible values:
|
Find detailed information about this object and its properties in our CreateMandateAPI.
Process flows
As there are some differences in the flow depending on the integration mode/mandate management, we describe them separately. Read our dedicated paragraphs in the "Integration" chapter to get a JSON example for each flow.
With mandate creation via CreateHostedCheckout
This flow applies to the creation of a transaction and a mandate in one go.
It covers the following use cases:
- One-off transactions
- The first transaction of a series linked to a mandate
- Your customers finalise an order in your shop and select this payment method.
- You send a CreateHostedCheckout request to our platform to create a mandate and the payment.
- Our platform sends you a response containing a redirectUrl
- If you have sent the signatureType as SMS, our platform sends a SMS with an one -time password to your customers for verification (step 5). If you have sent signatureType as UNSIGNED, the flow continues at step 6.
- Your customers enter their bank credentials, including the one-time password, on the redirectUrl to sign the mandate and to confirm the payment.
- We redirect your customer to your returnUrl
- We send the transaction for processing and receive the result from the issuer (within 1-2 days).
- As soon as the issuer has confirmed processing the transaction, our platform updates the transaction to statusOutput.statusCode=9
- You request the transaction result from our platform via GetHostedCheckout or receive the result via webhooks.
- If the transaction was successful(statusOutput.statusCode=9), you can deliver the goods / service.
- The issuer transfers the funds to us.
- We transfer the funds to you.
With mandate creation via CreatePayment
- Your customers finalise an order in your shop and select this payment method.
- You send a CreatePayment request to our platform to create a mandate. Our platform sends you a response containing a merchantAction.redirectData.redirectURL (you will need for step 4) and sepaDirectDebitPaymentMethodSpecificOutput.paymentProduct771SpecificOutput.mandateReference (you will need for step 8).
- You redirect your customers to the merchantAction.redirectData.redirectURL. Your customers enter their phone number on this page.
- If you have sent the signatureType as SMS, our platform sends a SMS with an one -time password to your customers for verification (step 5). If you have sent signatureType as UNSIGNED, the flow continues at step 6.
- Your customers enter the one-time password on the redirectUrl to sign the mandate.
- We redirect your customer to your returnUrl
- We process the transaction immediately after the mandate creation. We receive the result from the issuer within 1-2 days.
- As soon as the issuer has confirmed processing the transaction, our platform updates the transaction to statusOutput.statusCode=9
- You request the transaction result from our platform via GetPaymentDetails or receive the result via webhooks.
- If the transaction was successful(statusOutput.statusCode=9), you can deliver the goods / service.
- The issuer transfers the funds to us.
- We transfer the funds to you.
With existing mandate via CreatePayment
This flow applies to:
- One-off transactions
- The first or follow-up transactions of a series of related payments
for which you already have a mandate.
- Your customers finalise an order in your shop and select this payment method.
- You send this CreatePayment request to our platform, including the existing mandate reference in property sepaDirectDebitPaymentMethodSpecificInput.paymentProduct771SpecificInput.existingUniqueMandateReference
- We process the transaction. We receive the result from the issuer within 1-2 days.
- As soon as the issuer has confirmed processing the transaction, our platform updates the transaction to statusOutput.statusCode=9
- You request the transaction result from our platform via GetPaymentDetails or receive the result via webhooks.
- If the transaction was successful(statusOutput.statusCode=9), you can deliver the goods / service.
- The issuer transfers the funds to us.
- We transfer the funds to you.
Mandate creation for later use via CreateMandate
This flow applies if you want to create a mandate and charge your customer at a later stage (i.e. when your customers create an account with you and you charge them at a fixed date at a later stage):
- You send a CreateMandate request to our platform.
- Our platform sends you a response containing a redirectUrl
- You redirect your customers to the redirectUrl to fill in the SEPA mandate.
- If you have sent the signatureType as SMS, our platform sends a SMS with an one-time password to your customers for verification (step 4). If you have sent signatureType as UNSIGNED, the flow continues at step 5.
- Your customers enter the one-time password on the redirectUrl to confirm the mandate creation.
- We redirect your customer to your returnUrl
Testing
Refer to our Test cases for test data and detailed instructions.
Make sure to use the right endpoint and switch back to the live URL as soon as you have finished your tests.