Skip to main content
A price nobody can trade at is not a price. Every object that names a market carries the money behind it: what traded in the last 24 hours, what is held, what a round trip costs, and a one-word grade. Lists that suggest something to act on leave thin markets out unless you ask for them.

Volume

volume_24h_usd prefers the venue’s own 24-hour figure. When a venue publishes none, it falls back to the notional of the fills Routeur recorded, and volume_source says which you got: Where both venues list one outcome (an event’s twin), volumes and open interest add up and the spread is the better of the two, because that is the venue the outcome would be traded on.

Spread

Spread is the round trip: what it costs to buy a contract and sell it straight back, in dollars of the $1 it pays. Buying Yes at 55¢ and buying No at 46¢ costs 1.01forapairthatpays1.01 for a pair that pays 1, so the round trip is 1¢. The per-side spreads say the same thing from one ladder: on a venue that matches Yes bids against No bids, all three are usually equal.

Grades

liquidity is deep, tradeable or thin, from the fields above: Both conditions must hold for a grade: a market that traded $30,000 with a 4¢ round trip is tradeable, not deep. Open interest stands in for a market that is held rather than churned: a large book with a quiet day is still somewhere size can be moved. A market with no round trip, because one side has no ask, is thin however much it traded, since nothing can be bought and sold back at a price we know. The grade is computed when a response is built, from the latest crawl’s asks. On GET /v1/markets/{venue}/{id}/book the recorded book’s own spread grades the market instead, because it is fresher than the crawl.

What is filtered by default

Lists that suggest something to look at keep only markets that are at least tradeable, and rank what is left by the money behind it. The filter is applied inside the query, so a thin market is never read only to be dropped: Search and event listings do not filter: they show thin markets, ranked below the ones that can be traded. Three parameters change the floor wherever it applies: include_thin=true resets both floors to zero; either bound can then be set again explicitly, so include_thin=true&max_spread_usd=0.10 shows everything with a round trip of 10¢ or less, whatever it traded.
Passing min_volume_usd=0 alone keeps the 5¢ spread floor; passing include_thin=true is what removes both.

Book depth fields

Where a market’s order book is recorded (see Order books), five more fields come from the book itself, not the crawl: They are omitted for markets with no recorded book, and can be older than the crawl’s asks for markets in the polled tier. Compare book_at with quote.observed_at when it matters.

Example

An MLB total on Kalshi, read from GET /v1/markets/kalshi/KXMLBTOTAL-26SEP171235MILPIT-9/book (liquidity fields only):
16,743tradedanda1¢roundtrip:tradeable,notdeep,becauseitisshortofthe16,743 traded and a 1¢ round trip: tradeable, not deep, because it is short of the 25,000 the top grade needs. 57,000restswithin5¢ontheYessideand57,000 rests within 5¢ on the Yes side and 73,000 on the No side, so the book leans slightly toward sellers of Yes.
  • Order books: where the book_* fields come from.
  • Leads: why only tradeable markets become opportunities, and how depth sizes them.
  • Quotes and trades: the asks and fills the figures are read from.
  • Data freshness: how old each figure can be.