Level 2/Level 3 processing
Last updated: Oct 24th, 4:58pm
What are Level 2 and 3 card payment transactions?
Card payment processing has three levels: Level 1, Level 2, and Level 3. The information required to complete the payment as a Level 1, Level 2, or Level 3 eligible transaction differs between the levels.
Level 1 requires less information and generally incurs higher interchange fees than the transactions processed with Level 2 and Level 3 data. Most businesses can operate at Level 1. However, IC++ merchants can benefit from reduced interchange fees when processing corporate and purchase credit cards by providing additional transaction information called Level 2 and Level 3 data.
Which types of card payments qualify?
Corporate and purchase credit cards are eligible for Levels 2 and 3 processing if the required information is provided. Consumer cards are only eligible for Level 1 processing. Level 2 and Level 3 cost optimization benefits don't apply to debit cards.
Which card networks support Level 2 and 3 processing?
Visa and Mastercard offer Levels 2 and 3 processing. American Express offers Level 2, and Discover offers only Level 1 processing.
How does a payment qualify?
Merchants must send the following information to qualify for Levels 2 and 3 processing. However, the card network and cardholder issuing bank ultimately determine whether a transaction qualifies for Level 2 or Level 3 processing:
Level 2 data
- Card number, expiration, billing address, shipping address, and invoice number.
- Customer Code or PO number: A unique reference ID for the order.
- Tax amount: An amount must be submitted separately from the transaction amount.
Level 3 data
- Level 2 data, and,
- Unit amount or unit price.
- Unit of measure.
- Freight or shipping amount: The shipping and handling charges.
- Duty amount: The charges for any import or export duties.
- Discount amount.
- Item commodity code.
- Item description.
- Item product code.
- Item quantity.
- Unit tax amount.
- Unit discount amount.
- Ship-from ZIP code.
Create Order request
This code sample shows Level 2 and 3 data in the body of a POST
call to the Create order endpoint of the Orders v2 API. This request creates a new order and completes the payment in a single step by declaring the intent
as CAPTURE
:
1curl -v -X POST https://api-m.sandbox.paypal.com/v2/checkout/orders \2-H 'Content-Type: application/json' \3-H 'PayPal-Request-Id: REQUEST-ID' \4-H 'Authorization: Bearer ACCESS-TOKEN' \5-H 'PayPal-Auth-Assertion: PAYPAL-AUTH-ASSERTION' \6-H 'PayPal-Partner-Attribution-Id: BN-CODE' \7-d '{8 "intent": "CAPTURE",9 "payer": {10 "name": {11 "given_name": "Firstname",12 "surname": "Lastname"13 },14 "address": {15 "address_line_1": "123 Main St.",16 "admin_area_2": "Anytown",17 "admin_area_1": "CA",18 "postal_code": "12345",19 "country_code": "US"20 }21 },22 "purchase_units": [23 {24 "reference_id": "Reference_ID_L2L32",25 "description": "Description of PU",26 "custom_id": "Custom-ID",27 "soft_descriptor": "Purchase Descriptor",28 "invoice_id": "INV_202302011234",29 "supplementary_data": {30 "card": {31 "level_2": {32 "invoice_id": "INV_202302011234",33 "tax_total": {34 "currency_code": "USD",35 "value": "5.20"36 }37 },38 "level_3": {39 "shipping_amount": {40 "currency_code": "USD",41 "value": "1.17"42 },43 "duty_amount": {44 "currency_code": "USD",45 "value": "1.16"46 },47 "discount_amount": {48 "currency_code": "USD",49 "value": "1.15"50 },51 "shipping_address": {52 "address_line_1": "123 Main St.",53 "admin_area_2": "Anytown",54 "admin_area_1": "CA",55 "postal_code": "12345",56 "country_code": "US"57 },58 "ships_from_postal_code": "12345",59 "line_items": [60 {61 "name": "Item1",62 "description": "Description of Item1",63 "upc": {64 "type": "UPC-A",65 "code": "001004697"66 },67 "unit_amount": {68 "currency_code": "USD",69 "value": "9.50"70 },71 "tax": {72 "currency_code": "USD",73 "value": "5.12"74 },75 "discount_amount": {76 "currency_code": "USD",77 "value": "1.11"78 },79 "total_amount": {80 "currency_code": "USD",81 "value": "95.10"82 },83 "unit_of_measure": "POUND_GB_US",84 "quantity": "10",85 "commodity_code": "98756"86 }87 ]88 }89 }90 },91 "amount": {92 "currency_code": "USD",93 "value": "100.30",94 "breakdown": {95 "item_total": {96 "currency_code": "USD",97 "value": "90.20"98 },99 "tax_total": {100 "currency_code": "USD",101 "value": "10.10"102 },103 "shipping": {104 "currency_code": "USD",105 "value": "10.00"106 },107 "discount": {108 "currency_code": "USD",109 "value": "10.00"110 }111 }112 },113 "items": [114 {115 "name": "Item1",116 "description": "Description of Item1",117 "sku": "SKU - 0",118 "url": "http: //example.com",119 "unit_amount": {120 "currency_code": "USD",121 "value": "45.10"122 },123 "tax": {124 "currency_code": "USD",125 "value": "5.05"126 },127 "quantity": "2",128 "category": "PHYSICAL_GOODS"129 }130 ],131 "shipping": {132 "address": {133 "address_line_1": "123 Main St.",134 "admin_area_2": "Anytown",135 "admin_area_1": "CA",136 "postal_code": "12345",137 "country_code": "US"138 }139 }140 }141 ]142}'
- Lines 25-31 declare a
level_2
object insidepurchase_units.supplementary_data.card
, including the invoice ID and the taxes charged for the payment. - Lines 32-82 declare a
level_3
object insidepurchase_units.supplementary_data.card
. Data includes shipping, duty, discount amounts, line-item information, and units of measure.
Ensure consistent field mapping between purchase units and supplementary data
Ensure that the field names, data types, formats, and values in the supplementary_data
object match the corresponding fields in the purchase_units
object. The following table shows which fields from each object need to match.
supplementary_data |
purchase_units |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|