Decoupled amount
Introduction
The introduction of the SCA guidelines requires you to meet new challenges, but also offers you new opportunities.
One of them is the possibility to process different amounts during the authentication (the 3-D Secure check) and the authorisation (the actual payment) step. By combining it with our tokenisation feature, both steps can happen at different points in time, enabling you to:
- Delayed/partially split shipments: You want to offer your customers goods/services for a trial period. Alternatively, some goods/services are not available at the time of the order. Finalise/charge the delivery at a later point – but your customers will not have to visit you store and authenticate themselves again!
- Increment an authorised amount: You want to add a margin to a base amount, as the final amount you want to charge eventually is either equal or higher at the time of the order. Think of booking a hotel room in advance, but you have to charge more on the final invoice because of additional services during the stay. There is no need for a separate transaction to cover this margin: simply authenticate the order for the maximum amount (base amount + margin) and charge anything between the base and the maximum amount later.
By tokenising your customers' card during the first (the authentication) step, you can complete the transaction in the second (the actual payment) for either use case.
Decoupled amount is available for the following payment methods:
- American Express
- MasterCard
- Visa
- via integration method Server-to-server
Payment Flow
- Your customer goes to your check-out page and enters their credit card data to finalise the purchase.
- You send the first CreatePayment requests to our platform, including the mandatory 3-D Secure v2 properties. Depending on the use case, differences apply:
"Delayed/partially split shipments" use case
"Increment an authorised amount" use case - Our platform sends a response containing a merchantAction object, instructing you to roll out 3-D Secure.
- You redirect the customer to her/his issuing bank to the redirectUrl. The cardholders identify themselves.
- We submit the actual financial transaction to the acquirer to process it. You deliver the goods/services.
- At later point, you send the second CreatePayment request to our platform to finalise the transaction. Depending on the use case, difference apply:
"Delayed/partially split shipments" use case
"Increment an authorised amount" use case - Skipping 3-D Secure, we submit the actual financial transaction to the acquirer to process it.
Integration
To use this feature, you need to include additional properties to your request.
Depending on the use case and which of the two steps in the payment flow you want to perform, differences apply:
First request
Second request
Perform first request for delayed/partially split shipments
Add the following properties to a standard CreatePayment request (including mandatory 3-D Secure properties):
{
"Cardpaymentmethodspecificinput": {
"Paymentproductid": XXX,
"Threedsecure": {
"Authenticationamount": 27530
},
"Requiresapproval": true,
"Skipauthentication": false,
"Tokenize": true,
"Unscheduledcardonfilerequestor": "cardholderinitiated",
"Unscheduledcardonfilesequenceindicator": "first",
"Card": {
"Cvv": "451",
"Cardnumber": "4330264936344675",
"Expirydate": "1225",
"Cardholdername": "wile e. Coyote"
},
"Isrecurring": false,
"Transactionchannel": "ecommerce"
},
"Order": {
"Amountofmoney": {
"Currencycode": "eur",
"Amount": 0
},
"Customer": {
"Billingaddress": {
"Countrycode": "nl"
},
"device": {
"acceptHeader": "texthtml,application/xhtml+xml,application/
xml;q=0.9,/;q=0.8",
"ipAddress": "77.67.63.226",
"locale": "es",
"timezoneOffsetUtcMinutes": "-120",
"userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
"browserData": {
"colorDepth": "32",
"javaEnabled": "true",
"screenHeight": "600",
"screenWidth": "400"
}
}
}
},
"References": {
"Merchantorderid": 123456,
"Merchantreference": "ogpc8xjurfpfitba6orrpkbupogpvd"
}
}
Properties | Remarks |
---|---|
order.amountOfMoney.amount |
Set to "0" |
cardPaymentMethodSpecificInput |
threeDSecure.authenticationAmount: The full amount you want to charge when finalising the order in the second step. unscheduledCardOnFileRequestor: Set to "cardholderinitiated" to indicate that your customers initiate this transaction. unscheduledCardOnFileSequenceIndicator: Set to "first" to indicate that this is the first step in this transaction. |
Perform first request for incrementing an authorised amount
Add the following properties to a standard CreatePayment request (including mandatory 3-D Secure properties):
{
"Cardpaymentmethodspecificinput": {
"Paymentproductid": XXX,
"Threedsecure": {
"Authenticationamount": 1200
},
"Requiresapproval": true,
"Tokenize": true,
"Unscheduledcardonfilerequestor": "cardholderinitiated",
"Unscheduledcardonfilesequenceindicator": "first",
"Card": {
"Cvv": "451",
"Cardnumber": "4330264936344675",
"Expirydate": "1225",
"Cardholdername": "wile e. Coyote"
},
"Isrecurring": false,
"Transactionchannel": "ecommerce"
},
"Order": {
"Amountofmoney": {
"Currencycode": "eur",
"Amount": 1000
},
"Customer": {
"Billingaddress": {
"Countrycode": "nl"
},
"device": {
"acceptHeader": "texthtml,application/xhtml+xml,application/
xml;q=0.9,/;q=0.8",
"ipAddress": "77.67.63.226",
"locale": "es",
"timezoneOffsetUtcMinutes": "-120",
"userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
"browserData": {
"colorDepth": "32",
"javaEnabled": "true",
"screenHeight": "600",
"screenWidth": "400"
}
}
}
},
"References": {
"Merchantorderid": 123456,
"Merchantreference": "ogpc8xjurfpfitba6orrpkbupogpvd"
}
}
Properties | Remarks |
---|---|
order.amountOfMoney.amount |
The minimum base amount you want to charge when finalising the order in the second step. |
cardPaymentMethodSpecificInput |
threeDSecure.authenticationAmount: The minimum base amount + the margin. unscheduledCardOnFileRequestor: Set to "cardholderinitiated" to indicate that your customers initiate this transaction. unscheduledCardOnFileSequenceIndicator: Set to "first" to indicate that this is the first step in this transaction. |
Perform second request for delayed/partially split shipments
Add the following properties to a standard CreatePayment request:
{
"cardPaymentMethodSpecificInput": {
"PaymentProductId": XXX,
"ThreeDSecure": {
"RequiresApproval": true,
"SkipAuthentication": true,
"SkipFraudService": true,
},
"token": "f5a1bf4d98b141109d331b2b224212e0",
"unscheduledCardOnFileRequestor": "merchantInitiated",
"unscheduledCardOnFileSequenceIndicator": "subsequent",
"isRecurring": false,
"paymentProductId": 1,
"transactionChannel": "ECOMMERCE",
},
"order": {
"amountOfMoney": {
"currencyCode": "EUR",
"amount": 2753
},
"customer": {
"billingAddress": {
"countryCode": "NL"
}
},
}
}
Properties | Remarks |
---|---|
order.amountOfMoney.amount |
The full amount you want to charge (equal to cardPaymentMethodSpecificInput.threeDSecure. authenticationAmount as sent in the first step). |
cardPaymentMethodSpecificInput |
token: Set to the value you received in our response in the first step. unscheduledCardOnFileRequestor: Set to "merchantinitiated" to indicate that this is the second step in this transaction. unscheduledCardOnFileSequenceIndicator: Set to "subsequent" to indicate that this is the second step in this transaction. |
Perform second request for incrementing an authorised amount
Add the following properties to a standard CreatePayment request:
{
"cardPaymentMethodSpecificInput": {
"PaymentProductId": XXX,
"ThreeDSecure": {
"RequiresApproval": true,
"SkipAuthentication": true,
"SkipFraudService": true,
},
"token": "f5a1bf4d98b141109d331b2b224212e0",
"unscheduledCardOnFileRequestor": "merchantInitiated",
"unscheduledCardOnFileSequenceIndicator": "subsequent",
"isRecurring": false,
"paymentProductId": 1,
"transactionChannel": "ECOMMERCE",
},
"order": {
"amountOfMoney": {
"currencyCode": "EUR",
"amount": 200
},
"customer": {
"billingAddress": {
"countryCode": "NL"
}
},
}
}
Properties | Remarks |
---|---|
order.amountOfMoney.amount |
An amount between the minimum base (equal to order.amountOfMoney.amount as sent in the first step) and the maximum amount (equal to cardPaymentMethodSpecificInput.threeDSecure.authenticationAmount as sent in the first step.
|
cardPaymentMethodSpecificInput |
token: Set to the value you received in our response in the first step. unscheduledCardOnFileRequestor: Set to "merchantinitiated" to indicate that this is the second step in this transaction. unscheduledCardOnFileSequenceIndicator: Set to "subsequent" to indicate that this is the second step in this transaction. |