How to read the Kalshi order book

The Kalshi order book lists the resting orders in one market and how many contracts are bid or offered at each price. To trade at once, you pay the spread: the gap between the best bid (the most anyone will pay) and the best ask (the least anyone will sell for). YES and NO share one book, so a NO bid at 51c is the same order as an offer to sell YES at 49c.

On this page
  1. What the Kalshi order book shows
  2. Reading a Kalshi order book, level by level
  3. Why YES and NO share one book
  4. What the bid-ask spread costs
  5. Depth and the price of a large order
  6. Where a new order lands in the book
  7. How to judge liquidity on Kalshi
  8. Reading the order book through the API
  9. Questions traders ask
  10. Sources

What the Kalshi order book shows

The Kalshi order book is the list of resting orders in one market. Each line is a price and the number of contracts waiting to trade at it. Bids are orders to buy. Asks, also called offers, are orders to sell. Kalshi's help center defines a resting order as an offer to buy contracts at a price that did not match right away.

Every market has its own book. An event with ten candidates or ten price ranges has ten markets and ten books. The other side of each trade is another member. Kalshi's help center says you always trade against another member of the platform, never against the exchange. The rulebook says all trading on the central limit order book is anonymous (Rule 5.7).

The rulebook also sets what you can see. Kalshi must let members view the best bid and offer, open interest, trade volume and the depth of the book down to the fifth price level (Rule 5.15). The public API returns every level.

Reading a Kalshi order book, level by level

The book below is made up for illustration. It shows five levels on each side of one market, quoted in YES prices.

Bids to buy YESYES priceOffers to sell YES
53c600
52c1,500
51c900
50c400
49c250
48c
30047c
80046c
1,20045c
50044c
2,00043c

Read it from the middle out.

  • The best bid is 47c, with buyers for 300 contracts.
  • The best ask is 49c, with 250 contracts offered.
  • The spread is 49c minus 47c, or 2c. Nobody is quoting 48c.
  • The midpoint is 48c. It is the usual one-number read on the market: a 48% implied chance.
  • Right now you can sell 300 YES at 47c or buy 250 YES at 49c. A larger order reaches the next level.

Kalshi's own glossary notes that highly liquid markets tend to have tighter spreads. The sections below turn the spread and the depth into cents per contract.

Why YES and NO share one book

A YES contract and a NO contract on the same market together pay exactly $1. That ties every order on one side to an order on the other. Kalshi's API documentation states the rule: a YES bid at price X is a NO ask at $1 minus X, and a NO bid at price Y is a YES ask at $1 minus Y.

So in Kalshi's data, the 250 contracts offered at 49c in the sample book are a NO bid at 51c. A trader who bids 51c for NO stands ready to take the other side of a YES buyer at 49c. Read from the NO side, the same book looks like this.

Top of the bookYES viewNO view
Best bid300 at 47c250 at 51c
Best ask250 at 49c300 at 53c
Spread2c2c
Midpoint48c52c

The spread is the same from both sides, and the two midpoints add up to $1. Kalshi's help center says there is no difference between buying YES and selling NO. The API files both under the same direction: long YES. Use whichever view is easier to think in. The guide to Kalshi odds explains why the YES ask and the NO ask add up to more than $1.

What the bid-ask spread costs

The spread is what you pay to trade right now. A buyer who takes the ask pays half the spread above the midpoint. A seller who hits the bid gives up half the spread below it. In the sample book that is 1c each way, before the fee.

Kalshi charges the fee on the part of an order that matches a resting order. Its fee schedule sets it at:

taker fee = 0.07 × C × P × (1 - P), rounded up

C is the number of contracts and P is the price in dollars. Kalshi rounds the result up to $0.0001 for direct members. For accounts held through an FCM (futures commission merchant), it rounds up to the cent. Some series scale the fee with a multiplier. On most series a resting order that fills later pays nothing. Series with maker fees charge a resting order a quarter of the taker rate, or half on some combos.

The cost of a quick round trip

Say you buy 250 YES at the 49c ask and sell them straight back at the 47c bid. You lose the spread plus a taker fee each way.

2c spread + 1.75c fee at 49c + 1.74c fee at 47c = 5.49c per contract

On 250 contracts that is about $13.73 for a position that went nowhere. The bid would have to climb from 47c to about 52.5c before selling at the bid got your money back.

The same spread at different prices

A 2c spread costs one point of implied probability at any price. As a share of what you pay, though, it changes a lot.

BidAskMidpointAsk above midpointAs a share of the midpoint
47c49c48c1c2.1%
5c7c6c1c16.7%
92c94c93c1c1.1%

Suppose you estimate the 6c contract at 8%. Against the midpoint that looks like a 2c edge. At the 7c ask you give up 1c of it. The taker fee at 7c takes another 0.46c. That leaves about 0.54c. The expected value guide runs this calculation in full.

Tick size sets the floor

