Kalshi Order Book Explained: Bids, Spread, Depth and the API

DeskBot — trading software and customer guides

Educational guide. Trading can lose money, including the full amount you pay for a contract. DeskBot does not guarantee profits, returns, win rates or income. DeskBot is not affiliated with, endorsed by or a partner of Kalshi.

Short answer

Kalshi's order book shows only bids: the prices people are willing to pay for Yes, and the prices people are willing to pay for No. There is no separate list of asks, because on a contract that pays $1, a bid for No at 22¢ is the same thing as an offer to sell Yes at 78¢. To read the book you flip one side: the best price you can buy Yes at is $1.00 minus the best No bid, and the best price you can sell Yes at is the best Yes bid. The gap between them is the spread, and the size listed at each price is how many contracts you can trade there before the price moves. This guide walks through a real Bitcoin 15-minute order book, the spread and depth math, what it costs to cross the book once fees are added, and how the API delivers the same data to a bot.

A real order book, read line by line

Here is the top of the order book for Kalshi's Bitcoin 15-minute market KXBTC15M-26OCT311215-15 (the window closing at 12:15 PM ET on October 31, 2026), pulled from Kalshi's public API at 12:07 PM ET with depth=5. Sizes are in contracts.

Yes bids (price, contracts) No bids (price, contracts)
77¢ — 5,591.51 22¢ — 219.05
76¢ — 2,774.20 21¢ — 3,302.37
75¢ — 2,963.69 20¢ — 2,295.70
74¢ — 1,796.00 19¢ — 3,652.68
73¢ — 1,851.01 18¢ — 3,193.32

(The API lists each side in ascending price order, so the best bid is the last entry in each array. The table above is flipped so the best prices sit on top. Fractional sizes like 219.05 appear because Kalshi now reports counts as fixed-point strings that allow fractional contracts.)

Turning those two columns into the four prices a trader cares about:

  • Sell Yes now (best Yes bid): 77¢. Someone will buy 5,591.51 Yes contracts from you at that price.
  • Buy Yes now (best Yes ask): $1.00 − 22¢ = 78¢. The 22¢ No bid is the other side of your Yes purchase: that trader pays 22¢ for No, you pay 78¢ for Yes, and together the two sides fund the $1 payout.
  • Buy No now (best No ask): $1.00 − 77¢ = 23¢.
  • Sell No now (best No bid): 22¢.

The Yes spread is 78¢ − 77¢ = 1¢, and the No spread is the same 1¢ seen from the other side. The market's "price" you see quoted, often the midpoint or last trade, sits inside that gap; the prices you can actually trade at immediately are the bid and the implied ask.

Why Kalshi shows only bids

Kalshi's own documentation explains this directly: in a binary market every position has a complement, so a Yes bid at price X is equivalent to a No ask at $1.00 − X, and a No bid at Y is equivalent to a Yes ask at $1.00 − Y. Showing both bids and asks would list every resting order twice. Listing only bids on each side gives the full picture without the duplication.

In practice this has two consequences worth remembering:

  1. A Yes buyer and a No buyer can trade with each other. If you bid 78¢ for Yes and someone else is bidding 22¢ for No, those orders match, because 78¢ + 22¢ = $1.00. This is also why buying No is economically the same as selling Yes at $1 minus the No price (covered in our Yes vs No guide).
  2. The ask you see is always derived. If the No side of the book is empty, there is no Yes ask at all, and an order to buy Yes can only rest and wait.

Depth: how much you can trade before the price moves

The best price is only good for the size listed next to it. In the book above, only 219.05 contracts sit at the 22¢ No bid, so only about 219 Yes contracts can be bought at 78¢. The next No level is 21¢ with 3,302.37 contracts, which is a 79¢ Yes ask.

Say you want 500 Yes contracts right now:

  • 219.05 contracts fill at 78¢ = $170.86
  • 280.95 contracts fill at 79¢ = $221.95
  • Total $392.81 for 500 contracts, an average of about 78.56¢, before fees.

