Reconciling a corporate card processing report for a B2B marketplace and noticed the effective rate on a chunk of transactions was way above what the acquirer contract promised. Same card type, same MCC, same ticket size range, but a visible split in the fee line.
Traced it to Level 2/3 data. Commercial and purchasing cards qualify for lower interchange only if the merchant submits the extra fields: tax amount, PO number, customer code, and for Level 3 the line-item detail (SKU, quantity, unit price, commodity code). Our integration was sending Level 1 data only — card number, amount, date — because that’s all the checkout form collected. Every one of those transactions got auto-downgraded to standard commercial rate.
Ran the math on a month of volume: transactions with full Level 3 data settled around 1.8% effective. The ones missing it settled closer to 3.6%. On six-figure monthly volume that gap is not rounding error, it’s a line item finance will ask about.
Fixed it by making tax amount and PO number required fields before authorization, plus pulling line-item detail from the order object we already had in the database. Rate on new transactions dropped within one billing cycle.
How are you validating L2/L3 fields are actually populated before the auth request goes out, not just present in the schema?