Create payment request
To keep our API logical and easy to understand, we decided to change some of the existing object definitions. Our system will accept both the old definition and the new definition, as long as you don't mix old and new definitions in one API call.
This means that your current implementation will keep working, but will most likely not support all the properties required to ensure the maximum number of consumers use the frictionless flow. Our new SDKs will support the new object definitions and will require some development work on your side to adopt.
Create Payment API
Request properties for 3-D Secure version 2
The below overview shows all properties in the input that are used in the 3-D Secure version 2 authentication. In the description it is mentioned if the property is required and under which conditions. For each of the properties we have marked them as follows:
New - The property did not previously exist in our API.
Moved - We have decided to move or rename an existing property to a more logical location.
Existing - This is an existing property that is used in the authentication process.
Deprecated - One property needed for 3-D Secure version 2 has an overlap with an existing property and in this case we have decided to deprecate the existing property as the new property needed to provide more detail.
Property name | Change / Type | Description | |||||
---|---|---|---|---|---|---|---|
fraudFields | ![]() |
Object | Object containing additional data that will be used to assess the risk of fraud | ||||
addressesAreIdentical | ![]() |
Boolean |
Deprecated - please use order.shipping.addressIndicator to indicate that the billing and shipping address are identical. |
||||
merchant | ![]() |
Object | Object containing information on you, the merchant | ||||
websiteUrl | ![]() |
AN60 |
The website from which the purchase was made Moved from fraudFields.website and renamed to make it more clear we expect an URL. This property is not used for 3-D Secure version 2. |
||||
contactWebsiteUrl | ![]() |
AN2048 | URL to find contact or support details to contact in case of questions | ||||
order | ![]() |
Object | Order object containing order related data | ||||
additionalInput | ![]() |
Object | Object containing additional input on the order | ||||
typeInformation | ![]() |
Object | Object containing specific classifications of the transaction | ||||
transactionType | ![]() |
Enum (string) |
Required for merchants from Brazil in case order.amountOfMoney.amount is not 0 Identifies the type of transaction being authenticated.
|
||||
customer | ![]() |
Object | Object containing data related to the consumer | ||||
account | ![]() |
Object | Object containing data related to the account the consumer has with you | ||||
createDate | ![]() |
AN8 |
The date (YYYYMMDD) on which the consumer created their account with you We will calculate the CustomerAccountAgeIndicator using this property and the order.customer.accountType. |
||||
changeDate | ![]() |
AN8 |
The last date (YYYYMMDD) on which the consumer made changes to their account with you. These are changes to billing & shipping address details, new payment account (tokens), or new users(s) added. We will use the data from this property and the order.customer.account.changedDuringCheckout to determine the 'age' of the changes. For 3-D Secure version 2 this property and the 'age' of the changes are used. |
||||
changedDuringCheckout | ![]() |
Boolean |
The changes meant here are changes to billing & shipping address details, new payment account (tokens), or new users(s) added. We will use the data from this property and the order.customer.account.changeDate to determine the 'age' of the changes. For 3-D Secure version 2 only the resulting 'age' of the changes is used. |
||||
passwordChangeDate | ![]() |
AN8 |
The last date (YYYYMMDD) on which the consumer changed their password for the account used in this transaction We will use the data from this property and the order.customer.account.passwordChangedDuringCheckout to determine the 'age' of the changes. For 3-D Secure version 2 this property and the 'age' of the password change are used. |
||||
passwordChangedDuringCheckout | ![]() |
Boolean | Property that indicates if the password of an account is changed during this checkout
We will use the data from this property and the order.customer.account.passwordChangeDate to determine the 'age' of the password change. For 3-D Secure version 2 only the resulting 'age' of the password change is used. |
||||
hasForgottenPassword | ![]() |
Boolean |
Specifies if the consumer (initially) had forgotten their password
Moved (and renamed) existing property order.fraudFields.hasForgottenPwd to the order.customer.account object This property is not used for 3-D Secure version 2. |
||||
hadSuspiciousActivity | ![]() |
Boolean |
Specifies if you have experienced suspicious activity on the account of the consumer
|
||||
authentication | ![]() |
Object | Object containing data on the authentication used by the consumer to access their account | ||||
utcTimestamp | ![]() |
AN12 | Timestamp (YYYYMMDDHHmm) of the authentication of the consumer to their account with you | ||||
method | ![]() |
Enum (String) |
Authentication used by the consumer on your website
|
||||
paymentActivity | ![]() |
Object | Object containing data on the purchase history of the consumer with you | ||||
numberOfPurchasesLast6Months | ![]() |
N4 | Number of successful purchases made by this consumer with you in the last 6 months | ||||
numberOfPaymentAttemptsLast24Hours | ![]() |
N3 | Number of payment attempts (so including unsuccessful ones) made by this consumer with you in the last 24 hours | ||||
numberOfPaymentAttemptsLastYear | ![]() |
N3 | Number of payment attempts (so including unsuccessful ones) made by this consumer with you in the last 12 months | ||||
paymentAccountOnFileType | ![]() |
Enum (String) |
Required for merchants in Brazil Indicates the type of account. For example, for a multi-account card product.
|
||||
paymentAccountOnFile | ![]() |
Object | Object containing information on the payment account data on file (tokens) | ||||
numberOfCardOnFileCreationAttemptsLast24Hours | ![]() |
N3 | Number of attempts made to add new card to the consumer account in the last 24 hours | ||||
createDate | ![]() |
AN8 |
The date (YYYYMMDD) when the payment account on file was first created. In case a token is used for the transaction we will use the creation date of the token in our system in case you leave this property empty. |
||||
accountType | ![]() |
Enum (String) | Type of the customer account that is used to place this order. Can have one of the following values:
We will try to automatically determine the value for this field:
|
||||
companyInformation | ![]() |
Object | Object containing information of the company in case the consumer is a company | ||||
vatNumber | ![]() |
AN17 |
Local VAT number of the 'consumer' Moved from order.customer This property is not used for 3-D Secure version 2. |
||||
billingAddress | ![]() |
Object | Object containing the billing address details | ||||
additionalInfo | ![]() |
AN50 | Additional address information | ||||
city | ![]() |
AN40 | City | ||||
countryCode | ![]() |
AN2 | ISO 3166-1 alpha-2 country code | ||||
houseNumber | ![]() |
AN15 | House number | ||||
stateCode | ![]() |
AN3 | ISO 3166-2 alpha-3 state code Please note that the max length used for 3-D Secure version 2 is AN3. |
||||
street | ![]() |
AN50 | Streetname | ||||
zip | ![]() |
AN10 | Zip code | ||||
device | ![]() |
Object | Object containing information on the device and browser of the consumer | ||||
acceptHeader | ![]() |
AN2048 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" The accept-header of the consumer client from the HTTP Headers. |
||||
ipAddress | ![]() |
AN45 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" The IP address of the consumer client from the HTTP Headers. Moved from fraudFields, increased in size (to also accommodate IPv6 addresses) and renamed (previously fraudFields.customerIpAddress) |
||||
deviceFingerprintTransactionId | ![]() |
AN50 |
One must use the deviceFingerprintTransactionId received by the response of the endpoint /{merchant}/products/{paymentProductId}/deviceFingerprint which was also used by the JavaScript code Moved from fraudFields.deviceFingerprintTransactionId This property is not used for 3-D Secure version 2, although in the future we might use this service to populate the device and browser related properties. |
||||
defaultFormFill | ![]() |
Enum (String) |
Degree of default form fill, with the following possible values:
Moved from fraudFields.defaultFormFill This property is not used for 3-D Secure version 2. |
||||
timezoneOffsetUtcMinutes | ![]() |
AN6 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" Offset in minutes of timezone of the client vs the UTC. Value is returned by the JavaScript getTimezoneOffset() Method. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3-D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when cardPaymentMethodSpecifInput.threeDSecure.authenticationFlow is set to "browser". |
||||
locale | ![]() |
AN8 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" Locale of the client device/browser. Returned in the browser from the navigator.language property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3-D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when cardPaymentMethodSpecifInput.threeDSecure.authenticationFlow is set to "browser". |
||||
userAgent | ![]() |
AN2048 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" User-Agent of the client device/browser from the HTTP Headers. As a fall-back we will use the userAgent that might be included in the encryptedCustomerInput, but this is captured client side using JavaScript and might be different. |
||||
browserData | ![]() |
Object |
Object containing information regarding the browser of the consumer |
||||
javaEnabled | ![]() |
Boolean |
Required for 3-D Secure version 2 for the authenticationFlow "browser"
Value is returned from the navigator.javaEnabled property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3-D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when cardPaymentMethodSpecifInput.threeDSecure.authenticationFlow is set to "browser". |
||||
javaScriptEnabled | ![]() |
Boolean |
Required for 3-D Secure version 2 for the authenticationFlow "browser"
Note: Required in future 3-D Secure version 2.2 |
||||
colorDepth | ![]() |
N2 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" ColorDepth in bits. Value is returned from the screen.colorDepth property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3-D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when cardPaymentMethodSpecifInput.threeDSecure.authenticationFlow is set to "browser". |
||||
screenHeight | ![]() |
AN6 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" Height of the screen in pixels. Value is returned from the screen.height property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3-D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when cardPaymentMethodSpecifInput.threeDSecure.authenticationFlow is set to "browser". |
||||
screenWidth | ![]() |
AN6 |
Required for 3-D Secure version 2 for the authenticationFlow "browser" Width of the screen in pixels. Value is returned from the screen.width property. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. This means that 3-D Secure version 2.1 requires the use of JavaScript to be enabled. In the upcoming version 2.2 of the specification this is no longer a requirement. As we currently support version 2.1 it means that this property is required when cardPaymentMethodSpecifInput.threeDSecure.authenticationFlow is set to "browser". |
||||
innerHeight | ![]() |
AN6 |
The innerHeight of the frame in case you are capturing your payments in a frame. We will use this to validate if the height provided in the cardPaymentMethodSpecifInput.threeDSecure.challengeCanvasSize will actually fit in the iFrame you use. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. |
||||
innerWidth | ![]() |
AN6 |
The innerWidth of the frame in case you are capturing your payments in a frame. We will use this to validate if the width provided in the cardPaymentMethodSpecifInput.threeDSecure.challengeCanvasSize will actually fit in the iFrame you use. If you use the latest version of our JavaScript Client SDK, we will collect this data and include it in the encryptedCustomerInput property. We will then automatically populate this data if available. Note: This data can only be collected if JavaScript is enabled in the browser. |
||||
contactDetails | ![]() |
Object | Object containing contact details of the consumer | ||||
mobilePhoneNumber | ![]() |
AN20 |
International version of the mobile phone number of the consumer including the leading + (i.e. +16127779311) Official max length is N15 making it AN16 to include the leading + sign |
||||
phoneNumber | ![]() |
AN20 |
International version of the home phone number of the consumer including the leading + (i.e. +16127779311) Official max length is N15 making it AN16 to include the leading + sign |
||||
workPhoneNumber | ![]() |
AN20 |
International version of the work phone number of the consumer including the leading + (i.e. +31235671500) Official max length is N15 making it AN16 to include the leading + sign |
||||
shipping | ![]() |
Object | Object containing information regarding shipping / delivery | ||||
type | ![]() |
Enum (String) | Indicates the merchandise delivery timeframe
|
||||
firstUsageDate | ![]() |
AN8 |
Date (YYYYMMDD) when the shipping details for this transaction where first used We will use the data from this property and the order.shipping.isFirstUsage to determine the 'age' of the shipping details. For 3-D Secure version 2 this property and the 'age' of the shipping details change are used. |
||||
isFirstUsage | ![]() |
Boolean | Indicator if this shipping address is used for the first time to ship an order
We will use the data from this property and the order.shipping.firstUsageDate to determine the 'age' of the shipping details. For 3-D Secure version 2 only the resulting 'age' of the shipping details is used. |
||||
addressIndicator | ![]() |
Enum (String) | Indicates shipping method chosen for the transaction.
|
||||
emailAddress | ![]() |
AN70 | Email address linked to the shipping | ||||
address | ![]() |
Object | Object containing address information | ||||
additionalInfo | ![]() |
AN50 |
Additional address information Moved from order.customer.shippingaddress |
||||
city | ![]() |
AN40 |
City Moved from order.customer.shippingaddress |
||||
countryCode | ![]() |
AN2 |
ISO 3166-1 alpha-2 country code Moved from order.customer.shippingaddress |
||||
houseNumber | ![]() |
AN15 |
House number Moved from order.customer.shippingaddress |
||||
name | ![]() |
Object |
Object containing the name elements Moved from order.customer.shippingaddress.name |
||||
firstName | ![]() |
AN15 |
Given name(s) or first name(s) of the consumer Moved from order.customer.shippingaddress.name.firstName This property is not used for 3-D Secure version 2. |
||||
surname | ![]() |
AN70 |
Surname(s) or last name(s) of the consumer Moved from order.customer.shippingaddress.name.surname This property is not used for 3-D Secure version 2. |
||||
surnamePrefix | ![]() |
AN15 |
Middle name - In between first name and surname - of the consumer Moved from order.customer.shippingaddress.name.surnamePrefix This property is not used for 3-D Secure version 2. |
||||
title | ![]() |
AN35 |
Title of consumer Moved from order.customer.shippingaddress.name.title This property is not used for 3-D Secure version 2. |
||||
state | ![]() |
AN35 |
State of the consumer Moved from order.customer.shippingaddress.state This property is not used for 3-D Secure version 2. |
||||
stateCode | ![]() |
AN3 |
ISO 3166-2 alpha-3 state code Moved from order.customer.shippingaddress.stateCode |
||||
street | ![]() |
AN50 |
Street name Moved from order.customer.shippingaddress.street |
||||
zip | ![]() |
AN17 |
Zip code Moved from order.customer.shippingaddress.zip |
||||
trackingNumber | ![]() |
AN19 |
Shipment tracking number Moved from fraudFields and renamed (old name = shipmentTrackingNumber) to bundle all the shipping related properties together. This property is not used for 3-D Secure version 2. |
||||
comments | ![]() |
AN160 |
Comments included during shipping Moved from fraudFields and renamed (old name = shipComments) to bundle all the shipping related properties together. This property is not used for 3-D Secure version 2. |
||||
shoppingCart | ![]() |
Object | Object containing information on the item(s) in the shopping cart | ||||
isPreOrder | ![]() |
Boolean |
The consumer is pre-ordering one or more items |
||||
preOrderItemAvailabilityDate | ![]() |
AN8 | Date (YYYYMMDD) when the preordered item becomes available | ||||
giftCardPurchase | ![]() |
Object | Object containing information on purchased gift card(s) | ||||
amountOfMoney | ![]() |
Object | Object containing information on an amount of money | ||||
amount | ![]() |
N12 | Amount in cents and always having 2 decimals | ||||
currencyCode | ![]() |
AN3 | Three-letter ISO currency code representing the currency for the amount | ||||
numberOfGiftCards | ![]() |
N2 | Number of gift cards that are purchased through this transaction | ||||
reOrderIndicator | ![]() |
Boolean | Indicates whether the cardholder is reordering previously purchased item(s)
|
||||
cardPaymentMethodSpecificInput | ![]() |
Object | Object containing data regarding card payments | ||||
transactionChannel | ![]() |
Enum (String) | Indicates the channel via which the payment is created. Allowed values:
This is used to determine if the transaction is eligible for 3-D Secure. All transactions flagged as MAIL, MOTO or TELEPHONE are out of scope for PSD2 Strong Customer Authentication. |
||||
card | ![]() |
Object | Object containing card data | ||||
cardNumber | ![]() |
AN19 |
The complete credit/debit card number (also know as the PAN) The card number is always obfuscated in any of our responses Required, except when a token or encryptedCustomerInput that includes this data is provided. |
||||
cardholderName | ![]() |
AN51 |
Required for 3-D Secure version 2, except when a token or encryptedCustomerInput that includes this data is provided. The card holder's name on the card. This property was optional for payments on the GlobalCollect platform, but will be required for transactions that utilize 3-D Secure version 2. |
||||
expiryDate | ![]() |
AN4 |
Expiry date of the card Required, except when a token or encryptedCustomerInput that includes this data is provided. |
||||
isRecurring | ![]() |
Boolean | Indicates if this transaction is of a one-off or a recurring type
This is used with property recurringPaymentSequenceIndicator to determine if the transaction is a first of recurring |
||||
recurring | ![]() |
Object | Object containing data related to recurring | ||||
endDate | ![]() |
AN8 |
Date (YYYYMMDD) in the future after which no further authorisations shall be performed. Note: This property is required when isRecurring is set to true, property recurringPaymentSequenceIndicator is set to first and 3-D Secure version 2 is enabled for the merchant. |
||||
minFrequency | ![]() |
AN3 |
This indicates the number of days between the recurring authorizations. Can be set to "1" to indicate that the frequency is variable. Note: This property is required when isRecurring is set to true, property recurringPaymentSequenceIndicator is set to first and 3-D Secure version 2 is enabled for the merchant. |
||||
recurringPaymentSequenceIndicator | ![]() |
Enum (string) |
Note: For any first of a recurring the system will automatically create a token as you will need to use a token for any subsequent recurring transactions. In case a token already exists this is indicated in the response with a value of False for the isNewToken property in the response. Note: This property is required when isRecurring is set to true. 3-D Secure will not be used when this property is set to recurring Moved from cardPaymentMethodSpecificInput.recurringPaymentSequenceIndicator |
||||
threeDSecure | ![]() |
Object | Object containing specific data regarding 3-D Secure | ||||
authenticationFlow | ![]() |
Enum (String) |
Indicates whether a transaction is performed in-app using an EMVco certified mobile SDK or inside a browser.
Note: We will add support for the in-app flow in a future release. |
||||
challengeCanvasSize | ![]() |
Enum (String) |
Required for 3-D Secure version 2 for the browser flow. Dimensions of the challenge window that potentially will be displayed to the consumer. The challenge content is formatted to appropriately render in this window to provide the best possible user experience. Preconfigured sizes are width x height in pixels of the window displayed in the consumer browser window. Possible values are:
|
||||
challengeIndicator | ![]() |
Enum (String) |
Allows you to indicate if you want the consumer to be challenged for extra security on this transaction.
|
||||
exemptionRequest | ![]() |
Enum (String) |
Allows you to indicate if you want us to request a certain type of exemption.
|
||||
externalCardholderAuthenticationData | ![]() |
Object |
Object containing results of an external authentication (not performed by Worldline) Moved from cardPaymentMethodSpecificInput |
||||
cavv | ![]() |
AN50 |
The CAVV (cardholder authentication verification value) or AAV (accountholder authentication value) provides an authentication validation value.
Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
||||
cavvAlgoritm | ![]() |
AN1 |
The algorithm, from your 3D Secure provider, used to generate the authentication CAVV. Required when
Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
||||
eci | ![]() |
N2 | Electronic Commerce Indicator provides authentication validation results returned after AUTHENTICATIONVALIDATION
Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
||||
directoryServerTransactionId | ![]() |
AN50 | The 3-D Secure Directory Server transaction ID that is used for the 3-D Secure version 2 Authentication | ||||
validationResult | ![]() |
AN1 |
The 3D Secure authentication result from your 3D Secure provider. Required when
Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
||||
xid | ![]() |
AN50 |
The transaction ID that is used for the 3D Authentication version 1 Moved from cardPaymentMethodSpecificInput.externalCardHolderAuthenticationData |
||||
priorThreeDSecureData | ![]() |
Object |
Object containing data regarding the consumer authentication that occurred prior to the current transaction |
||||
acsTransactionId | ![]() |
AN36 |
The ACS Transaction ID for a prior 3-D Secure authenticated transaction (for example, the first recurring transaction that was authenticated with the consumer). |
||||
method | ![]() |
enum (string) |
Method of authentication used for this transaction. Possible values:
|
||||
utcTimestamp | ![]() |
AN12 |
Timestamp in UTC (YYYYMMDDHHmm) of the prior 3-D Secure authentication |
||||
redirectionData | ![]() |
Object |
Required for 3-D Secure version 2 for the browser flow. Object containing browser specific redirection related data Moved from cardPaymentMethodSpecificInput |
||||
returnUrl | ![]() |
AN512 |
Required for 3-D Secure version 2 for the browser flow. The URL that the consumer is redirect to after the payment flow has finished. You can add any number of key value pairs in the query string that, for instance help you to identify the consumer when they return to your site. Please note that we will also append some additional key value pairs that will also help you with this identification process. Moved from cardPaymentMethodSpecificInput |
||||
variant | ![]() |
AN10 |
Using the Configuration Center it is possible to create multiple variations of your MyCheckout payment pages. The redirection flow for 3-D Secure uses the MyCheckout payment pages to display the following types of pages:
By specifying a specific variant you can force the use of another variant then the default. This allows you to test out the effect of certain changes to your MyCheckout payment pages in a controlled manner. Please note that you need to specify the ID instead of the name of the variant. |
||||
sdkData | ![]() |
Object | Object containing 3-D Secure in-app SDK data | ||||
sdkAppId | ![]() |
Object |
Required for 3-D Secure version 2 for the in-app flow. Universally unique ID created upon all installations and updates of your app on a consumer Device. This will be newly generated and stored by the 3DS SDK for each installation or update. |
||||
deviceInfo | ![]() |
AN64000 |
Required for 3-D Secure version 2 for the in-app flow. Device information gathered by the 3DS SDK on a consumer device. This is JSON name/value pairs that as a whole is Base64url encoded. |
||||
deviceRenderOptions | ![]() |
Object |
Object containing rendering options of the device |
||||
sdkInterface | ![]() |
Enum (string) |
Required for 3-D Secure version 2 for the in-app flow. Lists all of the SDK Interface types that the device supports for displaying specific challenge user interfaces within the SDK.
|
||||
sdkUiType | ![]() |
Enum (string) |
Required for 3-D Secure version 2 for the in-app flow. Lists all UI types that the device supports for displaying specific challenge user interfaces within the SDK.
Note: Currently, all 3-D Secure SDKs need to support all UI Types. In the future, however, this may change (for example, smart watches may support a UI Type not yet defined by this specification). |
||||
sdkEncryptedData | ![]() |
AN64000 |
Required for 3-D Secure version 2 for the in-app flow. JWE Object containing data encrypted by the 3-D Secure SDK. |
||||
sdkEphemeralPublicKey | ![]() |
AN256 |
Required for 3-D Secure version 2 for the in-app flow. Public key component of the ephemeral key pair generated by the 3-D Secure SDK and used to establish session keys between the 3-D Secure SDK and ACS. |
||||
sdkMaxTimeout | ![]() |
AN2 |
Required for 3-D Secure version 2 for the in-app flow, except when order.amountOfMoney.amount is zero. Indicates maximum amount of time (in minutes) for all exchanges. Minimum amount of minutes is 5. |
||||
sdkReferenceNumber | ![]() |
AN32 |
Required for 3-D Secure version 2 for the in-app flow. Identifies the vendor and version for the 3-D Secure SDK that is integrated in your app, assigned by EMVCo when the 3-D Secure SDK is approved. |
||||
sdkTransactionId | ![]() |
AN36 |
Required for 3-D Secure version 2 for the in-app flow. Universally unique transaction identifier assigned by the 3-D Secure SDK to identify a single transaction. |
||||
skipAuthentication | ![]() |
Boolean |
Note: This is only possible if your account in our system is setup for 3D Secure authentication and if your configuration in our system allows you to override it per transaction. Note: Any configured Dynamic 3D rules will be ignored when you submit this property. Moved from cardPaymentMethodSpecificInput |
||||
unscheduledCardOnFileRequestor | ![]() |
Enum (string) |
Indicates which party initiated the unscheduled recurring transaction. Allowed values:
Note: this property is not allowed if isRecurring is true. Required if unscheduledCardOnFileIndicator is 'subsequent'. Otherwise it must not be 'merchantInitiated'. 3-D Secure will not be used when this property is set to cardholderInitiated |
||||
unscheduledCardOnFileSequenceIndicator | ![]() |
Enum (string) |
Renamed from unscheduledCardOnFileIndicator |
||||
initialSchemeTransactionId | ![]() |
AN100 |
The unique scheme transactionId of the initial transaction that was performed with SCA. In case this is unknown a scheme transactionId of an earlier transaction part of the same sequence can be used as a fall-back. |
Additional response properties related to 3-D Secure version 2
It's possible that the Authentication fails, and the reason why will be detailed in the errors. It is also possible that the issuer will require Strong Customer Authentication (SCA) to be provided before the issuer will authorize the transaction. Put simply, you should process the transaction in a way that allows SCA through for instance a challenge to take place.
The below overview shows all properties in the output that are used in the 3-D Secure version 2 authentication. For each of the properties we have marked them as follows:
New - The property did not previously exist in our API.
Moved - We have decided to move or rename an existing property to a more logical location.
Existing - This is an existing property that is used in the authentication process.
Deprecated - One property needed for 3-D Secure version 2 has an overlap with an existing property and in this case we have decided to deprecate the existing property as the new property needed to provide more detail.
Property name | Change / Type | Description | ||||||
---|---|---|---|---|---|---|---|---|
payment | ![]() |
Object | Object containing data regarding the payment | |||||
paymentOutput | ![]() |
Object | Object containing output data regarding the payment | |||||
cardPaymentMethodSpecificOutput | ![]() |
Object | Object containing card payment method specific output | |||||
initialSchemeTransactionId | ![]() |
AN100 | The unique scheme transactionId of the initial transaction that was performed with SCA. Should be stored by the merchant to allow it to be submitted in future transactions. |
|||||
schemeTransactionId | ![]() |
AN100 | The unique scheme transactionId of this transaction. Should be stored by the merchant to allow it to be submitted in future transactions. Use this value in case the initialSchemeTransactionId property is empty. |
|||||
threeDSecureResults | ![]() |
Object | Object containing results of the 3D Secure authentication | |||||
sdkData | ![]() |
Object | Object containing 3-D Secure in-app SDK data | |||||
sdkTransactionId | ![]() |
AN36 |
Universally unique transaction identifier assigned by the 3-D Secure SDK to identify this transaction. |
|||||
threeDSecureData | ![]() |
Object | Object containing data regarding the 3D Secure authentication | |||||
acsTransactionId | ![]() |
AN36 |
The ACS Transaction ID for this transaction. You should store this data as you will need it for the next transaction with the same card |
|||||
method | ![]() |
Enum (String) | Method of authentication used for this transaction. Possible values:
You should store this data as you will need it for the next transaction with the same card |
|||||
utcTimestamp | ![]() |
AN12 |
Timestamp in UTC (YYYYMMDDHHmm) of the 3-D Secure authentication of this transaction You should store this data as you will need it for the next transaction with the same card |
|||||
directoryServerTransactionId | ![]() |
AN36 |
The 3-D Secure Directory Server transaction ID that is used for the 3-D Secure version 2 Authentication This property is used in the communication with the acquirer |
|||||
threeDServerTransactionId | ![]() |
AN36 |
The 3-D Secure Server transaction ID that is used for the 3-D Secure version 2 Authentication |
|||||
threeDSecureVersion | ![]() |
AN10 |
The 3-D Secure version used for the authentication This property is used in the communication with the acquirer |
The above mentioned additional properties in the response to the Create Payment request have been added generically. This means that they are also returned on a Get Payment request and all other requests that return a paymentOutput object. Please note that they are only returned in case of a 3-D Secure version 2 authentication, with the exception of the initialSchemeTransactionId and the schemeTransactionId. One or both of these will be returned based on acquirer capabilities.
Examples
{
"cardPaymentMethodSpecificInput": {
"card": {
"cvv": "352",
"cardNumber": "4012000033330026",
"expiryDate": "1220",
"cardholderName": "Wile E. Coyote"
},
"isRecurring": false,
"paymentProductId": 1,
"transactionChannel": "ECOMMERCE",
"threeDSecure": {
"challengeIndicator": "no-preference",
"challengeCanvasSize": "600x400",
"authenticationFlow": "browser",
"redirectionData": {
"returnUrl": "https://hostname.myownwebsite.url"
}
}
},
"order": {
"amountOfMoney": {
"currencyCode": "EUR",
"amount": 100
},
"customer": {
"accountType": "none",
"billingAddress": {
"countryCode": "NL"
},
"device": {
"acceptHeader": "texthtml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"browserData": {
"colorDepth": 24,
"javaEnabled": false,
"screenHeight": "1200",
"screenWidth": "1920"
},
"ipAddress": "123.123.123.123",
"locale": "en-US",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Safari/605.1.15",
"timezoneOffsetUtcMinutes": "420"
},
"locale": "en_US",
"merchantCustomerId": "1234"
},
"references": {
"merchantOrderId": 123456,
"merchantReference": "vlSjO1XpvQgF3EYNvpA6rUDymoY6yD"
}
}
}
HTTP/1.1 201
Location: http://10.63.66.100:20104/v1/70417/payments/000007041700000008370000100001
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 08 Jul 2019 22:35:47 GMT
Connection: close
{
"creationOutput" : {
"additionalReference" : "gUnulVY5fw3gjcuVpUgG",
"externalReference" : "gUnulVY5fw3gjcuVpUgG3hMOPHU3Ry"
},
"payment" : {
"id" : "000007041700000008370000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "gUnulVY5fw3gjcuVpUgG3hMOPHU3Ry",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"fraudResults" : {
"fraudServiceResult" : "no-advice",
"avsResult" : "0",
"cvvResult" : "0"
},
"threeDSecureResults" : {
"cavv" : "AAABBEg0VhI0VniQEjRWAAAAAAA=",
"directoryServerTransactionId" : "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"eci" : "05",
"threeDSecureData" : {
"acsTransactionId" : "A9885E27-797D-4726-BDE6-18C502D62C04",
"method" : "frictionless",
"utcTimestamp" : "201907082235"
},
"threeDSecureVersion" : "2.1.0",
"threeDServerTransactionId" : "1aaeac7f-3736-425f-b23b-f93051d1cc64"
},
"card" : {
"cardNumber" : "************0026",
"expiryDate" : "1220"
}
}
},
"status" : "PENDING_APPROVAL",
"statusOutput" : {
"isCancellable" : true,
"statusCategory" : "PENDING_MERCHANT",
"statusCode" : 600,
"statusCodeChangeDateTime" : "20190708223547",
"isAuthorized" : true,
"isRefundable" : false
}
}
}
HTTP/1.1 201
Location: http://10.63.66.100:20104/v1/70417/payments/000007041700000008380000100001
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 08 Jul 2019 22:50:51 GMT
Connection: close
{
"creationOutput" : {
"additionalReference" : "Jb0dIphrG82esg5YA83K",
"externalReference" : "Jb0dIphrG82esg5YA83KcjY0Rh8il5"
},
"merchantAction" : {
"actionType" : "REDIRECT",
"redirectData" : {
"RETURNMAC" : "d317d15e-0fb5-48ef-b177-cbebb282ff0d",
"redirectURL" : "http://payment.globalcollect-cc100.com:20105/3dsecure/0be7decc-5fb8-4e29-a71a-5b0f1bc93926?returnMAC=d317d15e-0fb5-48ef-b177-cbebb282ff0d"
}
},
"payment" : {
"id" : "000007041700000008380000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "Jb0dIphrG82esg5YA83KcjY0Rh8il5",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"threeDSecureResults" : {
"threeDSecureData" : {
"utcTimestamp" : "201907082250"
},
"threeDSecureVersion" : "2.1.0",
"threeDServerTransactionId" : "054379bc-3745-49ae-8756-5ee36641a5f9"
},
"card" : {
"cardNumber" : "************7977",
"expiryDate" : "1220"
}
}
},
"status" : "REDIRECTED",
"statusOutput" : {
"isCancellable" : false,
"statusCategory" : "PENDING_PAYMENT",
"statusCode" : 50,
"statusCodeChangeDateTime" : "20190708225051",
"isAuthorized" : false,
"isRefundable" : false,
"threeDSecureStatus" : "ENROLLED"
}
}
}
The additional threeDSecureStatus returns ENROLLED as the card is available for authentication via either 3-D Secure version. We continue to use the same terminology and statusses as before to make your transition to support 3-D Secure as smooth as possible. We take care of the optional additional methodURL step on our side, to reduce the impact of implementing 3-D Secure version 2 to only the submission of the new properties.
Redirection is always handled in the exact same way regardless of the 3-D Secure version of flow. We did remove some steps in the process resulting in the following statusCodes no longer being returned: 20, 25 and 30.
HTTP/1.1 201
Location: http://10.63.66.100:20104/v1/70417/payments/000007041700000008390000100001
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 08 Jul 2019 22:56:26 GMT
Connection: close
{
"creationOutput" : {
"additionalReference" : "YQPU7omuq4m4L8DJPmGh",
"externalReference" : "YQPU7omuq4m4L8DJPmGhK5ybC0DxFn"
},
"merchantAction" : {
"actionType" : "REDIRECT",
"redirectData" : {
"RETURNMAC" : "a59255a0-2d1e-4b65-ad8e-7666d9eaa51a",
"redirectURL" : "http://payment.globalcollect-cc100.com:20105/redirector/70ad24f4-4c0a-442c-99b2-e4bdfd1aa0ec?locale=en_US"
},
"showData" : [ ]
},
"payment" : {
"id" : "000007041700000008390000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "YQPU7omuq4m4L8DJPmGhK5ybC0DxFn",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"threeDSecureResults" : {
"directoryServerTransactionId" : "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"threeDSecureData" : {
"acsTransactionId" : "A9885E27-797D-4726-BDE6-18C502D62C18",
"method" : "frictionless",
"utcTimestamp" : "201907082256"
},
"threeDSecureVersion" : "2.1.0",
"threeDServerTransactionId" : "7e583802-8f45-4c67-81a9-07f975e2413d"
},
"card" : {
"cardNumber" : "************2672",
"expiryDate" : "1220"
}
}
},
"status" : "REDIRECTED",
"statusOutput" : {
"isCancellable" : false,
"statusCategory" : "PENDING_PAYMENT",
"statusCode" : 50,
"statusCodeChangeDateTime" : "20190708225626",
"isAuthorized" : false,
"isRefundable" : false,
"threeDSecureStatus" : "ENROLLED"
}
}
}
The additional threeDSecureStatus returns ENROLLED as the card ia available for authentication via either 3-D Secure version. We continue to use the same terminology and statusses as before to make your transition to support 3-D Secure as smooth as possble. We take care of the optional additional methodURL step on our side, to reduce the impact of implementing 3-D Secure version 2 to only the submission of the new properties.
Redirection is always handled in the exact same way regardless of the 3-D Secure version of flow. We did remove some steps in the process resulting in the following statusCodes no longer being returned: 20, 25 and 30.
HTTP/1.1 201
Location: http://10.63.66.100:20104/v1/70417/payments/000007041700000008410000100001
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 08 Jul 2019 23:07:24 GMT
Connection: close
{
"creationOutput" : {
"additionalReference" : "fU3pYUGRWRippBwdyliJ",
"externalReference" : "fU3pYUGRWRippBwdyliJV2tsKubTrN"
},
"merchantAction" : {
"actionType" : "REDIRECT",
"redirectData" : {
"RETURNMAC" : "f6708f89-68fe-4e65-9e55-bfe8f638da34",
"redirectURL" : "http://payment.globalcollect-cc100.com:20105/redirector/319ea199-4094-44ba-b28d-c17a10089b0c?locale=en_US"
},
"showData" : [ ]
},
"payment" : {
"id" : "000007041700000008410000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "fU3pYUGRWRippBwdyliJV2tsKubTrN",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"card" : {
"cardNumber" : "************0002",
"expiryDate" : "1220"
}
}
},
"status" : "REDIRECTED",
"statusOutput" : {
"isCancellable" : false,
"statusCategory" : "PENDING_PAYMENT",
"statusCode" : 50,
"statusCodeChangeDateTime" : "20190708230724",
"isAuthorized" : false,
"isRefundable" : false,
"threeDSecureStatus" : "ENROLLED"
}
}
}
The additional threeDSecureStatus returns ENROLLED as the card ia available for authentication via either 3-D Secure version. We continue to use the same terminology and statusses as before to make your transition to support 3-D Secure as smooth as possble. We take care of the optional additional methodURL step on our side, to reduce the impact of implementing 3-D Secure version 2 to only the submission of the new properties.
Redirection is always handled in the exact same way regardless of the 3-D Secure version of flow. We did remove some steps in the process resulting in the following statusCodes no longer being returned: 20, 25 and 30.
HTTP/1.1 402
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 08 Jul 2019 23:09:28 GMT
Connection: close
{
"errorId": "5d23642a18a1c3fe481964da5a96df5f",
"errors": [
{
"code": "401025",
"message": "MEDIUM_CONFIDENCE",
"httpStatusCode": 402
}
],
"paymentResult": {
"creationOutput": {
"additionalReference": "EEeYqOtEOFMnmf1oLPmr",
"externalReference": "EEeYqOtEOFMnmf1oLPmrliDjr568mC"
},
"merchantAction": {
"actionType": "SHOW_TRANSACTION_RESULTS",
"renderingData": "eyJ0eXBlIjoicnBwSG9zdGVkQ2hlY2tvdXQiLCJob3N0ZWRTZXNzaW9uU3BlY2lmaWNJbnB1dCI6eyJ0eXBlIjoicnBwU3BlY2lmaWNJbnB1dCIsImNhcnQiOnsiY3VycmVuY3lTeW1ib2wiOiLigqwiLCJ0b3RhbFByaWNlIjoxMDB9LCJyZXR1cm5DYW5jZWxTdGF0ZSI6ZmFsc2V9LCJjcmVhdGVkUGF5bWVudE91dHB1dCI6eyJwYXltZW50Ijp7ImlkIjoiMDAwMDA3MDQxNzAwMDAwMDA4NDUwMDAwMTAwMDAxIiwic3RhdHVzIjoiUEVORElOR19BUFBST1ZBTCJ9LCJtZXJjaGFudEFjdGlvbiI6eyJhY3Rpb25UeXBlIjoiU0hPV19UUkFOU0FDVElPTl9SRVNVTFRTIiwic2hvd0RhdGEiOlt7ImtleSI6IkNBUkRIT0xERVJJTkZPIiwidmFsdWUiOiJjYXJkaG9sZGVyIn1dfX0sInBhcnRpYWxQYXltZW50SW5wdXQiOnsiYW1vdW50IjoxMDAsImNvdW50cnlDb2RlIjoiTkwiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJpc1JlY3VycmluZyI6ZmFsc2UsIm1lcmNoYW50SWQiOiI3MDQxNyIsInBheW1lbnRQcm9kdWN0SWQiOjF9LCJycHBTcGVjaWZpY0lucHV0Ijp7ImNhcnQiOnsiY3VycmVuY3lTeW1ib2wiOiLigqwiLCJ0b3RhbFByaWNlIjoxMDB9LCJyZXR1cm5DYW5jZWxTdGF0ZSI6ZmFsc2V9fQ==",
"showData": [
{
"key": "CARDHOLDERINFO",
"value": "Additional authentication is needed for this transaction, please contact (Issuer Name) at xxx-xxx-xxxx."
}
]
},
"payment": {
"id": "000007041700000008440000100001",
"paymentOutput": {
"amountOfMoney": {
"amount": 100,
"currencyCode": "EUR"
},
"references": {
"merchantOrderId": 123456,
"merchantReference": "EEeYqOtEOFMnmf1oLPmrliDjr568mC",
"paymentReference": "0"
},
"paymentMethod": "card",
"cardPaymentMethodSpecificOutput": {
"paymentProductId": 1,
"threeDSecureResults": {
"directoryServerTransactionId": "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"threeDSecureData": {
"acsTransactionId": "A9885E27-797D-4726-BDE6-18C502D62C08",
"method": "frictionless",
"utcTimestamp": "201907082309"
},
"threeDSecureVersion": "2.1.0",
"threeDServerTransactionId": "77737c0c-9a6b-432f-a2c6-c66a0438476b"
},
"card": {
"cardNumber": "************5550",
"expiryDate": "1220"
}
}
},
"status": "REJECTED",
"statusOutput": {
"errors": [
{
"code": "401025",
"requestId": "7830",
"message": "MEDIUM_CONFIDENCE",
"httpStatusCode": 402
}
],
"isCancellable": false,
"statusCategory": "UNSUCCESSFUL",
"statusCode": 180,
"statusCodeChangeDateTime": "20190708230928",
"isAuthorized": false,
"isRefundable": false,
"threeDSecureStatus": "INVALID_PARES_OR_NOT_COMPLETED"
}
}
}
}
The above scenario returns a new element in the 3-D Secure flow. For transactions that have not been authenticated successfully using a frictionless flow the issuer might return so called cardholderInfo. In case this is returned we will return this as part of a SHOW_TRANSACTION_RESULTS merchantAction. Presenting this data back to the consumer is optional. In our hostedCheckouts we will always show it to the consumer, but in the Create Payment flow this is left to you.
HTTP/1.1 201
Location: http://10.63.66.100:20104/v1/70417/payments/000007041700000008420000100001
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 08 Jul 2019 23:09:03 GMT
Connection: close
{
"creationOutput" : {
"additionalReference" : "3PY2aFLDIusp0ESjdaon",
"externalReference" : "3PY2aFLDIusp0ESjdaonVichbsybYn"
},
"payment" : {
"id" : "000007041700000008420000100001",
"paymentOutput" : {
"amountOfMoney" : {
"amount" : 100,
"currencyCode" : "EUR"
},
"references" : {
"merchantOrderId" : 123456,
"merchantReference" : "3PY2aFLDIusp0ESjdaonVichbsybYn",
"paymentReference" : "0"
},
"paymentMethod" : "card",
"cardPaymentMethodSpecificOutput" : {
"paymentProductId" : 1,
"fraudResults" : {
"fraudServiceResult" : "no-advice",
"avsResult" : "0",
"cvvResult" : "0"
},
"threeDSecureResults" : {
"eci" : "7"
},
"card" : {
"cardNumber" : "************9026",
"expiryDate" : "1220"
}
}
},
"status" : "PENDING_APPROVAL",
"statusOutput" : {
"isCancellable" : true,
"statusCategory" : "PENDING_MERCHANT",
"statusCode" : 600,
"statusCodeChangeDateTime" : "20190708230903",
"isAuthorized" : true,
"isRefundable" : false
}
}
}
Additional information
- Introduction
- Highlevel implementation
- Consumer user experience
- MyCheckout hosted payment pages implementation
- Create Payment API implementation
- Test cases
- Special use cases
- Webhooks