Short answer: Kalshi's exchange schedule is open around the clock every day except for one planned gap: every Thursday from 3:00 AM to 5:00 AM ET, Kalshi runs scheduled maintenance and trading is paused. During a pause you cannot place or amend orders. Resting orders stay on the book unless they were placed with cancel_order_on_pause. A program can check whether trading is open right now with GET /exchange/status and read the weekly hours with GET /exchange/schedule. Neither call needs a login. This guide covers how the pause types differ, what the two endpoints return, and how a 15-minute trading bot should handle the Thursday window.
Everything below was checked against Kalshi's developer documentation (docs.kalshi.com: "Maintenance and Pauses", "Get Exchange Status" and "Get Exchange Schedule") and against live responses from Kalshi's public API on October 29, 2026. Kalshi can change its schedule, so treat the API, not this page, as the source of truth when you write code.
Kalshi trading hours in one table
On October 29, 2026, the public GET /exchange/schedule endpoint returned one weekly schedule, effective from December 1, 2024. All times are Eastern Time:
| Day | Sessions returned by the API | What it means |
|---|---|---|
| Monday, Tuesday, Wednesday | 00:00 to 00:00 | Open all day |
| Thursday | 00:00 to 03:00, then 05:00 to 00:00 | Open all day except 3:00 to 5:00 AM ET |
| Friday, Saturday, Sunday | 00:00 to 00:00 | Open all day |
The schedule format allows a day to hold several sessions, which is exactly how the Thursday gap shows up: two sessions with a hole between them. An "open all day" session is written as an open time and a close time of 00:00. If you parse this yourself, handle that case on purpose, because a naive "close after open" check reads 00:00 to 00:00 as a zero-length session.
Individual markets still have their own open and close times. A Kalshi 15-minute crypto market closes on its own 15-minute clock whatever the exchange schedule says. The exchange schedule tells you when trading is possible at all, and the market's own fields tell you when that particular contract trades. For how the 15-minute clock works, see Kalshi 15-minute market close times and settlement.
The Thursday maintenance window
Kalshi's documentation states that every Thursday from 3:00 AM to 5:00 AM ET it runs scheduled maintenance, and that a trading pause is in effect during that window. In rare cases, more intensive maintenance needs a full exchange pause instead. Kalshi also tells API clients to expect session disconnections during the window and to reconnect after 5:00 AM ET.
For a 15-minute crypto trader that is eight 15-minute windows a week where no new orders can go in: 3:00, 3:15, 3:30, 3:45, 4:00, 4:15, 4:30 and 4:45 AM ET on Thursday. Over a full week of round-the-clock 15-minute markets (7 × 96 = 672 windows), that is about 1.2% of windows. It is small, but a bot that does not expect it will log errors, retry orders that cannot be accepted, or come back at 5:00 AM with a dropped WebSocket and stale data.
Trading pause vs exchange pause
Kalshi describes two kinds of pause. The difference matters most for one thing: whether you can still cancel.
| Trading pause | Exchange pause | |
|---|---|---|
| When | Every Thursday 3:00 to 5:00 AM ET | Rare: intensive scheduled maintenance, or unscheduled during a temporary outage |
| Place or amend orders | No | No |
| Cancel orders | Yes | No |
| Resting orders | Stay on the book unless placed with cancel-on-pause | Stay on the book unless placed with cancel-on-pause |
Kalshi's docs add that an exchange pause outside the scheduled Thursday window indicates a temporary outage of the Kalshi exchange. In that case you cannot even cancel, so any order you leave resting is out of your hands until the exchange comes back.
What happens to resting orders: cancel_order_on_pause
By default, an order resting on the book when a pause begins stays there and becomes live again when trading reopens. That can be a surprise. A limit order you placed at 2:58 AM on Thursday, priced for the market as it stood then, is still live at 5:00 AM, when the price may have moved a long way.
Kalshi lets you choose the other behaviour per order. Set cancel_order_on_pause to true on the REST create-order request, or tag 21006 (CancelOrderOnPause) on a FIX New Order Single, and the order is cancelled automatically when either kind of pause begins. The default is false.
Which setting fits depends on the order. A resting order meant to sit for days may be fine to keep. An order priced against a fast 15-minute crypto market is usually only right for the minute it was placed, so cancelling it on a pause is the more conservative choice. The flag is set at creation, so decide in code before the order goes out rather than trying to clean up when the pause starts. In an exchange pause you will not be able to cancel at all.
Kalshi's order groups are a related tool: they cap how many contracts can fill across a set of orders in a rolling window. We cover both in Kalshi order groups and trading pauses.
Checking status from code: GET /exchange/status
GET /exchange/status is a public endpoint, so it needs no API key. On October 29, 2026 it returned these top-level fields (some values trimmed):
What each field means, per Kalshi's API reference:
-
trading_active: true when Kalshi is permitting trading. It is false outside exchange hours, and Kalshi reserves the right to pause at any time if it detects issues. This is the field a trading bot cares about most. -
exchange_active: false only when the core exchange is taking no state changes at all (trading, new users, transfers). It is true unless Kalshi is under maintenance. -
exchange_estimated_resume_time: the estimated end of the current maintenance. Kalshi notes that it is not guaranteed and can be extended. It may be null. -
intra_exchange_transfers_active: whether transfers inside the exchange are currently allowed. -
exchange_index_statuses: the same flags for each exchange shard. The top-level fields reflect the default index (0). The live response listed a "Crypto & Commodities" index separately, which means the 15-minute crypto markets can in principle be paused while another shard is open, or the other way round. A bot that only trades crypto should read the crypto index'strading_active, not only the top-level flag. Kalshi says this array can be absent when the per-index breakdown is unavailable, so fall back to the top-level fields.
Reading the schedule from code: GET /exchange/schedule
GET /exchange/schedule is also public. It returns a schedule object with two arrays:
-
standard_hours: a list of weekly schedules, each with astart_timeandend_timefor when it applies, and one array per weekday of sessions (open_time,close_time, as HH:MM in ET). Kalshi's reference says that outside these times trading is unavailable. -
maintenance_windows: scheduled windows with astart_datetimeandend_datetime, during which the exchange may be unavailable. On October 29, 2026 this list was empty. The recurring Thursday gap appears instandard_hoursinstead.
Because a pause can happen without warning, the schedule tells you when to expect trading, and the status endpoint tells you whether trading is open. A careful bot uses both: the schedule to plan (no new entries into a market whose window crosses 3:00 AM Thursday, for example), and the status check before it acts.
How a 15-minute bot should handle pauses: a checklist
These are mechanics, not trading advice. They follow from the documented behaviour above.
-
Check
trading_activebefore placing orders. If it is false, do not send orders and do not retry them in a loop. Orders cannot be placed during a pause, and every request you send still counts against your rate-limit budget (see Kalshi API rate limits and WebSockets). - Poll status gently. Status rarely changes. Checking every several seconds is plenty, and Kalshi's public API is shared with your other traffic.
-
Decide cancel-on-pause per order. Short-lived orders priced against a 15-minute market are good candidates for
cancel_order_on_pause: true. - Expect the WebSocket to drop on Thursday. Reconnect with backoff after 5:00 AM ET, resubscribe, and rebuild your order book state from fresh snapshots rather than trusting what you held before the pause.
- Reconcile after any pause. Re-read your resting orders, positions and fills (see Kalshi API balance, positions and fills) before trading again, so the bot's view matches the exchange.
-
Treat an unscheduled exchange pause as an outage. You cannot cancel during it. Log it, alert yourself, and wait for
exchange_activeto return to true. - Test it on demo first. Kalshi runs a separate demo environment with the same API shape. See Kalshi demo environment.
A minimal status check in Python
Matching on the description text is a convenience for a sketch. In real code, look up the index once, store its number, and handle network errors (the endpoint can return 500, 503 or 504). For signing and authenticated calls, see Kalshi API keys and authentication and the Kalshi API tutorial in Python.
What are Kalshi's trading hours?
Kalshi's API schedule shows the exchange open all day, every day, except Thursday from 3:00 AM to 5:00 AM ET, when scheduled maintenance pauses trading. Individual markets still have their own open and close times.
When is Kalshi maintenance?
Every Thursday from 3:00 AM to 5:00 AM ET. A trading pause is in effect. Rarely, intensive maintenance needs a full exchange pause. Expect API sessions to disconnect and reconnect after 5:00 AM ET.
Can I cancel orders while Kalshi is paused?
During a trading pause, yes. During an exchange pause, no. In neither can you place or amend orders.
What happens to my resting orders during maintenance?
They stay on the book and become live again when trading reopens, unless you placed them with cancel_order_on_pause set to true (FIX tag 21006). Those are cancelled automatically when the pause begins.
How do I check if Kalshi trading is open from the API?
Call GET /exchange/status, which needs no login, and read trading_active. For a crypto-only bot, read the Crypto & Commodities entry in exchange_index_statuses when it is present.
How do I get Kalshi's schedule from the API?
Call GET /exchange/schedule, which needs no login. It returns standard_hours, weekly sessions in ET with possibly several per day, and maintenance_windows, each with a start and end date-time.
Can Kalshi pause trading outside the Thursday window?
Yes. Kalshi reserves the right to pause at any time if it detects issues, and an exchange pause outside the Thursday window indicates a temporary outage. Check status before placing orders rather than relying on the clock.
Do Kalshi's 15-minute crypto markets run during maintenance?
No new orders can be placed or amended from 3:00 to 5:00 AM ET on Thursdays, which covers eight 15-minute windows. Check each market's own times and the status endpoint for the exact picture.
Trading can lose money. Nothing here is a promise of profits, returns or win rates, and it is not financial advice. DeskBot is not affiliated with, endorsed by or sponsored by Kalshi. Kalshi can change its hours and maintenance schedule; confirm them at docs.kalshi.com and through the API before you rely on them.
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.
