Visa Personal Payments (VPP)
Sandbox and Production Changes
Release 4.4
(Visa Confidential)
1. Overview
This document details VPP functionality changes applicable for Production and Sandbox environments done in Release 4.4. Changes and comparison are done against the immediate predecessor version – VPP 4.3.
Below are the high level functional changes implemented in VPP release 3.3
API / Functional change summaryALL APIs / · Every country where Visa supports settlement (19 Visa settlement currencies) may have their country code work as an Acquiring country in VPP APIs in the Sandbox environment
ACNV / · ACNV API service is enhanced to support CVV2 based standalone validation logic (previously CVV2-only requests were not supported)
AFT / · AFT API schema has new request fields to support magnetic stripe data for ‘Card Present’ transactions for non-US countries. This service is backward compatible with 3.2 API specification (PIN support will follow in a subsequent release)
AFTR / · AFTR API schema has new request fields to support magnetic stripe data for ‘Card Present’ transactions for non-US countries. Service is backward compatible with 3.2 API specification (PIN support will follow in a subsequent release)
· Response schema is updated to include DateAndTimeTransmission field. Update applicable for all formats (XML, JSON, NVP)
OCT / · Response schema is updated to include DateAndTimeTransmission field. Update applicable for all formats (XML, JSON, NVP)
Each of the above changes, are further detailed below
2. API schema changes
3. AFT, AFTR, and OCT API RecommendationsChange Summary / The AFT, AFTR, and OCT API’s have the potential to return 202 HTTP status code if the client has provided a “X-Transaction-Timeout-MS” header field and a timeout has been reached during the request. The recommended value for this header field is anything between 0-50ms. If the value is higher than this the application may not provide a 202 HTTP status code consistently.
Sample HTTP header for timeout / X-Transaction-Timeout-MS=50
ACNV API Schema Changes
Change Summary / ACNV API is enhanced to support standalone CVV2 based validation scheme. This means that while using CVV2 based validation, Avs.Street and Avs.PostalCode fields need not be populated in the request. Validation schemes (AVS, AVS&CVV2) that were supported earlier will continue to be supported by the ACNV service. Existing clients will not impacted by this enhancement.
Sample XML Request Payload for CVV2 based standalone validation / <acnv:AcnvV1V1Request xmlns:acnv="http://www.visa.com/vpp/api/acnv" xmlns:dd="http://www.visa.com/vpp/api/dd">
<SystemsTraceAuditNumber>701050</SystemsTraceAuditNumber>
<RetrievalReferenceNumber>607088101050</RetrievalReferenceNumber>
<AcquiringBin>409999</AcquiringBin>
<AcquirerCountryCode>101</AcquirerCountryCode>
<PrimaryAccountNumber>4957030420210462</PrimaryAccountNumber>
<CardExpiryDate>2015-10</CardExpiryDate>
<CardCvv2Value>022</CardCvv2Value>
<CardAcceptor>
<dd:Name>ABC</dd:Name>
<dd:TerminalId>123</dd:TerminalId>
<dd:IdCode>45678</dd:IdCode>
<dd:Address>
<dd:City>San Francisco</dd:City>
<dd:State>CA</dd:State>
<dd:County>075</dd:County>
<dd:Country>USA</dd:Country>
<dd:ZipCode>94404</dd:ZipCode>
</dd:Address>
</CardAcceptor>
</acnv:AcnvV1V1Request>
Sample JSON Request Payload for CVV2 based standalone validation / {
"SystemsTraceAuditNumber": "701050",
"RetrievalReferenceNumber": "607088101050",
"AcquiringBin": "409999",
"AcquirerCountryCode": "101",
"PrimaryAccountNumber": "4957030420210462",
"CardExpiryDate": "2015-10",
"CardCvv2Value": "022",
"CardAcceptor": {
"Name": "ABC",
"TerminalId": "123",
"IdCode": "45678",
"Address": {
"City": "San Francisco",
"State": "CA",
"County": "075",
"Country": "USA",
"ZipCode": "94404"
}
}
}
Sample NVP Request Payload for CVV2 based standalone validation / SystemsTraceAuditNumber=701050&RetrievalReferenceNumber=607088101050&AcquiringBin=409999&AcquirerCountryCode=101&PrimaryAccountNumber=4957030420210462&CardExpiryDate=2015-10&CardCvv2Value=022& CardAcceptor.Name=ABC&CardAcceptor.TerminalId=123&CardAcceptor.IdCode=45678&CardAcceptor.Address.City=San Francisco&CardAcceptor.Address.State=CA&CardAcceptor.Address.County=075&CardAcceptor.Address.Country=USA&CardAcceptor.Address.ZipCode=94404
AFT API Schema Changes
Change Summary / AFT API is enhanced to support Card Present – Card Read type of transactions for non-US countries. The enhancement is currently limited to ‘Card Read’ scenario and does not yet cover the ‘Key entered’ and other PIN related transactions within the Card Present domain.
Clients need to continue to use the VPP 3.2 API schema for Card Not Present type of AFT transactions.
Sample XML Request Payload for Card Present – Card Read Scenario / <aft:AftV1V1Request xmlns:aft="http://www.visa.com/vpp/api/aft" xmlns:dd="http://www.visa.com/vpp/api/dd">
<SystemsTraceAuditNumber>300259</SystemsTraceAuditNumber>
<RetrievalReferenceNumber>304060890126</RetrievalReferenceNumber>
<DateAndTimeLocalTransaction>2021-10-26T21:32:52</DateAndTimeLocalTransaction>
<AcquiringBin>409999</AcquiringBin>
<AcquirerCountryCode>101</AcquirerCountryCode>
<SenderPrimaryAccountNumber>4780990104056692</SenderPrimaryAccountNumber>
<SenderCardExpiryDate>2013-03</SenderCardExpiryDate>
<SenderCurrencyCode>USD</SenderCurrencyCode>
<Amount>112.00</Amount>
<Surcharge>2.00</Surcharge>
<TransactionIdentifier>481214059260001</TransactionIdentifier>
<ForeignExchangeFeeTransaction>10.00</ForeignExchangeFeeTransaction>
<BusinessApplicationID>AA</BusinessApplicationID>
<CardAcceptor>
<Name>Acceptor 1</Name>
<TerminalId>365539</TerminalId>
<IdCode>VMT200911026070</IdCode>
<Address>
<State>CA</State>
<County>075</County>
<Country>USA</Country>
<ZipCode>94404</ZipCode>
</Address>
</CardAcceptor>
<MagneticStripeData> <!-- Include only for Card Present -->
<!-- track1Data and track2Data are mutually exclusive fields -->
<track1Data>1010101010101010101010101010</track1Data>
<!-- <track2Data>4008310000000007D130310191014085</track2Data> -->
</MagneticStripeData>
<PointOfServiceData> <!-- Include only for Card Present -->
<PanEntryMode>90</PanEntryMode>
<PosConditionCode>0</PosConditionCode>
<MotoECIIndicator>0</MotoECIIndicator>
</PointOfServiceData>
<PointOfServiceCapability> <!-- Include only for Card Present -->
<PosTerminalType>4</PosTerminalType>
<PosTerminalEntryCapability>2</PosTerminalEntryCapability>
</PointOfServiceCapability>
</aft:AftV1V1Request>
Sample JSON Request Payload for Card Present – Card Read Scenario / {
"SystemsTraceAuditNumber": "300259",
"RetrievalReferenceNumber": "304060890126",
"DateAndTimeLocalTransaction": "2021-10-26T21:32:52",
"AcquiringBin": "409999",
"AcquirerCountryCode": "101",
"SenderPrimaryAccountNumber": "4780990104056692",
"SenderCardExpiryDate": "2013-03",
"SenderCurrencyCode": "USD",
"Amount": "112.00",
"Surcharge": "2.00",
"TransactionIdentifier": "481214059260001",
"ForeignExchangeFeeTransaction": "10.00",
"BusinessApplicationID": "AA",
"CardAcceptor": {
"Name": "Acceptor 1",
"TerminalId": "365539",
"IdCode": "VMT200911026070",
"Address": {
"State": "CA",
"County": "075",
"Country": "USA",
"ZipCode": "94404"
}
},
"MagneticStripeData": {
"track1Data": "1010101010101010101010101010"
},
"PointOfServiceData": {
"PanEntryMode": 90,
"PosConditionCode": 0,
"MotoECIIndicator": 0
},
"PointOfServiceCapability" : {
"PosTerminalType": 4,
"PosTerminalEntryCapability": 2
}
}
Sample NVP Request Payload for Card Present – Card Read Scenario / SystemsTraceAuditNumber=300259&RetrievalReferenceNumber=304060890126&DateAndTimeLocalTransaction=2021-10-26T21:32:52&AcquiringBin=409999&AcquirerCountryCode=101&SenderPrimaryAccountNumber=4780990104056692&SenderCardExpiryDate=2013-03&SenderCurrencyCode=USD&Amount=112.00&Surcharge=2.00&TransactionIdentifier=481214059260001&ForeignExchangeFeeTransaction=10.00&BusinessApplicationID=AA&CardAcceptor.Name=Acceptor 1&CardAcceptor.TerminalId=365539&CardAcceptor.IdCode=VMT200911026070&CardAcceptor.Address.State=CA&CardAcceptor.Address.County=075&CardAcceptor.Address.Country=USA&CardAcceptor.Address.ZipCode=94404&MagneticStripeData.tTrack1Data=1010101010101010101010101010&PointOfServiceData.PanEntryMode=90&PointOfServiceData.PosConditionCode=0&PointOfServiceData.MotoECIIndicator=0&PointOfServiceCapability.PosTerminalType=4&PointOfServiceCapability.PosTerminalEntryCapability=2
AFTR API Schema Changes
Change Summary / 1. AFTR API is enhanced to support Card Present – Card Read type of transactions for non-US countries. The enhancement is currently limited to ‘Card Read’ scenario and does not yet cover the ‘Key entered’ and other PIN related transactions within the Card Present domain. Clients need to continue to use the VPP 3.2 API schema for Card Not Present type of AFTR transactions.
2. Response schema is updated to include DateAndTimeTransmission field. Update applicable for all formats (XML, JSON, NVP)
Sample XML Request Payload for Card Present – Card Read Scenario / <aftr:AftrV1V1Request xmlns:aftr="http://www.visa.com/vpp/api/aftr" xmlns:dd="http://www.visa.com/vpp/api/dd">
<SystemsTraceAuditNumber>300260</SystemsTraceAuditNumber>
<RetrievalReferenceNumber>304060890127</RetrievalReferenceNumber>
<TransactionIdentifier>481214059260001</TransactionIdentifier>
<DateAndTimeLocalTransaction>2021-10-26T21:32:52</DateAndTimeLocalTransaction>
<AcquiringBin>409999</AcquiringBin>
<AcquirerCountryCode>101</AcquirerCountryCode>
<SenderPrimaryAccountNumber>4840920103511221</SenderPrimaryAccountNumber>
<SenderCardExpiryDate>2013-03</SenderCardExpiryDate>
<SenderCurrencyCode>CAD</SenderCurrencyCode>
<Amount>112.00</Amount>
<Surcharge>2.00</Surcharge>
<ForeignExchangeFeeTransaction>10.00</ForeignExchangeFeeTransaction>
<OriginalDataElements>
<dd:SystemsTraceAuditNumber>897825</dd:SystemsTraceAuditNumber>
<dd:DateAndTimeTransmission>2021-10-26T21:32:52</dd:DateAndTimeTransmission>
<dd:AcquiringBin>409999</dd:AcquiringBin>
<dd:ApprovalCode>000000</dd:ApprovalCode>
</OriginalDataElements>
<CardAcceptor>
<Name>Acceptor 1</Name>
<TerminalId>365539</TerminalId>
<IdCode>VMT200911026070</IdCode>
<Address>
<State>CA</State>
<County>081</County>
<Country>USA</Country>
<ZipCode>94404</ZipCode>
</Address>
</CardAcceptor>
<PointOfServiceData> <!-- Include only for Card Present -->
<PanEntryMode>90</PanEntryMode>
<PosConditionCode>0</PosConditionCode>
<MotoECIIndicator>0</MotoECIIndicator>
</PointOfServiceData>
<PointOfServiceCapability> <!-- Include only for Card Present -->
<PosTerminalType>4</PosTerminalType>
<PosTerminalEntryCapability>2</PosTerminalEntryCapability>
</PointOfServiceCapability>
</aftr:AftrV1V1Request>
Sample JSON Request Payload for Card Present – Card Read Scenario / {
"SystemsTraceAuditNumber": "300260",
"RetrievalReferenceNumber": "304060890127",
"TransactionIdentifier": "481214059260001",
"DateAndTimeLocalTransaction": "2021-10-26T21:32:52",
"AcquiringBin": "409999",
"AcquirerCountryCode": "101",
"SenderPrimaryAccountNumber": "4840920103511221",
"SenderCardExpiryDate": "2013-03",
"SenderCurrencyCode": "CAD",
"Amount": "112.00",
"Surcharge": "2.00",
"ForeignExchangeFeeTransaction": "10.00",
"OriginalDataElements": {
"SystemsTraceAuditNumber": "897825",
"DateAndTimeTransmission": "2021-10-26T21:32:52",
"AcquiringBin": "409999",
"ApprovalCode": "000000"
},
"CardAcceptor": {
"Name": "Acceptor 1",
"TerminalId": "365539",
"IdCode": "VMT200911026070",
"Address": {
"State": "CA",
"County": "081",
"Country": "USA",
"ZipCode": "94404"
}
},
"PointOfServiceData": {
"PanEntryMode": 90,
"PosConditionCode": 0,
"MotoECIIndicator": 0
},
"PointOfServiceCapability" : {
"PosTerminalType": 4,
"PosTerminalEntryCapability": 2
}
}
Sample NVP Request Payload for Card Present – Card Read Scenario / SystemsTraceAuditNumber=300260&RetrievalReferenceNumber=304060890127&TransactionIdentifier=481214059260001&DateAndTimeLocalTransaction=2021-10-26T21:32:52&AcquiringBin=409999&AcquirerCountryCode=101&SenderPrimaryAccountNumber=4840920103511221&SenderCardExpiryDate=2013-03&SenderCurrencyCode=CAD&Amount=112.00&Surcharge=2.00&ForeignExchangeFeeTransaction=10.00&OriginalDataElements.SystemsTraceAuditNumber=897825&OriginalDataElements.DateAndTimeTransmission=2021-10-26T21:32:52&OriginalDataElements.AcquiringBin=409999&OriginalDataElements.ApprovalCode=000000&CardAcceptor.Name=Acceptor 1&CardAcceptor.TerminalId=365539&CardAcceptor.IdCode=VMT200911026070&CardAcceptor.Address.State=CA&CardAcceptor.Address.County=081&CardAcceptor.Address.Country=USA&CardAcceptor.Address.ZipCode=94404&PointOfServiceData.PanEntryMode=90&PointOfServiceData.PosConditionCode=0&PointOfServiceData.MotoECIIndicator=0&PointOfServiceCapability.PosTerminalType=4&PointOfServiceCapability.PosTerminalEntryCapability=2
Sample XML response / <ns2:AftrV1V1Response xmlns:ns2='http://www.visa.com/vpp/api/aftr'>
<TransactionIdentifier>23423432</TransactionIdentifier>
<ApprovalCode>20304B</ApprovalCode>
<ActionCode>00</ActionCode>
<ResponseSource>5</ResponseSource>
<DateAndTimeTransmission>2012-10-29T20:43:54.000Z </DateAndTimeTransmission>
</ns2:AftrV1V1Response>
Sample JSON response / {
"TransactionIdentifier": 23423432,
"ApprovalCode": "20304B",
"ActionCode": "00",
"ResponseSource": "5",
"DateAndTimeTransmission": "2012-10-29T20:43:54.000Z"
}
Sample NVP response / TransactionIdentifier=23423432&ApprovalCode=20304B&ActionCode=00&ResponseSource=5&DateAndTimeTransmission=2012-10-29T20:43:54.000Z
OCT API Schema Changes
Change Summary / Response schema is updated to include DateAndTimeTransmission field. Update applicable for all formats (XML, JSON, NVP)
Sample XML response / <ns2:OctV1V1Response xmlns:ns2='http://www.visa.com/vpp/api/oct'>
<TransactionIdentifier>23423432</TransactionIdentifier>
<ActionCode>00</ActionCode>
<ApprovalCode>21324K</ApprovalCode>
<ResponseSource>5</ResponseSource>
<DateAndTimeTransmission>2012-10-29T22:40:51.000Z</DateAndTimeTransmission>
</ns2:OctV1V1Response>
Sample JSON response / {
"TransactionIdentifier": 23423432,
"ActionCode": "00",
"ApprovalCode": "21324K",
"ResponseSource": "5",
"DateAndTimeTransmission": "2012-10-29T22:40:51.000Z"
}
Sample NVP response / TransactionIdentifier=23423432&ActionCode=00&ApprovalCode=21324K&ResponseSource=5&DateAndTimeTransmission=2012-10-29T22:40:51.000Z
4. Multiple acquiring country support for VPP APIs in VPP Sandbox
A BIN onboarded for a client in production is always tied to one BIN Country and BIN Licensee Country. Support for additional acquiring countries is possible with onboarding the corresponding BIN of the Client.
Since there is no client specific onboarding process in the VPP Sandbox environment and to allow more flexibility for client developers, VPP API services in sandbox will now allow AcquirerCountryCode field be populated with any country where Visa supports settlement (19 Visa settlement currencies). This is applicable for all VPP API requests.