Payment-method icon

Level 2/3 data

Include level 2/3 data in your requests for US payments with Mastercard and Visa.

Level 2/3 enhanced scheme data (ESD) is for US domestic payments with Mastercard and Visa, and lets companies track how much is spent on their corporate cards and the amount of sales tax:

  • Level 2 data is purchase and tax details for the payment.
  • Level 3 data is level 2 data plus line item details such as product quantity and product description.

To learn more about sending level 2/3 data for American Express payments, see ESD for American Express.

Requirements to send level 2/3 data

MCC requirements

You can send level 2/3 data if you do not process under any of the airline, car rental, lodging or temporary services MCCs. See ESD types and industries to learn about which MCCs cannot send level 2/3 data.

Card requirements

You can send level 2/3 data for business cards, purchasing cards, and corporate cards. For most business cards, you can only send level 2 data.

Tax requirements

The tax requirements to qualify for the level 2 interchange rates are different for Visa and Mastercard:

  • Visa: The total state or provincial tax amount must be between 0.1% and 22%.
  • Mastercard: The total state or provincial tax amount must be between 0.1% and 30%.

For level 3 data, the minimum requirements do not apply, you can send it for transactions with a total tax amount of less than 0.1%. The maximums apply to both level 2 and level 3 transactions.

Make sure that the tax amount you send is in line with the total transaction amount and the purchase. For example, you must not specify a tax rate of 20% for an item where it should be 2%.

Amount requirements

From September 2025, for Visa transactions, the amount values that you provide in your request must reflect discount amounts, shipping amounts, and local tax amounts:

  1. Line item total = (Quantity x Unit cost) - Discount amount
    • Detailed calculation breakdown: "enhancedSchemeData.itemDetailLine1.totalAmount" = ("enhancedSchemeData.itemDetailLine1.quantity" x "enhancedSchemeData.itemDetailLine1.unitPrice") - "enhancedSchemeData.itemDetailLine1.discountAmount"
  2. Total amount in capture request = Sum of line item totals + Shipping amount + Local tax amount
    • Always send L2/3 data in the capture request if the total amount in payment and capture request are different.
    • Detailed calculation breakdown, when L2/3 is sent in capture request: modificationAmount {amount} = "enhancedSchemeData.itemDetailLine1.totalAmount" + "enhancedSchemeData.itemDetailLine2.totalAmount" + "enhancedSchemeData.freightAmount" + "enhancedSchemeData.totalTaxAmount"

Data validation requirements

The level 2/3 data you send in your requests are validated, and you are required to provide accurate and valid data. See the formatting requirements outlined in our /payments, or /capture reference.

Adyen may do one of the following in cases where the level 2/3 data you submit does not pass the validation:

  • Drop the full level 2/3 data if a required field is missing or incorrectly formatted for both levels.
  • Fallback to level 2 data if the card used in the transaction is only eligible for type 2 data, or the level 3 data is missing or incorrectly formatted.
  • Only submit the required data fields and drop the optional fields if an optional field is incorrectly formatted.

Adyen L2-fallback support

If your request contains errors for level 3 data, Adyen drops level 3 data, and only submits level 2 data. If the request contains errors for both levels, Adyen processes the payment without level 2/3 data, and you do not qualify for the lower interchange rates until you fix and resend the request. Dropping level 2/3 data does not affect authorization rates.

We are working on informing you about the details of the issue when Adyen drops the data you sent in your request due to a validation error with a CAPTURE webhook.

Include level 2/3 data in your request

Send the following fields in your /payments or /capture request:

Level Field Format Required
2 and 3 enhancedSchemeData.customerReference ASCII -white_check_mark-
2 and 3 enhancedSchemeData.totalTaxAmount Numeric -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].productCode ASCII -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].description ASCII -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].quantity Numeric -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].unitOfMeasure ASCII -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].commodityCode ASCII -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].totalAmount Numeric -white_check_mark-
3 enhancedSchemeData.itemDetailLine[itemNr].unitPrice Numeric -white_check_mark-
3 enhancedSchemeData.destinationCountryCode ASCII
3 enhancedSchemeData.destinationPostalCode ASCII
3 enhancedSchemeData.destinationStateProvinceCode ASCII
3 enhancedSchemeData.dutyAmount Numeric
3 enhancedSchemeData.freightAmount Numeric
3 enhancedSchemeData.orderDate ASCII
3 enhancedSchemeData.shipFromPostalCode ASCII
3 enhancedSchemeData.itemDetailLine[itemNr].discountAmount Numeric

Below is an example of a /payments request with level 3 data.

Below is an example of a /capture request with level 3 data.

Testing

Use the following test card to test payments with level 2/3 data:

Card Number Card Type Expiry Date CVV
5555 5555 5555 4444 Mastercard 03/2030 737

See also