PSD2 parameters
Below, the parameters defined in the PSD2 for making a payment are detailed.
Values of the parameters MERCHANT_SCA_EXCEPTION and DS_MERCHANT_SCA_EXCEPTION
Value | Concept |
---|---|
LWV | Exception for low amounts. This exception includes payments of 30 EUR or less, |
TRA |
Exception for low risk transactions by the buyer/business. The PAYCOMET risk analysis system will evaluate whether the payment ultimately falls under this exception.
|
MIT |
Exception for transactions initiated by the business. Must be used for all non-presential payments such as subscriptions, deferred payments, incremental payments, etc. When this exception is selected, the MERCHANT_TRX_TYPE parameter must be indicated (see lower table) to specify the type of payment initiated by the business. To be able to use this exception, the first payment from each client must be executed with SCA, that is, secure payment. |
COR | Exception for payments between businesses. |
MOT | Exception for MOTO payments |
Values of the parameters MERCHANT_TRX_TYPE and DS_MERCHANT_TRX_TYPE
Value | Concept |
---|---|
I | Deferred payment. Always refers to an INDIVIDUAL purchase, the amount of the different transactions being set, and with a defined time period |
R | Recurring payment. The amount of the transactions may be set or variable, and with a defined time period |
H | Normally due to partial deliveries. Also, when the client extends the hotel stay / vehicle rental or when there is an estimated authorisation, the final amount is requested (“conclusion”) |
E | Original rejected due to “balance”; only for certain activity sectors (for greater detail review the brand requirements) and with a maximum number of days since the purchase. Relevant example: “Transport” |
D | Those which occur following the operation for services provided / used, unknown at the beginning. (Minibar, vehicle damage, fines, etc.) |
M | When additional services are incurred during the contract period |
N | When the business charges for services which the holder committed to, but then did not comply with the agreed terms. Relevant example: no-show hotel reservations without cancellation. |
C | Other |
MERCHANT_DATA and DS_MERCHANT_DATA parameters will be JSON objects encoded in base 64 and then url encoded. Using pseudocode, it would be something like urlencode( base64_encode( JSON_Object ) ). JSON object format should be like this before encoding:
{
"customer": {
"id": "",
"name": "",
"surname": "",
"email": "",
"homePhone": {
"cc": "",
"subscriber": ""
},
"mobilePhone": {
"cc": "",
"subscriber": ""
},
"workPhone": {
"cc": "",
"subscriber": ""
},
"firstBuy": ""
},
"shipping": {
"shipAddrCity": "",
"shipAddrCountry": "",
"shipAddrLine1": "",
"shipAddrLine2": "",
"shipAddrLine3": "",
"shipAddrPostCode": "",
"shipAddrState": ""
},
"billing": {
"billAddrCity": "",
"billAddrCountry": "",
"billAddrLine1": "",
"billAddrLine2": "",
"billAddrLine3": "",
"billAddrPostCode": "",
"billAddrState": ""
},
"acctID": "",
"acctInfo": {
"chAccAgeInd": "",
"chAccChange": "",
"chAccChangeInd": "",
"chAccDate": "",
"chAccPwChange": "",
"chAccPwChangeInd": "",
"nbPurchaseAccount": "",
"provisionAttemptsDay": "",
"txnActivityDay": "",
"txnActivityYear": "",
"paymentAccAge": "",
"paymentAccInd": "",
"shipAddressUsage": "",
"shipAddressUsageInd": "",
"shipNameIndicator": "",
"suspiciousAccActivity": ""
},
"merchantRiskIndicator": {
"deliveryEmailAddress": "",
"deliveryTimeframe": "",
"giftCardAmount": "",
"giftCardCount": "",
"giftCardCurr": "",
"preOrderDate": "",
"preOrderPurchaseInd": "",
"reorderItemsInd ": "",
"shipIndicator": ""
},
"threeDSRequestorAuthenticationInfo": {
"threeDSReqAuthData": "",
"threeDSReqAuthMethod": "",
"threeDSReqAuthTimestamp": ""
},
"shoppingCart": [
{
"sku": "",
"quantity": "",
"unitPrice": "",
"name": "",
"category": "",
"articleType": ""
}
],
"addrMatch": "",
"purchaseInstalData": "",
"recurringExpiry": "",
"recurringFrequency": "",
"marketplaceSeller": [
{
"merchantCustomerId": "",
"amount": "",
"currency": "",
"deliveryTimeframe": ""
}
],
}
Element | Content | Description |
---|---|---|
customer | JSON | Mandatory. Node with store customer related information |
customer.id | [a-zA-Z0-9-] | Mandatory. Store customer identifier |
customer.name | [A-Za-z0-9]{1,254} | Mandatory. Name of holder |
customer.surname | [A-Za-z0-9]{1,254} | Mandatory. Surname of holder |
customer.email | [A-Za-z0-9]{1,254} | Conditional. Email address of holder. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
customer.homePhone | JSON | Conditional. Node with user home phone data. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
customer.homePhone.cc | [0-9]{1,3} | International dialling code of the holder’s home telephone number |
customer.homePhone.subscriber | [0-9]{1,15} | Holder’s home telephone number |
customer.mobilePhone | JSON | Conditional. Node with user mobile phone data. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
customer.mobilePhone.cc | [0-9]{1,3} | International dialling code of the holder’s mobile phone number |
customer.mobilePhone.subscriber | [0-9]{1,15} | Holder’s mobile phone number |
customer.workPhone | JSON | Conditional. Node with user work phone data. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
customer.workPhone.cc | [0-9]{1,3} | International dialling code of the holder’s work phone number |
customer.workPhone.subscriber | [0-9]{1,15} | Holder’s work phone number |
customer.firstBuy | si|no | Optional. Indicates whether the user's first purchase in this business |
shipping | JSON | Optional. Node with shipping address related information. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
shipping.shipAddrCity | [A-Za-z0-9]{1,50} | Conditional. City of delivery address. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
shipping.shipAddrCountry | [0-9]{3} | Conditional. Numerical code (ISO 3166-1) of the country of the delivery address. Obligatory if sending shipAddrState. e.g: (for Spain): 724 All codes: ISO 3166-1 |
shipping.shipAddrLine1 | [A-Za-z0-9]{1,50} | Conditional. Delivery address, line 1. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
shipping.shipAddrLine2 | [A-Za-z0-9]{1,50} | Optional. Delivery address, line 2. Sending this is highly recommended |
shipping.shipAddrLine3 | [A-Za-z0-9]{1,50} | Optional. Delivery address, line 3. Sending this is highly recommended |
shipping.shipAddrPostCode | [A-Za-z0-9]{1,16} | Conditional. Post code of the delivery address. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
shipping.shipAddrState | [A-Za-z0-9]{6} | Conditional. State or province of the delivery address. Corresponds to the subdivision code ISO 3166-2. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested. The subdivision refers to ISO 3166-2 but limiting it to a maximum of 3 characters, which are the ones that follow the separate "-" in the following list. e.g: MD All codes: ISO 3166-2:ES |
billing | JSON | Optional. Node with billing address related information |
billing.billAddrCity | [A-Za-z0-9]{1,50} | Conditional. City of the invoice address. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
billing.billAddrCountry | [0-9]{3} | Conditional. Numerical code (ISO 3166-1) of the country of the invoice address. Obligatory if sending shipAddrState. e.g: (for Spain): 724 All codes: ISO 3166-1 |
billing.billAddrLine1 | [A-Za-z0-9]{1,50} | Conditional. Invoice address, line 1. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
billing.billAddrLine2 | [A-Za-z0-9]{1,50} | Optional. Invoice address, line 2. Sending this is highly recommended |
billing.billAddrLine3 | [A-Za-z0-9]{1,50} | Optional. Invoice address, line 3. Sending this is highly recommended |
billing.billAddrPostCode | [A-Za-z0-9]{1,16} | Conditional. Post code of the invoice address. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested |
billing.billAddrState | [A-Za-z0-9]{6} | Conditional. State or province of the invoice address. Corresponds to the subdivisión code ISO 3166-2. Defined as Conditional by the EMV 3DS standard, it may be required depending on the card issuer. Highly recommended to allow authentication based on risk analysis (Risk Based Analisys) and to facilitate a frictionless shopping experience. Equally recommended if the application of SCA exemptions (PSD2) is requested. The subdivision refers to ISO 3166-2 but limiting it to a maximum of 3 characters, which are the ones that follow the separate "-" in the following list. e.g: MD All codes: ISO 3166-2:ES |
acctID | [A-Za-z0-9]{1,64} | Optional. Additional information you want to send to identify the account |
acctInfo | JSON | Optional. Node with additional information on the user account at the store. Sending this is highly recommended |
acctInfo.chAccAgeInd | [A-Za-z0-9]{2} | Optional. Period of time that the card holder has had the account at the business. Possible values: 01 = No account (checkout as guest) 02 = Created in this transaction 03 = Under 30 days 04 = Between 30 and 60 days 05 = Over 60 days |
acctInfo.chAccChange | [0-9]{8} | Optional. Date on which the card holder’s account with the business was last modified, including the invoice or delivery address, the new payment account or new added users. Date format: YYYYMMDD |
acctInfo.chAccChangeInd | [0-9]{2} | Optional. Period of time passed since the card holder’s account with the business was last modified, including the invoice or delivery address, the new payment account or new added users. Accepted values: 01 = Modified in this transaction 02 = Under 30 days 03 = 30-60 days 04 = Over 60 days |
acctInfo.chAccDate | [0-9]{8} | Optional. Date on which the card holder opened the account with the business. Date format: YYYYMMDD |
acctInfo.chAccPwChange | [0-9]{8} | Optional. Date on which the card holder changed the password of their account with the business, or reset their account. Date format: YYYYMMDD |
acctInfo.chAccPwChangeInd | [A-Za-z0-9]{2} | Optional. Indicates the period of time since the card holder’s account with the business changed its password or was reset. Accepted values: 01 = No changes 02 = Changed during this transaction 03 = Under 30 days 04 = Between 30 and 60 days 05 = Over 60 days |
acctInfo.nbPurchaseAccount | [0-9]{1,4} | Optional. Number of purchases with this account during the last six months |
acctInfo.provisionAttemptsDay | [0-9]{1,3} | Optional. Number of attempts to add a card in the last 24 hours |
acctInfo.txnActivityDay | [0-9]{1,3} | Optional. Number of transactions (successful and abandoned) for this account of the card holder with the business in all payment accounts in the last 24 hours |
acctInfo.txnActivityYear | [0-9]{1,3} | Optional. Number of transactions (successful and abandoned) for this account of the card holder with the business in all payment accounts of the last year |
acctInfo.paymentAccAge | [0-9]{8} | Optional. Date on which the payment account was registered on the card holder’s account with the business. Date format: YYYYMMDD |
acctInfo.paymentAccInd | [A-Za-z0-9]{2} | Optional. Indicates the period of time which the payment account was registered on the card holder’s account with the business. Accepted values: 01 = No account (checkout as guest) 02 = During this transaction 03 = Under 30 days 04 = Between 30 and 60 days 05 = Over 60 days |
acctInfo.shipAddressUsage | [0-9]{8} | Optional. Date on which the delivery address used for this transaction was used for the first time with the business. Date format: YYYYMMDD |
acctInfo.shipAddressUsageInd | [A-Za-z0-9]{2} | Optional. Indicates when the delivery address used for this transaction was used for the first time with the business. Accepted values: 01 = This transaction 02 = Under 30 days 03 = Between 30 and 60 days 04 = Over 60 days |
acctInfo.shipNameIndicator | [A-Za-z0-9]{2} | Optional. Indicates whether the name of the card holder on the account is identical to the delivery name used for this transaction. Accepted values: 01 = Name on the account identical to the delivery name 02 = Name on the account different from the delivery name |
acctInfo.suspiciousAccActivity | [A-Za-z0-9]{2} | Optional. Indicates whether the business has experienced suspicious activity (including previous fraud) on the card holder’s account. Accepted values: 01 = No record of suspicious activity 02 = Record of suspicious activity |
merchantRiskIndicator | JSON | Optional. Node with additional information of the business representing the evaluation of the level of risk of fraud for authentication. The delivery of this information is highly recommended |
merchantRiskIndicator.deliveryEmailAddress | [A-Za-z0-9]{1,254} | Optional. For electronic delivery, the email address to which the goods were delivered |
merchantRiskIndicator.deliveryTimeframe | [A-Za-z0-9]{2} | Optional. Indicates the delivery period of the goods. Accepted values: 01 = Electronic delivery 02 = Delivery on the same day 03 = 24 hour delivery 04 = Delivery in 2 days or more |
merchantRiskIndicator.giftCardAmount | [A-Za-z0-9]{1,15} | Optional. For purchases from prepaid cards or gift cards, the total amount of the purchase in major units (for example, USD 123.45 is 123) |
merchantRiskIndicator.giftCardCount | [0-9]{2} | Optional. For purchases from prepaid cards or gift cards, total count of prepaid cards or gift cards/gift codes purchased |
merchantRiskIndicator.giftCardCurr | [0-9]{3} | Optional. For the purchase of prepaid/gift cards, code ISO-4217 of currency of the card |
merchantRiskIndicator.preOrderDate | [0-9]{8} | Optional. For a pre-ordered purchase, the forecast availability date of the goods. Date format: YYYYMMDD |
merchantRiskIndicator.preOrderPurchaseInd | [A-Za-z0-9]{2} | Optional. Indicates whether the card holder makes an order with availability or future launch date. Accepted values: 01 = Goods available 02 = Future availability |
merchantRiskIndicator.reorderItemsInd | [A-Za-z0-9]{2} | Optional. Indicates whether the card is reordering previously purchased goods. Accepted values: 01 = First time purchased 02 = Previously purchased |
merchantRiskIndicator.shipIndicator | [A-Za-z0-9]{2} | Optional. Indicates the delivery method selected for the transaction. Businesses must select the delivery indicator code which more precisely describes the specific transaction of the card holder, not their general commercial activity. If one or more items are included in the sale, use the delivery Indicator code for physical goods, or if all products are digital, use the delivery Indicator code which describes the most expensive item. Accepted values: 01 = Delivery to the invoice address of the holder 02 = Delivery to another verified address of the client 03 = Delivery to an address other than that of the holder’s invoice address 04 = Delivery to the store or collection at premises (the address of the store will be stored in the delivery address fields) 05 = Digital goods (includes online services, electronic gift cards and discount coupons) 06 = Tickets for events and trips, without delivery 07 = Other (for example, games, digital services without delivery, subscriptions to online services, etc.) |
threeDSRequestorAuthenticationInfo | JSON | Optional. Node with additional information on how the client was authenticated at the start of the session in the business account |
threeDSRequestorAuthenticationInfo.threeDSReqAuthData | [A-Za-z0-9]{1,2048} | Optional. Data which documents and supports a specific authentication process. The content of the current version of the protocol is not specified |
threeDSRequestorAuthenticationInfo.threeDSReqAuthMethod | [A-Za-z0-9]{2} | Optional. Mechanism used by the holder to authenticate themselves in the business. Accepted values: 01 = Without 3DS authentication (for example, holder identified as guest) 02 = Logged onto the account on the ACS using the credentials of the ACS 03 = Logged onto the account on the ACS using an affiliate identifier 04 = Logged onto the account on the ACS using the credentials of the issuer 05 = Logged onto the account on the ACS using a third party authentication 06 = Logged onto the account on the ACS using a FIDO authenticator 07–79 = Reserved 80–99 = Reserved |
threeDSRequestorAuthenticationInfo.threeDSReqAuthTimestamp | [0-9]{12} | Optional. Date and time UTC of the authentication. Date format: YYYYMMDDHHMM |
shoppingCart | Array JSON | Optional. Node with the list of items purchased in the store |
shoppingCart[].sku | [A-Za-z0-9]{1,15} | Optional. Product identifier |
shoppingCart[].quantity | [0-9]{5} | Optional. Units of product purchased |
shoppingCart[].unitPrice | [0-9]{1,8} | Optional. Unit amount of each product in integer format. 1.00 EURO = 100, 4.50 EUROS = 450, etc. |
shoppingCart[].name | [A-Za-z0-9]{1,254} | Optional. Product name |
shoppingCart[].category | [A-Za-z0-9]{1,50} | Optional. Product category |
shoppingCart[].articleType | [0-9]{1,2} | Conditional. Mandatory in some methods. Article type of shopping cart element (4 = Discount, 5 = Physical, 6 = Shipping_fee, 7 = Sales_tax, 8 = Digital, 9 = Gift_card, 10 = Store_credit, 11 = Surcharge). |
addrMatch | [A-Za-z]{1} | Optional. Indicates whether the delivery address is the same as the invoice address Y = The delivery address is the same as the invoicing address N = The delivery and invoice addresses are different |
purchaseInstalData | [0-9]{1,3} | Conditional. Mandatory for Instalment operations (MERCHANT_TRX_TYPE = I). Indicates the maximum number of deferred payment authorisations Accepted values: The value must be greater than 1 |
recurringExpiry | [0-9]{8} | Conditional. Mandatory for Recurring and Instalment operations (MERCHANT_TRX_TYPE = I or R). The date from which there will be no more authorisations. Accepted format: YYYYMMDD |
recurringFrequency | [A-Za-z0-9]{1,4} | Conditional. Mandatory for Recurring and Instalment operations (MERCHANT_TRX_TYPE = I or R). Indicates the minimum number of days between authorisations |
aft | Array JSON | |
aft.firstName | [A-Za-z0-9]{1,30} | Mandatory. Name of holder |
aft.lastName | [A-Za-z0-9]{1,30} | Mandatory. Surname of holder |
aft.country | [A-Za-z0-9]{3} | Mandatory. Receiver's country. (ISO 3166-1) ^[a-zA-Z]{3}$ |
aft.address | [A-Za-z0-9]{1,35} | Mandatory. Receiver address .^[a-zA-Z0-9\s]{1,35}$ |
aft.city | [A-Za-z0-9]{1,25} | Mandatory. Receiver's city ^[a-zA-Z]{1,25}$ |
aft.accountNumber | [A-Za-z0-9]{1,4} | Mandatory. Receiver card number |
aft.accountNumberType | [0-9]{2} | Mandatory. Account number type. 00 (Other) | 01 (Card) | 02 (Account) | 03 (Cash) |
aft.utr | [A-Za-z0-9]{19} | Mandatory. Unique Transaction Reference. Should be formatted as 0 + ICA (n-6) Fix value given by acquirer + Year (n-1) last digit of current year + Julian date (n-3) day of the year + hour (n-6) hhmmss + sequence number (n-2) from 00 to 99. example: 0123456308712121200 (read as 0 123456 3 087 121212 00) |
aft.bai | [A-Za-z0-9]{1,4} | Mandatory. Business Application Identifier. AA|BI |
aft.senderName | [A-Za-z0-9]{1,30} | Mandatory. Sender name |
marketplaceSeller | Array JSON | Optional. Node with the list of Sellers associated with the operation |
marketplaceSeller[].merchantCustomerId | [A-Za-z0-9]{1,100} | Optional. Unique seller identifier provided by the supplier. |
marketplaceSeller[].amount | [0-9]{1,8} | Optional. Total amount associated with the seller in integer format . 1,00 EURO = 100, 4,50 EUROS = 450... |
marketplaceSeller[].currency | [0-9]{1,8} | Mandatory. Reference original operation. |
marketplaceSeller[].deliveryTimeframe | [0-9]{8} | Optional. Estimated delivery date (the longest if there are several). Date format: YYYYMMDD |