Level 2 and 3 Processing
Required Fields
Level 2 data
To qualify for Level 2 processing on a given transaction, include the following fields in the
Transaction: Sale
call:Interchange rates for Level 2 data
The values you pass in the required Level 2 fields determine whether you qualify for lower
interchange rates or not. US merchants must pass a
TaxAmount
between
0.1% and 22% for Visa transactions, and between 0.1% and 30% for Mastercard transactions.TaxExempt
transactions may not qualify for reduced L2 rates, but they could still be eligible for L3 rates.
Creating a transaction
Here's a full example with the required fields for Level 2:
- C#
TransactionRequest request = new TransactionRequest {
Amount = 100.00M,
PaymentMethodNonce = nonceFromTheClient,
PurchaseOrderNumber = "12345",
TaxAmount = 5.00M
};
gateway.Transaction.Sale(request);
Level 3 data
To qualify for Level 3 processing on a given transaction, you must pass
Level 2 data, along with specific additional Level 3 data and line
items. Line items are similar to the details you would find on an itemized invoice. When you create
a transaction, include the following fields in the
Transaction: Sale
call:- Level 2 fields
- Level 3 fields:
-
Level 3
LineItems
- LineItems.Name
- LineItems.Kind
- LineItems.Quantity
- LineItems.UnitAmount
- LineItems.UnitOfMeasure
- LineItems.TotalAmount
- LineItems.TaxAmount
- LineItems.DiscountAmount
- LineItems.ProductCode
- LineItems.CommodityCode
Supported characters
To ensure all line items appear as expected on the cardholder's statement, use only
a-z
, A-Z
, 0-9
, '
, .
,
-
, and spaces in the following fields:
Line items that contain other characters may still qualify for Level 3 processing, but unsupported
characters will be converted to a space on the cardholder's statement.
Amount validation
Each processor verifies that the total of the line item amounts matches the root transaction amount.
If there's a discrepancy, the transaction may be declined. To ensure these amounts match, it's
advisable to sum the per-item tax, subtotal amounts, shipping tax, and shipping amount to calculate
the total transaction amount. In the EU and UK regions, transactions with a non-zero shipping amount
may be rejected if the shipping tax amount is zero. Below is an example for validating the amounts
in Ruby.
Creating a transaction
Below is a full example using the minimum required fields for Level 3:
- C#
TransactionRequest request = new TransactionRequest {
Amount = 100.00M,
PaymentMethodNonce = nonceFromTheClient,
PurchaseOrderNumber = "12345",
TaxAmount = 5.00M,
TaxExempt = false,
ShippingAmount = 1.00M,
ShippingTaxAmount = 0.1M,
DiscountAmount = 0.00M,
ShipsFromPostalCode = "60654",
ShippingAddress = new AddressRequest {
FirstName = "Clinton",
LastName = "Ecker",
StreetAddress = "1234 Main Street",
ExtendedAddress = "Unit 222",
Locality = "Chicago",
Region = "IL",
PostalCode = "60654",
CountryCodeAlpha3 = "USA"
},
LineItems = new TransactionLineItemRequest[] {
new TransactionLineItemRequest {
Name = "Product",
LineItemKind = TransactionLineItemKind.DEBIT,
Quantity = 10.0000M,
UnitAmount = 9.5000M,
UnitOfMeasure = "unit",
TotalAmount = 95.00M,
TaxAmount = 5.00M,
DiscountAmount = 0.00M,
ProductCode = "54321",
CommodityCode = "98765"
}
}
};
gateway.Transaction.Sale(request);
Specifying level 2 and 3 data when submitting for settlement
Availability
Level 2 and 3 processing via submit for settlement requires internal approval. Please
contact us if you’re interested
in this functionality.
Note
Level 2 and 3 data provided via submit for settlement will override all Level 2 and 3 data
previously provided in a sale request. If you wish to pass Level 2 and 3 data, we recommend
utilizing either
transaction.sale
or transaction.submit_for_settlement, but not both at the same time.
- C#
TransactionRequest submitForSettlementRequest = new TransactionRequest {
PurchaseOrderNumber = "12345",
TaxAmount = 5.00M,
TaxExempt = false,
ShippingAmount = 1.00M,
ShippingTaxAmount = 0.1M,
DiscountAmount = 0.00M,
ShipsFromPostalCode = "60654",
LineItems = new TransactionLineItemRequest[] {
new TransactionLineItemRequest {
Name = "Product",
LineItemKind = TransactionLineItemKind.DEBIT,
Quantity = 10.0000M,
UnitAmount = 9.5000M,
UnitOfMeasure = "unit",
TotalAmount = 95.00M,
TaxAmount = 5.00M,
DiscountAmount = 0.00M,
ProductCode = "54321",
CommodityCode = "98765"
}
}
};
Result<transaction> result = gateway.Transaction.SubmitForSettlement(
"the_transaction_id",
submitForSettlementRequest
);
if (result.IsSuccess()) {
var transaction = result.Target;
} else {
System.Console.WriteLine(result.Message);
}