Skip to content

Level 2 / Level 3 Data

Several Rover Pay endpoints accept an optional level23 object on the request that supplies Level 2 and Level 3 transaction data. Submitting Level 2/3 data with qualifying B2B and government card transactions can lower interchange rates.

The following endpoints accept level23:

The level23 object is optional. If omitted, the transaction is processed as a Level 1 sale.

Request Schema

level23 may be supplied as a JSON object on the request. All amounts use two implied decimal places (e.g. "1000" = $10.00), matching the transaction amount field.

Level 2 fields

FieldDescriptionRequired for L2
ponumberPurchase order number
taxamntSales tax amount (two implied decimals)✔️
taxexemptY if the order is tax exempt, otherwise N (default)

Level 3 order fields

Level 3 data also requires the Level 2 taxamnt field above.

FieldDescriptionRequired for L3
frtamntFreight / shipping amount (two implied decimals)
dutyamntDuty amount (two implied decimals)
orderdateOrder date in YYYYMMDD format✔️
shiptozipShip-to ZIP / postal code (5 or 9 digits for US)✔️
shipfromzipShip-from ZIP / postal code (5 or 9 digits for US)✔️
shiptocountryShip-to country code (defaults to US)
discamntOrder-level discount amount (mutually exclusive with item-level)
itemsArray of line items (see below)✔️

Level 3 item fields (items[])

FieldDescriptionRequired
linenoLine number on the order
materialMaterial / SKU code
descriptionItem description✔️
upcUPC code (must not be all zeros if supplied)
quantityQuantity ordered✔️
uomUnit of measure (e.g. EA, LB, BOX)✔️
unitcostUnit cost (auto-calculated as netamnt / quantity if omitted)
netamntExtended net amount for the line (two implied decimals)✔️
taxamntTax amount for the line (two implied decimals)✔️
discamntItem-level discount amount

Validation Rules

The submitted level23 data is validated before being sent to the processor. Any rule violations are returned in the response as a comma-delimited level23Errors string. The transaction itself is still processed; callers should decide whether to treat the errors as warnings or as a hard failure.

The following rules are enforced:

  • taxamnt must be 0 when taxexempt is Y.
  • taxamnt must be non-zero when Level 2 data is present and taxexempt is N.
  • Level 3 data requires the Level 2 taxamnt to be supplied.
  • orderdate is required for Level 3 and must be 8 numeric digits (YYYYMMDD).
  • shiptozip and shipfromzip are required for Level 3.
  • For US shipments (shiptocountry empty or US), ZIP codes must be 5 or 9 digits.
  • At least one item is required for Level 3.
  • Each item requires description, quantity, uom, netamnt and taxamnt.
  • upc, when supplied, must not be all zeros.
  • If frtamnt is non-zero, at least one line item's netamnt must equal frtamnt.
  • The sum of all items[].taxamnt must equal the order-level taxamnt.

Example level23 Object

javascript
{
    "ponumber": "PO-10042",
    "taxamnt": "80",
    "taxexempt": "N",
    "frtamnt": "150",
    "dutyamnt": "0",
    "orderdate": "20260424",
    "shiptozip": "92614",
    "shipfromzip": "85284",
    "shiptocountry": "US",
    "items": [
        {
            "lineno": "1",
            "material": "WIDGET-100",
            "description": "Blue widget",
            "upc": "012345678905",
            "quantity": "2",
            "uom": "EA",
            "unitcost": "500",
            "netamnt": "1000",
            "taxamnt": "80",
            "discamnt": "0"
        },
        {
            "lineno": "2",
            "description": "Ground shipping",
            "quantity": "1",
            "uom": "EA",
            "unitcost": "150",
            "netamnt": "150",
            "taxamnt": "0"
        }
    ]
}

Example Response Snippet

When validation issues are detected, a level23Errors attribute is added to the endpoint's normal response:

javascript
{
    "verified": "1",
    "errorCode": "",
    "errorMessage": "",
    "resultId": "1*19562*110*rc783*7",
    "ccvRec": "...",
    "level23Errors": "orderdate is required for Level 3,shiptozip is required for Level 3"
}