That extra half cent per contract is slippage, and it comes entirely from depth. The Yes side, by contrast, is deep at the top: 5,591.51 contracts at 77¢, so a seller of a few hundred Yes contracts would fill at one price. Depth is often lopsided like this, and it changes from second to second as orders are added, filled and cancelled.

Kalshi's docs include a simple depth measure: add up the contracts within a set distance of the best bid (for example, within 5¢). On the Yes side above, every listed level from 77¢ down to 73¢ is within 5¢, totalling 14,976.41 contracts; on the No side, 22¢ down to 18¢ totals 12,663.12.

What crossing the book costs once fees are added

Buying at the ask or selling at the bid takes liquidity, and Kalshi's taker fee on these markets is 0.07 × contracts × price × (1 − price), before rounding under Kalshi's fee rounding rules. Using the same book:

Action Price Taker fee per contract (before rounding) Effective price
Buy Yes at the ask 78¢ 0.07 × 0.78 × 0.22 = 1.20¢ 79.20¢ paid
Sell Yes at the bid 77¢ 0.07 × 0.77 × 0.23 = 1.24¢ 75.76¢ received
Buy No at the ask 23¢ 0.07 × 0.23 × 0.77 = 1.24¢ 24.24¢ paid

Three things fall out of that table:

  • Break-even win rate. A Yes contract bought at 78¢ pays $1 if it wins. Paying about 79.2¢ all in, you need it to win more than about 79.2% of the time to break even. The spread and the fee both push that bar up.
  • Round trip cost. Buying Yes at 78¢ and immediately selling at 77¢ loses the 1¢ spread plus roughly 1.20¢ and 1.24¢ in fees: about 3.4¢ per contract before the market has moved at all. That is why selling before settlement is not free (see selling a Kalshi contract before it settles).
  • Fees are largest near 50¢. The price × (1 − price) term peaks at 50¢ (1.75¢ per contract) and shrinks toward the edges, but a smaller fee on a 90¢ contract still lifts the break-even to about 90.6%.

Resting (maker) orders that wait in the book are charged differently from taker orders, and fee schedules can differ by series, so check Kalshi's fee schedule for the market you trade. Our maker vs taker fees guide covers the difference.

Joining the book instead of crossing it

Every Kalshi API order is a limit order. If your Yes bid is below the best implied ask, it does not fill immediately; it rests in the Yes column of the book and waits. In the example, a Yes bid at 77¢ would join the 5,591.51 contracts already there.

Kalshi matches resting orders by price-time priority: better prices fill first, and at the same price the earlier order fills first. Kalshi exposes this through a queue-position endpoint, which returns how many contracts must be matched ahead of your resting order before it receives a fill. Joining a level with 5,000 contracts ahead of you means waiting for all of them to trade or cancel first.

Resting has trade-offs. You may avoid crossing the spread, but you may also never fill, or fill only when the price is moving against you. On a 15-minute contract, a resting order that has not filled can simply run out of time. Order types, expirations and cancels are covered in Kalshi order types explained.

Reading the order book through the API

For a bot, the same data comes from two places.

REST snapshot

GET /markets/{ticker}/orderbook on https://external-api.kalshi.com/trade-api/v2 returns an orderbook_fp object with two arrays, yes_dollars and no_dollars. Each entry is a two-string pair: price in dollars (for example "0.7700") and contract count as a fixed-point string (for example "5591.51"). Prices and counts are strings so they can carry sub-penny prices and fractional sizes; parse them with a decimal type rather than floats. The optional depth parameter takes 1 to 100 levels; 0 (the default) returns all levels. Kalshi's orderbook guide shows this endpoint called without authentication, and there is also a batch endpoint for several markets in one request.

A minimal read of the best prices looks like this:

Always check that each array is non-empty before indexing it; a thin market can have one side missing.

WebSocket stream

Polling the REST endpoint repeatedly burns rate-limit tokens. The WebSocket orderbook_delta channel is the streaming alternative, and it requires an authenticated connection. Kalshi sends an orderbook_snapshot first, then incremental orderbook_delta messages for each changed price level. The rules that matter for a bot, from Kalshi's WebSocket docs:

  • Apply deltas in seq order. seq counts messages on one subscription, so a gap means you missed something.
  • On a gap, request a fresh snapshot with get_snapshot (or unsubscribe and subscribe again). A repeated subscribe on its own does not resynchronize markets you already follow.
  • Always replace your local book with any snapshot you receive before applying later deltas.
  • Optional conflation (update_interval_ms of 100 or 1000) batches changes; between flushes the public book can lag your own orders and can briefly look crossed.

