Skip to main content
Level 2 and Level 3 data is extra order detail that you send with a card payment. When the cardholder uses a business, purchasing, or corporate card, the card networks can charge a lower interchange fee on transactions that carry it. It matters most for B2B and government sales in the United States, and it has no effect on consumer cards.
Therius forwards the data. Whether a payment actually qualifies for the lower rate is decided by the card network, the issuer, and your acquirer, based on the card type, your merchant category, and the amounts.

Opt in with commercialData

Add a commercialData object at the root of a card POST /payment/purchase or POST /payment/authorization request, next to lineItems. Level 3 line detail is read from lineItems only when commercialData is present. For Level 2, customerReference and the tax amount are all you need. For Level 3, also add the following fields to every item in lineItems:

The amounts must add up

Therius checks the arithmetic before it calls the provider and returns a 400 with the exact mismatch if it fails:
Each line’s amount is its own total with tax, as in the example below.
Here the net lines are 9,500 + 2,000 = 11,500, the tax is 900 + 100 = 1,000, and freight is 300, which totals 12,800.
If you send both an order-level taxAmount and line-level taxAmount values, they must agree. Send tax at only one level if you prefer.

Send it on capture

If you authorize first and capture later, you can send commercialData and lineItems in the body of POST /payment/{id}/capture. Do this when you did not send the data with the authorization, or when the captured amount or lines differ from it. The same rules apply, checked against the capture amount.

Checkout sessions lock the data

When you create a checkout session with POST /sdk/session, pass commercialData and lineItems there. The session locks them: a purchase made with the session token always uses the locked values and ignores any commercialData in the purchase call, because that call can come from the browser. A purchase your server makes with a private API key sends its own commercialData.

What each connection sends

Other card connections ignore commercialData; the payment is processed normally. Each acquirer is strict about what it accepts, and Therius never declines or fails a payment because enhanced data is missing or rejected. When the data falls short, Therius sends what it can:
  • Adyen requires customerReference and tax at both levels, a non-zero tax for Level 2, and on every line a productCode (up to 12 characters), unitOfMeasure (up to 3 characters), and commodityCode (up to 12 characters). If a line is missing one, Therius sends Level 2 only. Descriptions are cut to 26 characters.
  • Stripe uses your orderCode as the order reference and sends the order-level tax. Product code, unit of measure, and commodity code are optional for the request but needed to receive Level 3 rates. If your Stripe account’s API version does not yet support payment line items, Therius sends the payment without the data.
  • NMI accepts up to 99 line items. With more, Therius sends the order-level fields only.

What is not included

  • Level 2/3 data is for card payments. It is ignored for alternative payment methods and wallets that settle outside the card networks.
  • Refunds and cancellations do not carry it.
  • Duty, VAT, and order-level discount fields are not supported. Put discounts on the line items.