A spread can never be narrower than one tick: the smallest price step a market allows. Whole-cent prices are valid on every Kalshi market, so on a whole-cent grid 1c is as tight as a spread gets. Kalshi's API documentation also lists grids with finer steps near the ends of the range, such as tenths of a cent below 10c and above 90c. Out there, one cent is a large share of the price. Each market's price_ranges field gives its exact grid.

Depth and the price of a large order

The best ask holds only so many contracts. A bigger order fills that level first, then moves on to the next price. It keeps going until it is complete or reaches its limit. Kalshi's help center gives a simple case. With 500 contracts offered at 10c and more at 12c, a 1,000-contract Quick Order buys 500 at each price, for an average of 11c. The order panel shows that average before you submit.

Depth of an illustrative Kalshi order book Contracts bid for YES add up to the left of the 47c best bid, reaching 4,800 at 43c. Contracts offered add up to the right of the 49c best ask, reaching 3,650 at 53c. The 2c spread between 47c and 49c is shaded, with the 48c midpoint marked. A line at 1,000 contracts meets the offers at 51c. Contracts available at this price or better 1,000 2,000 3,000 4,000 Bids to buy YES Offers to sell YES 2c spread mid 48c 1,000 YES 43c 45c 47c 49c 51c 53c YES price
The made-up sample book from above. Each step adds the contracts resting at the next price. The thin dashed line marks the 48c midpoint, and the gold line marks 1,000 contracts. A 1,000-contract YES buy takes all 650 offered at 49c and 50c, then 350 of the 900 at 51c.

In the sample book, a YES buy that has to fill at once runs up the offers like this. Fees are the taker fee at each level, before Kalshi's small rounding adjustment.

Contracts boughtPrices reachedAverage priceTaker feesAll-in per contractBreak-even chance
10049c49.00c$1.7550.75c50.75%
65049c and 50c49.62c$11.3751.37c51.37%
1,00049c to 51c50.10c$17.5051.85c51.85%
2,00049c to 52c50.78c$34.9852.52c52.52%

Nearly all of the extra cost of size comes from the book. The fee per contract stays close to 1.75c across these levels, because near 50c it hardly changes with price. The average price climbs with every level you reach.

The midpoint of this book says 48%. A 1,000-contract buy needs 51.85% to break even. If your estimate sits between those two numbers, the trade looks positive at the midpoint and is negative at the size you want. Expected value and Kelly sizing both depend on the price you enter. So the Kelly and EV calculator gives a usable answer only when that price is the average fill for your size. The fee calculator prices the fee at each level.

Where a new order lands in the book

Kalshi matches orders by price first and time second (Rule 5.9). A better price always trades first. At the same price, the oldest order trades first. Every order fills at its limit price or better. Any part that cannot fill rests in the book at its limit (Rule 5.10), unless it was sent as immediate-or-cancel or fill-or-kill.

Against the sample book, a buy order for YES can land in one of four places.

Your YES buy limitWhat happensFee on the fill
49c or higherFills at once against the offers at 49c and up to your limit. Any remainder rests at your price.Taker fee
48cRests alone as the new best bid. The spread narrows to 1c.Maker fee, $0 on most series
47cJoins the best bid, behind the 300 contracts already thereMaker fee, $0 on most series
46c or lowerRests deeper in the book, behind every better bidMaker fee, $0 on most series

A bid at 48c is first in line. But it fills only when a seller comes down to 48c, and the book can move away first. A bid at 47c waits behind 300 contracts. Kalshi calls that count the order's queue position: the number of contracts that must trade before yours fills. The guide to Kalshi limit orders covers queue position, post-only orders and how long an order rests. To close a position, a sale runs the same steps against the bids. The guide to selling before settlement works through it.

How to judge liquidity on Kalshi

Kalshi describes liquidity as how much order supply a market has. For a trader, a liquid market is one where you can trade your size close to the midpoint. Six checks cover it.

  1. The spread. 1c on a whole-cent market is as tight as it gets. A wide spread leaves a range of prices where nobody is quoting.
  2. Size at the top. Compare the contracts at the best bid and best ask with the size you want. The API reports them as yes_bid_size_fp and yes_ask_size_fp.
  3. Depth near the top. Add up what rests within 2c or 3c of the best prices. That is roughly what you can trade before the price moves against you.
  4. Both sides. A market with no NO bids has no YES ask. You can rest a YES bid there, but you cannot buy YES at once.
  5. Recent volume. volume_24h_fp counts contracts traded in the past day. It tells you trading happened. It says nothing about what is resting now.
  6. The age of the last trade. The last price is the most recent YES trade, however long ago it printed. GET /markets/trades lists each trade with its time and the taker's side.

The book you see can change before your order arrives. Canceling a resting order is free, so a level can disappear in the time it takes to send. Rewards also shape the book in some markets. Kalshi's Liquidity Incentive Program pays eligible members for resting orders close to the top of the book. It covers markets with an active reward period and pays whether or not those orders fill. It scores the book from snapshots taken once a second. Its current terms run to January 1, 2027 and exclude FCM customers.