Rate limits and keep-alive for that connection are in our Kalshi API rate limits and WebSocket guide.

Common order book mistakes

  • Treating the last trade as the price you can get. The last trade can be stale; the price you can trade at now is the bid or the implied ask.
  • Reading the wrong end of the array. The API sorts ascending, so the first entry is the worst bid, not the best.
  • Forgetting to flip the other side. The Yes ask comes from the No bids. Buying Yes "at the Yes bid price" is not possible unless your order rests and someone sells to you.
  • Ignoring size. A tight 1¢ spread with 50 contracts at the top is very different from one with 5,000.
  • Leaving fees out of the break-even. A 78¢ ask is really a ~79.2¢ cost for a taker.
  • Using floats. Fixed-point strings exist to avoid rounding errors; parse them as decimals.

Where DeskBot fits

DeskBot uses proprietary trading logic with customer-selected settings. Its dashboard shows supported market views and app activity. See the current product and support pages for the features and requirements of your release.

Related reading: Kalshi Yes vs No, Kalshi order types, maker vs taker fees, fees and break-even win rate, Kalshi odds and expected value, the Bitcoin 15-minute market explained, API rate limits and WebSocket.

Why does Kalshi's order book only show bids?

Because in a binary market a Yes bid at X is the same order as a No ask at $1.00 − X, and a No bid at Y is a Yes ask at $1.00 − Y. Listing bids on both sides shows every resting order once.

How do I find the price to buy Yes on Kalshi?

Take $1.00 minus the highest No bid. If the best No bid is 22¢, the best price to buy Yes immediately is 78¢, for as many contracts as are listed at that No bid.

How do I calculate the spread?

Yes spread = ($1.00 − best No bid) − best Yes bid. With a 77¢ Yes bid and a 22¢ No bid, the spread is 78¢ − 77¢ = 1¢.

What does the number next to each price mean?

It is the number of contracts resting at that price. It can include fractions because Kalshi reports counts as fixed-point strings.

What is order book depth?

How many contracts you can trade before the price moves to the next level. In the example, only about 219 Yes contracts were available at 78¢; a 500-contract buy averaged about 78.56¢ before fees.

Does Kalshi have market orders?

Every order sent through the API is a limit order. An order priced at or through the best opposite price fills immediately up to the size available; anything left rests in the book unless its time-in-force says otherwise.

How is my place in line decided?

By price-time priority: better prices first, and earlier orders first at the same price. Kalshi's API has a queue-position endpoint that reports how many contracts are ahead of your resting order.

Do I need an API key to read the order book?

Kalshi's orderbook guide shows the REST orderbook endpoint called without authentication. The real-time WebSocket orderbook channel requires an authenticated connection, and placing orders always requires a signed request.

Is DeskBot affiliated with Kalshi?

No. DeskBot is independent software and is not affiliated with, endorsed by or sponsored by Kalshi.

Risk disclaimer: Trading involves risk of loss. Only trade money you can afford to lose. DeskBot does not guarantee profits, returns, win rates or income. The order book shown is a single snapshot from Kalshi's public API at 12:07 PM ET on 2026-10-31 and changes constantly. Kalshi facts in this guide were checked against docs.kalshi.com (Orderbook Responses, Get Market Orderbook, Orderbook Updates WebSocket, Get Order Queue Position) on 2026-10-31; Kalshi can change its rules, fees and limits. DeskBot is not affiliated with Kalshi.

Current product information: Kalshi · Robinhood · Setup and support. Check the relevant product page for current downloads, pricing, renewal and cancellation terms. Desktop and mobile products have separate availability and offers.

Educational content, not financial advice. Trading can lose money. DeskBot does not guarantee profits, returns, win rates or income and is not affiliated with or endorsed by the named exchanges or brokers.