1.486

ACS V1 PAReq example

Route: ACSV1

Type: UI

DS V1 Enrolled Card Request example

Route: /DSV1

Type: Post

Request example:

<?xml version="1.0" encoding="UTF-8"?>
<ThreeDSecure>
<Message id="12345">
<VEReq>
<version>1.0.2</version>
<pan>4444333322221111</pan>
<Merchant>
<acqBIN>000000</acqBIN>
<merID>99000001</merID>
<password>99000001</password>
</Merchant>
<Browser>
<deviceCategory>0</deviceCategory>
<accept>*/*</accept>
<userAgent>curl/7.27.0</userAgent>
</Browser>
</VEReq>
</Message>
</ThreeDSecure>

Response example:

<?xml version="1.0" encoding="UTF-8"?>
<ThreeDSecure>
<Message id="12345">
<VERes>
<version>1.0.2</version>
<CH>
<enrolled>N</enrolled>
</CH>
<url>ACS_URL</url>
<protocol>ThreeDSecure</protocol>
</VERes>
</Message>
</ThreeDSecure>

DS V2 Card Range example (PReq JSON)

Route: /MC or /Visa or /AmEx

"messageType": "PReq"

Type: Post

Serial Number Trigger Values:

Omitting serialNumber - return database seed range
Not a trigger value - return database seed range

0 - return database seed range, includes PANs for mock client work-flows
43 - add 100,000 unique
44 - add 500,000 unique
100 - add 2
101 - add 1
102 - add 1, remove 1, add 1
103 - add 1, modify 1
104 - remove 1
105 - remove 4 (goto 100)
408 - returns status code 408, timeout
900 - removes entries that don't exist
901 - adds two sets with overlap
902 - adds the same set twice
903 - adds and deletes a set in same request
904 - adds with no methodURL
905 - modifies range from 904 with a methodURL
906 - modifies range from 904 with no methodURL
907 - adds range with null methodURL
908 - empty response
999 - removes all possible entries in trigger range, reset

Message Version Trigger Values:

42 - Creates a json response that has iterations of the add-modify-delete (100-105) series for 100x the serial number passed in, when messageVersion is set to 42.
The serialNumber returned will show the number of rows in the object. This is intended for load testing.

Request example:

{
"threeDSServerRefNumber": "8a880dc0-d2d2-4067-bcb1-b08d1690",
"threeDSServerOperatorID": "1jpeeLAWgGFgS1Ri9tX9",
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b201",
"messageType": "PReq",
"messageVersion": "2.1.0",
"serialNum": "1" //Optional input, omitting will return all and start a new serialNumber series
}

Response example:

{
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e",
"dsTransID": "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"messageType": "PRes",
"messageVersion": "2.1.0",
"serialNum": "2",
"dsStartProtocolVersion": "2.1.0",
"dsEndProtocolVersion": "2.1.0",
"cardRangeData": [{
"startRange": "1000000000000000",
"endRange": "1000000000005000",
"actionInd": "A",
"acsStartProtocolVersion": "2.1.0",
"acsEndProtocolVersion": "2.1.0",
"threeDSMethodURL": "https://www.acs.com/script",
"acsInfoInd": ["01", "02", "03", "04"]
}, {
"startRange": "2000000000000000",
"endRange": "2000000000005000",
"dsStartProtocolVersion": "2.1.0",
"dsEndProtocolVersion": "2.1.0",
"actionInd": "D",
"acsStartProtocolVersion": "2.1.0",
"acsEndProtocolVersion": "2.1.0",
"threeDSMethodURL": "https://www.acs.com/script"
}]
}

DS V2 Authentication Request (AReq JSON)

Route: /MC or /Visa

"messageType": "AReq"

Type: Post

Purchase Amount Trigger Values:

TransStatus' will fall into their own 100 count ranges.
Y: 1-99, C: 100-199, I: 200-299, N: 300-399, A: 400-499, U: 500-599, R: 600-699, D: 800-899, Misc: 1000+
Not all of these values are currently used (see below) but the dedicated ranges will allow for easy addition later.
Sandbox triggers can be reached in appropriate environments by adding the decimal trigger to any amount.

"purchaseAmount": "0" - "transStatus": "C" & "acsChallengeMandated": "Y", for card on file without payment
"purchaseAmount": "1" - "transStatus": "Y"
"purchaseAmount": "11" - "transStatus": "Y" & "authenticationValue": "90"
"purchaseAmount": "20" - "transStatus": "Y" & "eci": "06"
"purchaseAmount": "21" - "transStatus": "Y" & "eci": "07"
"purchaseAmount": "22" - "transStatus": "Y" & "DAF Extension"
"purchaseAmount": "100" - "transStatus": "C" & "acsChallengeMandated": "Y"
"purchaseAmount": "101" - "transStatus": "C" & "acsChallengeMandated": "N"
"purchaseAmount": "108" - "transStatus": "C" & RReq submitted with transStatus "N", transStatusReason "09"
"purchaseAmount": "109" - "transStatus": "C" & RReq submitted with transStatus "A"
"purchaseAmount": "110" - "transStatus": "C" & RReq submitted with transStatus "U", transStatusReason "14", challengeCancel "04"
"purchaseAmount": "111" - "transStatus": "C" & "acsChallengeMandated": "Y", CRes with minimum required fields and strip any trailing "="
"purchaseAmount": "112" - "transStatus": "C" & "acsChallengeMandated": "Y", CRes with minimum required fields
"purchaseAmount": "113" - "transStatus": "C" & "acsChallengeMandated": "Y" | RReq "transStatus": "N", "transStatusReason": "82", and "authenticationType": "92"
"purchaseAmount": "200" - "transStatus": "I"
"purchaseAmount": "201" - "transStatus": "I" & "authValue" missing
"purchaseAmount": "202" - "transStatus": "I" & "eci" missing
"purchaseAmount": "203" - "transStatus": "I" & "eci" & "authValue" missing
"purchaseAmount": "300" - "transStatus": "N"

Prepaid Anonymous for MasterCard Only
"purchaseAmount": "380": "transStatus": "N" & "authenticationType": "80" & "transStatusReason": "80"
"purchaseAmount": "381": "transStatus": "N" & "authenticationType": "81" & "transStatusReason": "81"
"purchaseAmount": "382": "transStatus": "N" & "authenticationType": "82" & "transStatusReason": "82"
"purchaseAmount": "383": "transStatus": "N" & "authenticationType": "83" & "transStatusReason": "83"
"purchaseAmount": "384": "transStatus": "N" & "authenticationType": "84" & "transStatusReason": "84"
"purchaseAmount": "385": "transStatus": "N" & "authenticationType": "85" & "transStatusReason": "85"
"purchaseAmount": "386": "transStatus": "N" & "authenticationType": "86" & "transStatusReason": "86"
"purchaseAmount": "387": "transStatus": "N" & "authenticationType": "87" & "transStatusReason": "87"
"purchaseAmount": "388": "transStatus": "N" & "authenticationType": "88" & "transStatusReason": "88"
"purchaseAmount": "389": "transStatus": "N" & "authenticationType": "89" & "transStatusReason": "89"
"purchaseAmount": "390": "transStatus": "N" & "authenticationType": "90" & "transStatusReason": "90"
"purchaseAmount": "391": "transStatus": "N" & "authenticationType": "91" & "transStatusReason": "91"
"purchaseAmount": "392": "transStatus": "N" & "authenticationType": "92" & "transStatusReason": "92"
"purchaseAmount": "393": "transStatus": "N" & "authenticationType": "93" & "transStatusReason": "93"
"purchaseAmount": "394": "transStatus": "N" & "authenticationType": "94" & "transStatusReason": "94"
"purchaseAmount": "395": "transStatus": "N" & "authenticationType": "95" & "transStatusReason": "95"
"purchaseAmount": "396": "transStatus": "N" & "authenticationType": "96" & "transStatusReason": "96"
"purchaseAmount": "397": "transStatus": "N" & "authenticationType": "97" & "transStatusReason": "97"
"purchaseAmount": "398": "transStatus": "N" & "authenticationType": "98" & "transStatusReason": "98"
"purchaseAmount": "399": "transStatus": "N" & "authenticationType": "99" & "transStatusReason": "99"

"purchaseAmount": "400" - "transStatus": "A" & "eci": "06"
"purchaseAmount": "401" - "transStatus": "A" & "eci" missing
"purchaseAmount": "500" - "transStatus": "U"
"purchaseAmount": "501" - "transStatus": "U" & "transStatusReason": "80"
"purchaseAmount": "600" - "transStatus": "R"

For transStatus D triggers make sure the initial request has all required fields (DecoupledRequestIndicator, DecoupledMaxTimeout, etc)
"purchaseAmount": "800" - "transStatus": "D" & RReq submitted with transStatus "Y"
"purchaseAmount": "801" - "transStatus": "D" & RReq submitted with transStatus "N", transStatusReason "01"
"purchaseAmount": "802" - "transStatus": "D" & RReq submitted with transStatus "N", challengeCancel "03" (timeout)
"purchaseAmount": "803" - "transStatus": "D" & RReq submitted with transStatus "Y" 1 minute before threeDSRequestorDecMaxTime
"purchaseAmount": "804" - "transStatus": "D" & RReq submitted with transStatus "N", transStatusReason "01" 1 minute before threeDSRequestorDecMaxTime
"purchaseAmount": "805" - "transStatus": "D" & RReq submitted with transStatus "N", challengeCancel "03" (timeout) 1 minute after threeDSRequestorDecMaxTime
"purchaseAmount": "1003" - whitelist exemption "transStatus": "Y" & passes sandbox
"purchaseAmount": "1004" - whitelist exemption "transStatus": "Y" & fails sandbox, triggers challenge flow
"purchaseAmount": "1005" - whitelist exemption "transStatus": "C" from ACS
"purchaseAmount": "1007" - secureCorp exemption "transStatus": "Y" & passes sandbox
"purchaseAmount": "1008" - secureCorp exemption "transStatus": "Y" & fails sandbox, triggers challenge flow
"purchaseAmount": "1009" - secureCorp exemption "transStatus": "C" from ACS
"purchaseAmount": "1011" - lowValue exemption "transStatus": "Y" & passes sandbox
"purchaseAmount": "1012" - lowValue exemption "transStatus": "Y" & fails sandbox, triggers challenge flow
"purchaseAmount": "1013" - lowValue exemption "transStatus": "C" from ACS
"purchaseAmount": "1015" - lowRisk exemption "transStatus": "Y" & passes sandbox
"purchaseAmount": "1016" - lowRisk exemption "transStatus": "Y" & fails sandbox, triggers challenge flow
"purchaseAmount": "1017" - lowRisk exemption "transStatus": "C" from ACS
"purchaseAmount": "1019" - recurring exemption "transStatus": "Y" & passes sandbox
"purchaseAmount": "1020" - recurring exemption "transStatus": "Y" & fails sandbox, triggers challenge flow
"purchaseAmount": "1021" - recurring exemption "transStatus": "C" from ACS
"purchaseAmount": "1023" - delegatedSCA exemption "transStatus": "Y" & passes sandbox
"purchaseAmount": "1024" - delegatedSCA exemption "transStatus": "Y" & fails sandbox, triggers challenge flow
"purchaseAmount": "1025" - delegatedSCA exemption "transStatus": "C" from ACS

Higher trigger amounts to support different currency valuations
"purchaseAmount": "1120" - "transStatus": "Y" & "eci": "06"
"purchaseAmount": "1121" - "transStatus": "Y" & "eci": "07"
"purchaseAmount": "11100" - "transStatus": "C" & "acsChallengeMandated": "Y"

PAN Trigger Values:

"PAN": "4176661000001023" - Visa with method URL, if challenge amount trigger used RReq submitted with transStatus "N", transStatusReason "09"
"PAN": "5200000000000015" - MasterCard with method URL, if challenge amount trigger used RReq submitted with transStatus "N", transStatusReason "09"
"PAN": "4012888888881881" - Visa with method URL, fail merchant account verification

Anonymous Prepaid - Visa
"PAN": "4024007135063815" - "transStatus": "N" & "transStatusReason": "87" & "eci": ""

Anonymous Prepaid - MasterCard
"PAN": "5559319595867092" - "transStatus": "A" & "authenticationValue" is set & "eci": "" - Enrolled in v2 and v1 - Protocol 2.1.0, 2.2.0
"PAN": "5415292027049551" - "transStatus": "A" & "authenticationValue" is set & "eci": "" - Enrolled in v2 only - Protocol 2.1.0, 2.2.0
"PAN": "5432156303543471" - "transStatus": "A" & "authenticationValue" is set & "eci": "06" - Enrolled in v2 and v1 - Protocol 2.1.0, 2.2.0
"PAN": "5187747575634548" - "transStatus": "A" & "authenticationValue" is set & "eci": "06" - Enrolled in v2 only - Protocol 2.1.0, 2.2.0
"PAN": "5136843197653719" - "transStatus": "I" & "authenticationValue" is set & "eci": "" - Enrolled in v2 and v1 - Protocol 2.2.0
"PAN": "5598571300601702" - "transStatus": "I" & "authenticationValue" is set & "eci": "" - Enrolled in v2 only - Protocol 2.2.0
"PAN": "5321692063546787" - "transStatus": "I" & "authenticationValue" is set & "eci": "06" - Enrolled in v2 and v1 - Protocol 2.2.0
"PAN": "5258646275703534" - "transStatus": "I" & "authenticationValue" is set & "eci": "06" - Enrolled in v2 only - Protocol 2.2.0

UI only triggers:

Triggers for functionality that can only be accessed using the mock3dsclient UI

"PAN": "4539797605519795" - Visa with method URL
"PAN": "4024007108478834" - Visa without method URL
"PAN": "5307808167635130" - MasterCard with method URL
"PAN": "5588819588721623" - MasterCard without method URL
"purchaseAmount": "102" - "transStatus": "C" & RReq submitted, Resubmit timeout
"purchaseAmount": "103" - "transStatus": "C" & Incorrect challenge info on resubmit, bad base64
"purchaseAmount": "104" - "transStatus": "C" & Incorrect challenge info on resubmit, incorrect format
"purchaseAmount": "105" - "transStatus": "C" & RReq never submitted, Resubmit submitted
"purchaseAmount": "106" - "transStatus": "C" & RReq never submitted, Resubmit never submitted
"purchaseAmount": "107" - "transStatus": "C" & ARes never returned on initial Auth/Cap

Sandbox originated triggers (Authorization flow):

Triggers for functionality that has to be started by sandbox

"purchaseAmount": "700" - MIT exclusion, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "710" - MOTO exclusion, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "720" - InterRegional exclusion, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "730" - Anonymous prepaid exclusion, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "1006" - whitelist exemption, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "1010" - secureCorp exemption, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "1014" - lowValue exemption, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "1018" - lowRisk exemption, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "1022" - recurring exemption, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit
"purchaseAmount": "1026" - delegatedSCA exemption, fails sandbox, returns SCARequired to merchant, challenge flow on resubmit

Request example:

{
"threeDSCompInd": "Y",
"threeDSRequestorID": "az0123456789",
"threeDSRequestorName": "Example Requestor name",
"threeDSRequestorURL": "https://threedsrequestor.adomainname.net",
"acquirerBIN": "868491",
"acquirerMerchantID": "mGm6AJZ1YotkJJmOk0fx",
"addrMatch": "N",
"cardExpiryDate": "1910",
"acctNumber": "8944988785642183",
"billAddrCity": "Bill City Name",
"billAddrCountry": "840",
"billAddrLine1": "Bill Address Line 1",
"billAddrLine2": "Bill Address Line 2",
"billAddrLine3": "Bill Address Line 3",
"billAddrPostCode": "Bill Post Code",
"billAddrState": "CO",
"email": "example@example.com",
"homePhone": {
"cc": "123",
"subscriber": "123456789"
},
"mobilePhone": {
"cc": "123",
"subscriber": "123456789"
},
"cardholderName": "Cardholder Name",
"shipAddrCity": "Ship City Name",
"shipAddrCountry": "840",
"shipAddrLine1": "Ship Address Line 1",
"shipAddrLine2": "Ship Address Line 2",
"shipAddrLine3": "Ship Address Line 3",
"shipAddrPostCode": "Ship Post Code",
"shipAddrState": "CO",
"workPhone": {
"cc": "123",
"subscriber": "123456789"
},
"deviceChannel": "02",
"browserAcceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"browserIP": "192.168.1.11",
"browserJavaEnabled": true,
"browserLanguage": "en",
"browserColorDepth": "48",
"browserScreenHeight": "400",
"browserScreenWidth": "600",
"browserTZ": "0",
"browserUserAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0)Gecko/20100101Firefox/47.0",
"mcc": "5411",
"merchantCountryCode": "840",
"merchantName": "UL TS BV",
"messageCategory": "01",
"messageType": "AReq",
"messageVersion": "2.1.0",
"notificationURL": "https://www.yourWebsite.com/notificationUrl",
"purchaseAmount": "101",
"purchaseCurrency": "978",
"purchaseExponent": "2",
"purchaseDate": "20170316141312",
"transType": "01",
"threeDSServerURL": " https://threedsserver.adomainname.net ",
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e",
"threeDSServerRefNumber": "3DS_LOA_SER_PPFU_020100_00008",
"threeDSRequestorAuthenticationInd": "03",
"threeDSRequestorAuthenticationInfo": {
"threeDSReqAuthMethod": "02",
"threeDSReqAuthTimestamp": "201711071307",
"threeDSReqAuthData": "validlogin at UL TS BV"
},
"threeDSRequestorChallengeInd": "02",
"threeDSRequestorPriorAuthenticationInfo": {
"threeDSReqPriorRef": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"threeDSReqPriorAuthMethod": "02",
"threeDSReqPriorAuthTimestamp": "201710282113",
"threeDSReqPriorAuthData": "cKTYtrvvKU7gUoiqbbO7Po"
},
"threeDSServerOperatorID": "1jpeeLAWgGFgS1Ri9tX9",
"acctType": "03",
"acctInfo": {
"chAccAgeInd": "03",
"chAccDate": "20140328",
"chAccChangeInd": "04",
"chAccChange": "20160712",
"chAccPwChangeInd": "02",
"chAccPwChange": "20170328",
"shipAddressUsageInd": "04",
"shipAddressUsage": "20160714",
"txnActivityDay": "1",
"txnActivityYear": "21",
"provisionAttemptsDay": "0",
"nbPurchaseAccount": "11",
"suspiciousAccActivity": "01",
"shipNameIndicator": "02",
"paymentAccInd": "04",
"paymentAccAge": "20160917"
},
"acctID": "personal account",
"dsReferenceNumber": "DS_LOA_DIS_PPFU_020100_00010",
"dsTransID": "1jpe0dc0-i9t2-4067-bcb1-nmt866956sgd",
"dsURL": "https://dsserver.domainname.com",
"payTokenInd": true,
"purchaseInstalData": "024",
"merchantRiskIndicator": {
"shipIndicator": "02",
"deliveryTimeframe": "01",
"deliveryEmailAddress": "deliver@email.com",
"reorderItemsInd": "01",
"preOrderPurchaseInd": "02",
"preOrderDate": "20170519",
"giftCardAmount": "337",
"giftCardCurr": "840",
"giftCardCount": "02"
},
"messageExtension": [{
"name": "msgextname",
"id": "501341592B_0001_4567",
"criticalityIndicator": false,
"data": {
"valueOne": "messageextensiondata",
"valueTwo": "moremessageextensiondata"
}
}],
"recurringExpiry": "20180131",
"recurringFrequency": "6",
"broadInfo": {
"message": "TLS 1.x will be turned off starting summer 2019"
}
}

Response example:

{
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e",
"acsChallengeMandated": "Y",
"acsOperatorID": "AcsOpId 4138359541",
"acsReferenceNumber": "3DS_LOA_ACS_PPFU_020100_00009",
"acsTransID": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"acsURL": "https://test.com",
"authenticationType": "02"
"authenticationValue": "Base64 encoded 28-byte string",
"broadInfo": "Unstructured info, JSON object",
"cardholderInfo": "String, 128 characters max",
"dsReferenceNumber": "DS_LOA_DIS_PPFU_020100_00010",
"dsTransID": "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"eci": "String, two character, payment system specific",
"messageExtension": {
"criticalityIndicator": true,
"data": "JSON object",
"id": "String, 64 character limit, Payment System RID as required prefix",
"name": "String, 64 character limit",
},
"messageType": "ARes",
"messageVersion": "2.1.0",
"transStatus": "R",
"transStatusReason": "10 - Only shows if transStatus is N, U, or R",
"whiteListStatus": "N",
"whiteListStatusSource": "03"
}

DS V2 Challenge example (CReq JSON)

Route: /MC or /Visa

"messageType": "CReq"

Type: Post

threeDSServerTransID Trigger Values:

Ending in a n - Return transStatus of `n`
Ending in a y - return transStatus of `y` (Default)

Request example:

{
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e",
"acsTransID": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"messageType": "CReq",
"challengeWindowSize": "05", //01 = 250 x 400 - 02 = 390 x 400 - 03 = 500 x 600 - 04 = 600 x 400 - 05 = Full screen
"messageVersion": "2.1.0"
}

Response example:

{
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e",
"acsTransID": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"messageType": "CReq",
"messageVersion": "2.1.0",
"transStatus": "Y",
}

DS V2 Encoded Challenge example (CReq base64)

Route: /CReq

Type: Post

Request example:

{
"CReq": "base64 encoded request",
}

Response example:

{
"CRes": "base64 encoded response",
}

DS V2 Result Request example (RReq JSON)

Route: /MC or /Visa

"messageType": "RReq"

Type: Post

threeDSServerTransID Trigger Values:

Ending in 01 - Return resultsStatus of `01` (default)
Ending in 02 - Return resultsStatus of `02`
Ending in 03 - Return resultsStatus of `03`
Ending in 80-99 - Return resultsStatus of `03`
All others - Return resultsStatus of `01`

Request example:

{
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b201",
"acsTransID": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"dsTransID": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"messageType": "RReq",
"messageVersion": "2.1.0",
"sdkTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e"
}

Response example:

{
"threeDSServerTransID": "8a880dc0-d2d2-4067-bcb1-b08d1690b26e",
"acsTransID": "d7c1ee99-9478-44a6-b1f2-391e29c6b340",
"dsTransID": "f25084f0-5b16-4c0a-ae5d-b24808a95e4b",
"messageType": "RReq",
"messageVersion": "2.1.0",
"resultsStatus": "01",
}