What Is the Itemize Transaction API?

Turn a flat transaction into the individual products behind it, each priced and classified on its own.

The Itemize Transaction API turns a flat purchase total into the individual products behind it. Where your transaction data shows $49.00 at Walgreens, the API shows bandages at $8.99, shampoo at $12.99, and a thermometer at $27.02, each one priced, categorized, and classified for HSA/FSA eligibility on its own.

What an item-level expense contains

When a user connects a store account, Sail retrieves their order history at the product level and returns one Expense per product rather than one per transaction. Each of those expenses carries:

  • The product name and the raw product title it came from.
  • The amount, as a decimal number in USD (for example, 27.02 means $27.02).
  • The merchant, including a supported_merchant_id when Sail can connect to that merchant directly.
  • enrichment, holding a spend category, subcategory, and merchant category code where available.
  • section_213d_classification, holding the HSA/FSA eligibility outcome for that single product.

How it works

Connecting a store account takes three steps:

  1. Your end user logs into their store account inside Sail's Connect Account Widget. Their store credentials are entered only inside Sail's iframe, so they never touch your servers.
  2. Sail syncs the store's order history. The first sync pulls up to 15 months of past orders, not only new ones, and Sail tells you when it finishes by webhook. See Receiving New Data for how to receive and verify those events.
  3. Your backend reads the resulting item-level expenses from the API.

The Get Item-Level Expenses quickstart walks you through all three steps.

Why item-level detail matters

Most spend data starts in a card or bank feed, which reports one record per transaction with the merchant name, the date, and the amount charged. That tells you a purchase happened and where, but not what was in the basket.

Eligibility is decided per item, not per basket. A $49.00 charge at a store that sells both prescriptions and birthday cards can't be classified from the transaction alone, so Sail returns itemization_required, and the expense keeps that outcome until the item-level detail is supplied.

Item-level data removes that ambiguity up front. Each product is classified on its own, so a prescription and a birthday card bought in the same visit no longer share one outcome. See Classifying Item-Level Expenses for what each outcome means and how the results reach you.

Who it's for

The Itemize Transaction API fits an application that already has transaction data and needs to know what was actually bought. Choose it if:

  • You want to turn flat card transactions into item-level purchase data.
  • You need product-level detail for budgeting, categorization, or receipt matching.
  • You'd otherwise have to ask users to photograph their receipts.
  • A flat store total isn't specific enough for you to act on.

It doesn't need an HSA or FSA to be involved at all. Classification runs on every expense regardless, so you can use the eligibility outcome, ignore it, or surface it later.

Next steps


Did this page help you?