On this page
No Headings
Last updated: July 24, 2026
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.
Feature availability: US only.
Applicable currency: US Domestic (USD)
Available for merchants in the United States for USD transactions.
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.
Visa and Mastercard offer Levels 2 and 3 processing. American Express offers Level 2, and Discover offers only Level 1 processing.
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:
Note: The partner, merchant, or other initiating party must provide the Level 2 and 3 payment details when using the Orders v2 API to start a payment.
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.
curl -v -X POST https://api-m.sandbox.paypal.com/v2/checkout/orders \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS-TOKEN' \
-H 'PayPal-Partner-Attribution-Id: BN-CODE' \
-H 'PayPal-Auth-Assertion: AUTH-ASSERTION-JWT' \
-H 'PayPal-Request-Id: REQUEST-ID' \
-d '{
"intent": "CAPTURE",
"payer": {
"name": {
"given_name": "Firstname",
"surname": "Lastname"
},
"address": {
"address_line_1": "123 Main St.",
"admin_area_2": "Anytown",
"admin_area_1": "CA",
"postal_code": "12345",
"country_code": "US"
}
},
"purchase_units": [
{
"reference_id": "Reference_ID_L2L32",
"description": "Description of PU",
"custom_id": "Custom-ID",
"soft_descriptor": "Purchase Descriptor",
"invoice_id": "INV_202302011234",
"supplementary_data": {
"card": {
"level_2": {
"invoice_id": "INV_202302011234",
"tax_total": {
"currency_code": "USD",
"value": "5.20"
}
},
"level_3": {
"shipping_amount": {
"currency_code": "USD",
"value": "1.17"
},
"duty_amount": {
"currency_code": "USD",
"value": "1.16"
},
"discount_amount": {
"currency_code": "USD",
"value": "1.15"
},
"shipping_address": {
"address_line_1": "123 Main St.",
"admin_area_2": "Anytown",
"admin_area_1": "CA",
"postal_code": "12345",
"country_code": "US"
},
"ships_from_postal_code": "12345",
"line_items": [
{
"name": "Item1",
"description": "Description of Item1",
"upc": {
"type": "UPC-A",
"code": "001004697"
},
"unit_amount": {
"currency_code": "USD",
"value": "9.50"
},
"tax": {
"currency_code": "USD",
"value": "5.12"
},
"discount_amount": {
"currency_code": "USD",
"value": "1.11"
},
"total_amount": {
"currency_code": "USD",
"value": "95.10"
},
"unit_of_measure": "POUND_GB_US",
"quantity": "10",
"commodity_code": "98756"
}
]
}
}
},
"amount": {
"currency_code": "USD",
"value": "100.30",
"breakdown": {
"item_total": {
"currency_code": "USD",
"value": "90.20"
},
"tax_total": {
"currency_code": "USD",
"value": "10.10"
},
"shipping": {
"currency_code": "USD",
"value": "10.00"
},
"discount": {
"currency_code": "USD",
"value": "10.00"
}
}
},
"items": [
{
"name": "Item1",
"description": "Description of Item1",
"sku": "SKU - 0",
"url": "http: //example.com",
"unit_amount": {
"currency_code": "USD",
"value": "45.10"
},
"tax": {
"currency_code": "USD",
"value": "5.05"
},
"quantity": "2",
"category": "PHYSICAL_GOODS"
}
],
"shipping": {
"address": {
"address_line_1": "123 Main St.",
"admin_area_2": "Anytown",
"admin_area_1": "CA",
"postal_code": "12345",
"country_code": "US"
}
}
}
]
}'level_2 object inside purchase_units.supplementary_data.card, including the invoice ID and the taxes charged for the payment.level_3 object inside purchase_units.supplementary_data.card. Data includes shipping, duty, discount amounts, line-item information, and units of measure.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 |
|---|---|
card.level_2.invoice_id | invoice_id |
card.level_2.tax_total.currency_code | amount.breakdown.tax_total.currency_code |
card.level_2.tax_total.value | amount.breakdown.tax_total.value |
card.level_3.shipping_amount.currency_code | amount.breakdown.shipping.currency_code |
card.level_3.shipping_amount.value | amount.breakdown.shipping.value |
card.level_3.discount_amount.currency_code | amount.breakdown.discount.currency_code |
card.level_3.discount_amount.value | amount.breakdown.discount.value |
card.level_3.shipping_address.address_line_1 | shipping.address.address_line_1 |
card.level_3.shipping_address.address_line_2 | shipping.address.address_line_2 |
card.level_3.shipping_address.admin_area_2 | shipping.address.admin_area_2 |
card.level_3.shipping_address.admin_area_1 | shipping.address.admin_area_1 |
card.level_3.shipping_address.postal_code | shipping.address.admin_area_1 |
card.level_3.shipping_address.country_code | shipping.address.country_code |
card.level_3.line_items[0].name | items[0].name |
card.level_3.line_items[0].description | items[0].description |
card.level_3.line_items[0].upc.type | items[0].upc.type |
card.level_3.line_items[0].upc.code | items[0].upc.code |
card.level_3.line_items[0].unit_amount.currency_code | items[0].unit_amount.currency_code |
card.level_3.line_items[0].unit_amount.value | items[0].unit_amount.value |
card.level_3.line_items[0].tax.currency_code | items[0].tax.currency_code |
card.level_3.line_items[0].tax.value | items[0].tax.value |
card.level_3.line_items[0].total_amount.currency_code | amount.breakdown.item_total.currency_code |
card.level_3.line_items[0].total_amount.value | amount.breakdown.item_total.value |
card.level_3.line_items[0].quantity | items[0].quantity |
Note:
purchase_units and supplementary_data don't match, the values from the latter take precedence.purchase_units object, include the corresponding supplementary_data object. Update both objects simultaneously to maintain consistency.supplementary_data in the PATCH request, the system automatically deletes the existing supplementary_data object to prevent discrepancies and ensure data integrity.Handle buyer errors
Manage payer errors and enhance the payer experience in your Expanded Checkout integration using the PayPal JavaScript SDK and Orders REST API.
Update order details
Learn how to update an existing order's amounts and details before capture using the PayPal JavaScript SDK and Orders API.