Adyen calls Level 2 and Level 3 card data Enhanced Scheme Data, or ESD. If your business accepts corporate, purchasing or business cards through Adyen, or you run a platform on Adyen that processes for B2B sellers, ESD is how a US commercial card sale can reach a lower interchange rate at Visa and Mastercard. This guide covers where ESD goes in the Checkout API, which fields matter, what Adyen validates, what it does with invalid data and how to see the result.
Savings from lower interchange only reach you on Interchange++ pricing. On blended pricing, the gateway keeps the difference.
What ESD covers
ESD is Adyen's umbrella for extra transaction data sent to the card schemes. For commercial cards, the relevant type is Level 2 and Level 3. Other ESD types exist for airlines, car rental, lodging and temporary services, and a request can carry only one type.
| Network | What Adyen sends | Rate effect |
|---|---|---|
| Visa | Level 3 only, since April 1, 2026 | Product 3 through Visa CEDP |
| Mastercard | Level 2 and Level 3 | Data Rate II and Data Rate III |
| American Express | Level 2 and Level 3 | No interchange incentive; used for reporting and fraud prevention |
Level 2 and Level 3 apply to US business, purchasing and corporate cards. On most business cards, only Level 2 is accepted. Some merchant categories are not eligible for any ESD, among them restaurants, passenger railways, fuel and some food stores; Adyen processes those payments without the data.
Where ESD goes in the Checkout API
Current format. Since Checkout API v70, ESD goes in a structured object, enhancedSchemeData.levelTwoThree, with item lines in an array. Amounts and quantities are integers in minor units.
- With automatic capture, send it in the payment request.
- With manual, partial or multiple captures, send it in the capture request.
- If the captured amount differs from the payment amount, always send ESD with the capture.
Legacy format. Older integrations sent ESD as flat string keys inside additionalData. Checkout API v72, released on April 15, 2026, removed that path: a v72 request with ESD in additionalData fails validation. If you upgrade to v72, move ESD to the structured object first. The Classic Payments API still accepts only the legacy format.
The fields that matter
| Data | Level | Notes |
|---|---|---|
| Customer reference number | Level 2 and Level 3 | Up to 25 characters; not blank, not only zeros |
| Total tax amount | Level 2 and Level 3 | Cannot be zero for Level 2; can be zero for Level 3 when no tax applies |
| Freight, duty, order date, ship from and destination | Level 3 | Header data; some fields are required under conditions |
| Item description | Level 3 | Up to 26 characters; not generic, not your merchant name |
| Product code | Level 3 | Up to 12 characters; your own or the manufacturer's code |
| Commodity code | Level 3 | Up to 12 characters; UNSPSC, HS, NAICS or NAPCS |
| Quantity | Level 3 | Integer above zero |
| Unit of measure | Level 3 | Up to 3 characters, such as EA |
| Unit price and line total | Level 3 | Integers in minor units |
For Level 2, tax has a range: at least 0.1% of the amount, and at most 22% on Visa or 30% on Mastercard. That floor does not apply to Level 3.
The arithmetic Adyen expects on Visa
- Each line: line total equals quantity times unit price, minus the line discount.
- The payment: the amount equals the sum of line totals plus freight plus total tax. Duty is not part of this sum in Adyen's own example.
On Visa, Adyen also rejects descriptions that are blank, a single character, only special characters, the same as or similar to the merchant name, or only generic words such as "product" or "service". These are the same patterns Visa CEDP penalizes.
What Adyen does with invalid ESD
This is the part that costs money without anyone noticing. Invalid ESD does not decline the payment. Adyen keeps the payment and drops data:
| What is wrong | What Adyen does | Result |
|---|---|---|
| A required field is missing or malformed | Drops all Level 2 and Level 3 data | No reduced rate |
| An error only in Level 3, or a card eligible only for Level 2 | Drops Level 3 and sends Level 2 | On Visa, no reduced rate, since Visa no longer has a Level 2 rate |
| An optional field is malformed | Drops the optional fields and sends the required ones | Sale can still qualify |
| Merchant category not eligible | Processes the payment without ESD | No reduced rate |
ESD cannot be corrected after the payment is processed, and Adyen does not use it on refunds or reversals. If your data fails, the only fix is for future payments.
Because the payment succeeds either way, the gap only shows up later, as a higher interchange program on the fee report.
How to see what Adyen sent
Adyen reports the result of ESD validation in webhooks, if you turn it on:
- In Customer Area, go to Developers, Webhooks, edit your webhook and enable Include ESD Validation Result under Additional Settings.
- To get the result on the AUTHORISATION webhook, used with automatic capture, ask Adyen Support to enable it. With manual or delayed capture, it arrives on the CAPTURE webhook.
The webhook then tells you four things for each payment:
| Field | What it tells you |
|---|---|
| enhancedSchemeDataReceived | What Adyen received: L2, L3 or nothing |
| enhancedSchemeDataSubmitted | What Adyen sent to Visa or Mastercard after validation |
| enhancedSchemeDataRefusalReasons | Why all Level 2 and Level 3 data was dropped |
| enhancedSchemeDataWarningReasons | Why optional fields were dropped or the sale fell back to Level 2 |
A payment where "received" is L3 and "submitted" is L2 or empty is the pattern to look for: your system sent Level 3 data, and it never reached the network.
For the cost side, use the Payment accounting report in Customer Area, under Reports. Add the optional ICSF details column in the report settings: it shows the exact interchange program of each payment, which is how you see whether a sale reached Product 3 or Data Rate III.
Other requirements on Adyen
- Integration type: Adyen documents Level 2 and Level 3 for online payments on its Advanced flow, listening to AUTHORISATION and CAPTURE webhooks.
- AVS on Visa: Adyen asks for AVS to be configured and AVS data sent on each Visa transaction to get the interchange reduction.
- Visa CEDP: Adyen's pages do not use the term CEDP, but Visa's rules apply to every Visa commercial card sale. Data that passes Adyen's format checks can still fail CEDP's content checks.
The rates at stake on a typical online B2B sale:
| Network | Without qualifying data | With Level 3 |
|---|---|---|
| Visa Corporate and Purchasing | Card Not Present, 2.70% + $0.10 | Product 3, 1.75% + $0.10 |
| Mastercard Large Market Credit | Data Rate I, 2.70% + $0.10 | Data Rate III, 1.90% + $0.10 |
Sources: Visa USA Interchange Reimbursement Fees, effective October 24, 2026; Mastercard 2026-2027 U.S. Region Interchange Programs and Rates, effective April 17, 2026.
A short checklist for Adyen sellers and platforms
- Confirm you are on Interchange++ pricing.
- Send ESD in enhancedSchemeData.levelTwoThree, not in additionalData, before moving to v72.
- Send ESD with the capture whenever the captured amount differs from the payment amount.
- Take descriptions, product codes and commodity codes from your catalog.
- Calculate tax per sale; keep line totals and the payment total consistent.
- Turn on the ESD validation result in webhooks and track received against submitted.
- Add ICSF details to the Payment accounting report and read it monthly.
For the network rules behind these fields, see Visa CEDP explained and Level 3 credit card processing: requirements for B2B sellers.
Check your own sales
If you accept corporate cards on Adyen, run a free diagnostic at tierback.com. Upload your Payment accounting report: the diagnostic finds the commercial card sales that settled above the data rates and estimates what that cost.
See what last month cost you.
Upload an Adyen or Stripe fee report. The diagnostic shows the rate each commercial card sale paid and the best rate its card and MCC allow.