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:
- PHP
$result = $gateway->transaction()->sale([
'amount' => '100.00',
'paymentMethodNonce' => nonceFromTheClient,
'purchaseOrderNumber' => '12345',
'taxAmount' => '5.00'
]);
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:
- PHP
$result = $gateway->transaction()->sale([
'amount' => '100.00',
'paymentMethodNonce' => nonceFromTheClient,
'purchaseOrderNumber' => '12345',
'taxAmount' => '5.00',
'taxExempt' => false,
'shippingAmount' => '1.00',
'shippingTaxAmount' => '0.1',
'discountAmount' => '0.00',
'shipsFromPostalCode' => '60654',
'shipping' => [
'firstName' => 'Clinton',
'lastName' => 'Ecker',
'streetAddress' => '1234 Main Street',
'extendedAddress' => 'Unit 222',
'locality' => 'Chicago',
'region' => 'IL',
'postalCode' => '60654',
'countryCodeAlpha3' => 'USA'
],
'lineItems' => [
[
'name' => 'Product',
'kind' => Braintree\TransactionLineItem::DEBIT,
'quantity' => '10.0000',
'unitAmount' => '9.5000',
'unitOfMeasure' => 'unit',
'totalAmount' => '95.00',
'taxAmount' => '5.00',
'discountAmount' => '0.00',
'productCode' => '54321',
'commodityCode' => '98765'
]
]
]);
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.
- PHP
$result = $gateway->transaction()->submitForSettlement(
'transactionId', null, [
'purchaseOrderNumber' => '12345',
'taxAmount' => '5.00',
'taxExempt' => false,
'shippingAmount' => '1.00',
'shippingTaxAmount' => '0.1',
'discountAmount' => '0.00',
'shipsFromPostalCode' => '60654',
'lineItems' => [
[
'name' => 'Product',
'kind' => Braintree\TransactionLineItem::DEBIT,
'quantity' => '10.0000',
'unitAmount' => '9.5000',
'unitOfMeasure' => 'unit',
'totalAmount' => '95.00',
'taxAmount' => '5.00',
'discountAmount' => '0.00',
'productCode' => '54321',
'commodityCode' => '98765'
]
]
]
);
if ($result->success) {
// See $result->transaction for details
} else {
// Handle errors
}