How Kalshi Markets Settle: Lifecycle, BRTI and Payouts

Every Kalshi contract ends the same way: it pays $1 or it pays nothing. Between the last trade and the money landing in your balance, though, a market passes through several states, and each one changes what you and your bot can do. This guide follows a market from creation to payout. It uses one real 15-minute Bitcoin market as the example and includes the fee math that decides whether a winning trade actually made money.

The short version

  • A Kalshi market moves through initialized → active → closed → determined → finalized. Two side states, inactive and disputed/amended, cover pauses and challenged results.
  • When a market settles Yes, each Yes contract pays $1. When it settles No, each No contract pays $1. Only your net position is settled.
  • Kalshi charges no settlement fee on a simple yes/no result. You pay the trading fee when you enter, not when the market settles.
  • The 15-minute crypto markets settle on CF Benchmarks' Real Time Index (RTI). For Bitcoin that is the BRTI, averaged over the 60 seconds before the window closes. They do not use Coinbase, Binance or the price you see on Google.
  • Once close_time passes, Kalshi rejects every order operation, including cancels.

The market lifecycle, state by state

Kalshi's API returns a status on every market. Per Kalshi's Market Lifecycle documentation, these are the states:

Status What it means Can you trade?
initialized Created, waiting for open_time No
active Open for trading Yes
inactive Paused by the exchange, not closed No
closed Past close_time, waiting for the result No, not even cancels
determined Result is known and the settlement timer is running No
disputed The result has been challenged and may be re-determined No
amended Re-determined after a dispute; the settlement timer restarts No
finalized Paid out. This is the terminal state No

One detail catches a lot of people writing their first script. The filter values on GET /markets?status= do not match the status names. You filter with unopened, open, paused, closed and settled, but a settled market reports its status as finalized. If your code waits for status == "settled", it will wait forever.

Which transitions you can see and which you can't

Some transitions are driven by the clock and produce no WebSocket message. A market goes from initialized to active when open_time passes, and Kalshi's docs state there is no activated event for that step. A market goes to closed when close_time passes, also without a message.

Exchange actions do produce events on the market_lifecycle_v2 channel: deactivated when a market is paused, activated when it resumes, close_date_updated when the close time moves, determined when the result is set and settled when payouts are processed. A bot that listens to this channel learns the result seconds after it exists instead of polling for it.

Two of these events matter more than they look:

  • Reactivation cancels resting orders. When a paused market is reactivated, Kalshi cancels all resting orders on it. If your bot had quotes on the book before a pause, they are gone afterwards. It has to notice and re-quote, or accept that it is out of the market.
  • Close time can move earlier. Markets with can_close_early set to true can close ahead of schedule. The 15-minute Bitcoin market below has that flag. Do not assume you have until the printed time to cancel.

What happens at close

Kalshi's docs are direct about this: once close_time passes, all order operations are rejected with MARKET_INACTIVE, and that includes cancellations. Resting orders are canceled shortly after close, and the cancellations show up on your normal user channels.

In practice, any decision about an open order has to be made before the close. A bot that tries to "clean up" its orders at the bell will get a pile of errors back. That is mostly harmless, because the exchange cancels them anyway, but your logs should not treat those errors as a fault. If you want orders to stop earlier than the close, give them an expiration_time when you place them.

Determination and the settlement timer

After the market closes and the outcome is known, Kalshi sets result to yes, no or scalar, and the market becomes determined. A timer then runs for settlement_timer_seconds, which is shown on the market's REST response. During that window the result can still be disputed. When the timer ends, positions are paid out, the status becomes finalized and settlement_ts is filled in.

How long this takes depends on the market. A sports or economics market can wait on a data release or a review. The short-dated crypto markets are much faster, as the next example shows.

A real example: one 15-minute Bitcoin market

Here is the public data for KXBTC15M-26OCT241800-00, the Bitcoin up/down market for the window that ended at 6:00 PM EDT on October 24, 2026, pulled from Kalshi's public API while writing this article:

  • Rule: the market resolves Yes if the simple average of the 60 seconds of CF Benchmarks' BRTI before 6:00 PM is at least the 60-second average before 5:45 PM.
  • Start reference (floor_strike): 80,275.95
  • Settlement value (expiration_value): 80,300.69
  • Result: Yes, because the end average was higher than the start average
  • Close time: 22:00:00 UTC. Settlement timestamp: 22:00:02.45 UTC
  • settlement_timer_seconds: 1

So the whole path from close to paid took under three seconds. Bitcoin finished about $25 above the start, which is less than a tenth of a percent. On a 15-minute market, small moves near the line are common, and they are where the details of the settlement rule matter most.

Why your chart can disagree with the result

The market's secondary rule says plainly that not all crypto price data is the same, and that the settlement price comes from CF Benchmarks' RTI, not from Google or a single exchange. At the last minute before expiry, 60 RTI prices are collected and averaged, and the result is rounded to two decimals.

That has three practical consequences:

  1. A spike in the last second barely counts. One second is 1/60th of the average. A wick on your exchange chart at 5:59:59 moves the settlement value very little.
  2. The start reference is an average too. The line you are trading against is the 60-second BRTI average before the window opened, not the price at the exact open.
  3. Exchange prices drift from the index. The BRTI is built from several exchanges. A single venue's price can sit a few dollars away from it, which is enough to flip a close market. If you build your own signals, compare them with the index rather than one exchange.

How the payout works, with the fees included