The same checks apply to any market, from a Fed decision on the economics page to a game on the sports page.

Reading the order book through the API

GET /markets/{ticker}/orderbook returns the book for one market. Kalshi's documentation says it needs no authentication. The response holds two arrays of bids, yes_dollars and no_dollars. Each level is a price and a size, both strings, such as ["0.4700", "300.00"]. Prices carry up to four decimals and sizes two, because some markets trade in fractions of a cent and in fractional contracts.

The response has no asks. You build them from the other side, so the best YES ask is $1 minus the best NO bid. Kalshi's orderbook guide shows each array sorted from low to high, with the best bid last. The endpoint reference describes levels from best to worst. Code that takes the highest price in each array works either way. An optional depth parameter limits the levels returned. GET /markets/orderbooks fetches up to 100 markets in one call.

The sample book, as the API would return it:

{
  "orderbook_fp": {
    "yes_dollars": [["0.4300", "2000.00"], ["0.4400", "500.00"], ["0.4500", "1200.00"],
                    ["0.4600", "800.00"], ["0.4700", "300.00"]],
    "no_dollars":  [["0.4700", "600.00"], ["0.4800", "1500.00"], ["0.4900", "900.00"],
                    ["0.5000", "400.00"], ["0.5100", "250.00"]]
  }
}

A short Python reader finds the top of the book and prices a YES buy across levels.

from decimal import Decimal
import requests

BASE = "https://external-api.kalshi.com/trade-api/v2"
ticker = "TICKER-FROM-GET-MARKETS"
book = requests.get(f"{BASE}/markets/{ticker}/orderbook").json()["orderbook_fp"]

def levels(side):
    """Bids on one side as (price, size), best price first."""
    rows = book.get(side) or []
    return sorted(((Decimal(p), Decimal(n)) for p, n in rows), reverse=True)

yes_bids, no_bids = levels("yes_dollars"), levels("no_dollars")
best_bid = yes_bids[0][0] if yes_bids else None
best_ask = 1 - no_bids[0][0] if no_bids else None

def buy_yes_now(contracts):
    """Walk the YES offers (the NO bids). Returns contracts filled and dollars spent."""
    left, spent = Decimal(contracts), Decimal(0)
    for no_price, size in no_bids:
        take = min(left, size)
        spent += (1 - no_price) * take
        left -= take
        if left == 0:
            break
    return Decimal(contracts) - left, spent

On the sample book, buy_yes_now(1000) returns 1,000 contracts for $501.00. That matches the depth table. For just the top of the book, GET /markets/{ticker} carries yes_bid_dollars, yes_ask_dollars and the sizes behind them.

For a live book, the orderbook_delta WebSocket channel sends an orderbook_snapshot and then a delta each time a level changes. It needs an authenticated connection. Every message carries a seq number, so a gap in the sequence means a missed message. By default the channel reports NO-side levels in NO prices. Pass use_yes_price: true when you subscribe to put both sides on the YES scale. The Kalshi API guide covers keys and request signing.

Questions traders ask

How do you read the order book on Kalshi?

Start in the middle, at the best bid and the best ask. The best bid is the highest price anyone will pay for YES. The best ask is the lowest price anyone will sell it for. The gap between them is the spread. The levels behind each side show how many contracts you can trade, and at what prices, before the price moves.

What is the bid-ask spread on Kalshi?

The spread is the best ask minus the best bid. With YES bid at 47c and offered at 49c, the spread is 2c. A buyer pays 1c above the 48c midpoint and a seller gets 1c below it, before the taker fee. On a market priced in whole cents, the tightest possible spread is 1c.

Is buying NO the same as selling YES on Kalshi?

Yes. Kalshi's help center says there is no difference between the two, and the API records both as the same direction. A NO bid at 51c is the same order as an offer to sell YES at 49c. Either way, the position pays if the event does not happen.

Why does the Kalshi API order book only show bids?

Every ask already appears as a bid on the other side. A YES bid at X is a NO ask at $1 minus X. To find the best YES ask, subtract the highest NO bid from $1. Kalshi's documentation says showing bids only gives the complete book without listing each order twice.

How can I tell if a Kalshi market is liquid?

Check three things: the spread, the contracts at the best bid and ask, and the depth within a few cents of them. Then compare all three with the size you want. Recent volume and the time of the last trade add context. A market can trade heavily during the day and still hold little at the moment you want to trade.

Why did I pay more than the price on the screen?

Your order was larger than the size at the best ask, or the book moved before it arrived. A large order fills level by level, so its average price sits above the best ask. The taker fee adds more. For a Quick Order, Kalshi's order panel shows the average price before you submit.

Sources

EVDESK is research and trading software. It is not a broker, not an exchange, not a fund and not investment advice. Prices in examples are illustrative. The arithmetic on this page is general information for your own decisions. Prediction-market trading can lose money. See the Risk Disclosure. Not affiliated with Kalshi, Inc.