Address Verification Service

Address Verification Service (AVS) verifies cardholder address data with the issuing bank to minimize fraudulent transactions. AVS captures the billing address and ZIP code in the transaction then compares these with the cardholder’s ZIP code and billing address in the card issuer’s file.

Use AVS on manual keyed transactions to qualify for better interchange rates.

The AVS response enables the integrator to determine if transaction needs reversal.

Code Samples

CWS

Request

PropertyDescription
parameters
JSONObject | required
All relevant parameters for AVS processing.
avsFields
JSONObject | optional
AVS Name Value Pairs
Includes CARDHOLDER_ADDRESS (max length = 30 characters) and CARDHOLDER_ZIP (max length = 9 characters)
cardEntryTypes
string | required
Entry Method
Valid value: MANUALLY_ENTERED

Response

PropertyDescription
data
JSONObject
Object holding various responses.
avsResponse
string
AVS Response Code
Valid values:
- A : Address matches - ZIP code does not match
- B : Street address match - ZIP code does not match (international user)
- C : Street address and postal code in wrong formats
- D : Street address and postal code match (international user)
- E : AVS error
- F : Address does compare and 5-digit ZIP code does compare (UK only)
- G : Service not supported by non-US issuer
- I : Address information not verified by international user
- M : Street address and postal code match (international user)
- N : No match on address (street) or ZIP
- O : No response sent
- P : Postal codes match, street address not verified due to incompatible formats
- R : Retry / System Unavailable / Timed Out
- S : Service not supported by issuer
- U : Address information is unavailable
- W : 9-digit ZIP matches, address (street) does not match
- X : Exact AVS match
- Y : Address (street) and 5-digit ZIP match
- Z : 5-digit ZIP matches, address (street) does not match
cardEntryType
string
Entry Mode
Valid value: MANUALLY_ENTERED

Example

Request
{
  "method" : "startPaymentTransaction",
  "requestId" : "1578283620",
  "targetType" : "paymentGatewayConverge",
  "version" : "1.0",
  "parameters" : {
    "paymentGatewayId" : "d5b9ea11-a9a7-4888-8458-2f609656579f",
    "transactionType" : "SALE",
    "tenderType" : "CARD",
  .....
    "avsFields" : {
      "CARDHOLDER_ADDRESS" : "8985 Ridgeestone Ct",
      "CARDHOLDER_ZIP" : "30076"
    },
    "cardEntryTypes" : [ "MANUALLY_ENTERED" ],
  .....
  }
}
Response
{
  "requestId" : "1578283661",
  "statusDetails" : "REQUEST_ACCEPTED",
  "data" : {
    "paymentGatewayCommand" : {
      "completed" : true,
      "eventQueue" : [ {
        "timeStamp" : "1461595337785",
        "statusDetails" : "CARD_READER_TRANSACTION_COMPLETED"
      } ],
      "chanId" : "31da7bbf-0d74-4244-b341-8911ac7cce71",
      "paymentTransactionData" : {
        "result" : "DECLINED",
        "authCode" : null,
        "resultMessage" : "DECLINED",
        "date" : "Mon Apr 25 10:42:14 MST 2016",
        "amountAuthorized" : {
          "currencyCode" : "USD",
          "value" : 6931
        },
        "avsResponse" : "Z",
        "cardEntryType" : "MANUALLY_ENTERED",
...

Java

Request

private void setAVSFields(ECLTenderInterface cardTenderInterface, 
                    GetCardTransactionPropertiesDialog cardTransactionPropertiesDialog)
{
    String value;
    if (null != (value = cardTransactionPropertiesDialog.useAVSAddress()))
        cardTenderInterface.setAVSField(ECLAVSField.CARDHOLDER_ADDRESS, value);

    if (null != (value = cardTransactionPropertiesDialog.useAVSZip()))
        cardTenderInterface.setAVSField(ECLAVSField.CARDHOLDER_ZIP, value);
}

Response

@Override
public void transactionDidComplete(ECLTransactionInterface transaction, ECLTenderInterface tender, final ECLTransactionOutcome outcome)
{
    if (outcome instanceof ECLCardTransactionOutcome)
    {
        ECLCardTransactionOutcome cardOutcome = (ECLCardTransactionOutcome)outcome;
        if (cardOutcome.getAVSResponse() != null)
        {
             /* Do something with response. */

Objective-C

This is how you set the AVS feature.

// set AVS address or ZIP in card tender
[cardTender setAVSField:ECLAVS_CardholderAddress withValue:@"123 Main St"];
[cardTender setAVSField:ECLAVS_CardholderZip withValue:@"30312"];
// get AVS response
if (((ECLCardTransactionOutcome *)_theOutcome).avsResponse.length != 0) {
     [NSString stringWithFormat:@"AVS response:%@\n", ((ECLCardTransactionOutcome *)_theOutcome).avsResponse];
 }

C#

Request

PaymentArgs paymentArgs = new PaymentArgs();

...

/* Set AVS fields */


Dictionary<string, string> info = new Dictionary<string, string>();

info["CARDHOLDER_ADDRESS"] = tb_Address.Text;
info["CARDHOLDER_ZIP"] = tb_Zip.Text;

paymentArgs.avsFields = info;

Response

public void MyPaymentComplete(PaymentTransactionResults paymentResults)
{
    PaymentTransactionData paymentData = paymentResults.PaymentTransactionData;
    if (null != paymentData)
    {
        if (null != paymentData.avsResponse)
        {
            /* Do something with result */