Per Kalshi's Market Settlement documentation, a Yes result pays Yes holders $1 per contract and a No result pays No holders $1 per contract. There is no settlement fee for a simple yes/no determination. The cost that matters is the trading fee you paid on the way in.

The 15-minute crypto series use Kalshi's quadratic fee. For a taker order it is 0.07 × contracts × price × (1 − price), and the trade fee is rounded up to the nearest $0.000001. Kalshi's Fee Rounding page explains how your balance is then aligned to $0.0001 for direct members or $0.01 for members who clear through an FCM.

Worked example: you buy 10 Yes contracts at 56¢ as a taker.

  • Cost of contracts: 10 × $0.56 = $5.60
  • Fee: 0.07 × 10 × 0.56 × 0.44 = $0.17248, which comes to $0.1725 on a direct account
  • Total paid: about $5.7725
  • If the market settles Yes: you receive $10.00, for a net of +$4.2275
  • If it settles No: you receive $0, for a net of −$5.7725

Your break-even win rate is the total cost divided by the payout: $5.7725 ÷ $10 ≈ 57.7%. The 56¢ price on the screen makes break-even look like 56%, but the fee adds about 1.7 percentage points. The fee formula peaks at 50¢ and shrinks toward the extremes, yet it never goes away. At 90¢, the fee on 10 contracts is $0.063, which moves break-even from 90% to about 90.6%. Your settings should account for that before an order is placed.

Netting: only the net position is paid

Kalshi settles your net position. If you hold 10 Yes and buy 4 No in the same market, you end with 6 Yes, not 10 Yes and 4 No. Holding both sides at once is not possible, so a bot cannot "hedge" by buying both Yes and No in the same market. It just closes part of its own position, paying fees each time.

Reading your settlements from the API

For records, GET /portfolio/settlements returns one row per settled market. The fields include market_result, your yes_count_fp and no_count_fp, the revenue paid, fee_cost and settled_time. Older settlements move into the historical data set over time. Kalshi's docs say archived positions come from GET /historical/positions, which has different fields, so a long-running tracker should read both.

GET /portfolio/positions returns unsettled positions by default. Pass settlement_status=settled or all to include positions that have settled but have not been archived yet.

A sensible check for any automated setup is to reconcile each settlement row against the trades your bot recorded. Do contract counts match? Does revenue equal the count times $1 on a win? Does your fee estimate agree with fee_cost? A mismatch usually points to a bug in how the bot records fills, not to a problem with the exchange.

Settlement floors: a feature that is not live yet

Kalshi's docs describe settlement bounds for some scalar markets. A floor would pay Yes holders part of the payout early, once part of the outcome is certain. The docs say floors are not live yet and give no launch date. Markets carry a settlement_bounds_type of default or floor. The binary 15-minute crypto markets settle at $1 or $0 and are not where this applies. A bot that reads general market data should still not assume every market is a plain binary.

What this means for an automated setup

  • Make every decision before close. After close you cannot cancel or change anything.
  • Watch lifecycle events rather than polling. determined and settled arrive seconds after close on the 15-minute markets.
  • Handle pauses. A reactivated market has no resting orders left.
  • Price in the fee. The break-even price is the contract price plus the fee, not the contract price alone.
  • Use the index, not one exchange. The BRTI is the only number that settles the market.

DeskBot is a trading assistant for Kalshi's short-dated crypto markets. It reads the lifecycle and settlement data described above, records every fill against the settlement it ends in, and shows the fee and break-even math before it trades. You choose the settings and stay in control of whether it places orders and how much it can spend. You can try DeskBot for $1: the first month is $1, then $19.99 a month, cancel anytime. Trading can lose money, and DeskBot does not promise profits.

FAQ

How long does Kalshi take to settle a market?

It depends on the market. Kalshi's docs say markets usually settle shortly after expiration, but timing varies with the market type, the data source and any manual review. The 15-minute Bitcoin market in this article was paid about 2.5 seconds after close.

What price does Kalshi use to settle Bitcoin 15-minute markets?

CF Benchmarks' Bitcoin Real Time Index (BRTI). The settlement value is the simple average of the 60 BRTI prices in the last minute before the window closes, compared with the same 60-second average before the window opened.

Does Kalshi charge a fee at settlement?

Not for a simple yes/no result. Kalshi's docs say settlement fees are zero for yes/no determinations and may only apply to sub-cent scalar settlements. You pay the trading fee when your order fills.

Can I cancel an order after a Kalshi market closes?

No. After close_time, every order operation, including cancel, is rejected with MARKET_INACTIVE. Kalshi cancels resting orders itself shortly after close.

Why does the API show "finalized" instead of "settled"?

In REST, a settled market ends with the status finalized. "settled" is the filter value you pass to GET /markets?status= and the name of the WebSocket event. It is never the status itself.

Can a Kalshi result be changed?

Yes, in limited cases. During the settlement timer a result can be disputed. A disputed market may be re-determined, which moves it to amended and restarts the timer.

What happens if I hold Yes and No in the same market?

You can't hold both. Kalshi nets them, so buying No while you hold Yes reduces your Yes position. Only the net position is settled.

Risk: Trading on Kalshi involves risk, and you can lose money. There are no guaranteed results, and past or paper results do not predict future results. DeskBot is independent software and is not affiliated with or endorsed by Kalshi. Lifecycle states, settlement rules, fee rounding and settlement-bound details described here came from docs.kalshi.com (Market Lifecycle, Market Settlement, Settlement Bounds, Fee Rounding, Get Settlements), and the market example came from Kalshi's public market API, all checked on October 24, 2026. Exchange rules change, so check the current docs before you rely on any detail.