NEW: Live arbitrage across 10+ prediction markets.Arbitrage →
← Index
APISep 26, 2026

Kalshi Paper Trading (2026): Demo Account vs Real Order Books

Kalshi Paper Trading (2026): Demo Account vs Real Order Books

The Short Answer

Kalshi's paper trading option is its demo environment at demo.kalshi.co: a separate exchange with mock funds, its own API hosts and its own credentials. Kalshi notes that demo prices and market behaviour may not reflect real markets, which makes the demo the right place to test authentication and order flow. To practice against Kalshi's real order books instead, Predictefy's paper trading fills simulated orders against the live Kalshi book, with the same order parameters as live trading and no Kalshi account required. It is metered at 0 credits and included on every plan, including Free.

Key Takeaways

  • Kalshi's demo runs at demo.kalshi.co, with its API at external-api.demo.kalshi.co. Demo and production keys are separate.
  • The demo is its own exchange, so its prices, liquidity and fills can differ from real Kalshi markets.
  • Predictefy paper trading fills against Kalshi's live order book from a simulated USD balance.
  • Paper orders take the same parameters as live ones: venue, market, outcome, side, limit price, size and time in force.
  • Paper trading costs 0 credits, and the Free plan holds up to 10 open paper orders at a time.

Does Kalshi have paper trading?

Kalshi's answer is a demo environment. It runs on mock funds at https://demo.kalshi.co/, with its own markets, accounts and API. For safety, credentials are not shared between the demo and production, so nothing you do there can touch a real balance.

Getting started takes three steps:

  1. Create a demo account at demo.kalshi.co, following Kalshi's step-by-step tutorial in its API documentation.
  2. Generate an API key inside the demo account. A production key will not work there, and a demo key will not work in production.
  3. Point your client at the demo hosts: https://external-api.demo.kalshi.co/trade-api/v2 for REST and wss://external-api-ws.demo.kalshi.co/trade-api/ws/v2 for WebSockets.
from kalshi_python_sync import Configuration, KalshiClient

config = Configuration(host="https://external-api.demo.kalshi.co/trade-api/v2")
config.api_key_id = "YOUR_DEMO_API_KEY_ID"
with open("kalshi-demo-private-key.pem") as f:
    config.private_key_pem = f.read()

client = KalshiClient(config)
print(client.get_balance())

The only differences from production are the host and the key. Everything else, from request signing to the order methods, is identical, so code tested here moves to production by changing two values. The client itself is covered in the Kalshi SDK guide, and creating keys in how to get a Kalshi API key.

What is the Kalshi demo good for?

The demo is built for testing integrations, and it is excellent at that:

  • Authentication. RSA-PSS request signing, key handling and clock issues all show up here first.
  • The order lifecycle. Creating, amending and cancelling orders, and handling every rejection your code needs to survive.
  • WebSockets. Subscriptions, message handling and reconnect logic.

It is less suited to judging a strategy. Kalshi's own documentation notes that the price and behaviour of demo markets may not reflect those in real markets, because the demo is a separate exchange with its own participants and its own liquidity. A strategy that fills beautifully in the demo has not yet met Kalshi's real order book.

How do you paper trade against Kalshi's real order books?

This is the gap Predictefy's paper trading fills. Every account gets a simulated USD balance and order routes that mirror the live ones, and orders are filled by a paper engine against the real order books Predictefy already streams, Kalshi's included. Nothing reaches the venue: no order is sent, no balance moves, and you do not need a Kalshi account at all.

You need one thing: a Predictefy API key with the trade scope, enabled by ticking "Allow this key to place trades" when you create it.

import { Predictefy } from '@predictefy/sdk';
import { randomUUID } from 'node:crypto';

const client = new Predictefy({ apiKey: process.env.PREDICTEFY_API_KEY });

const [market] = await client.kalshi.fetchMarkets({ query: 'fed', status: 'active', limit: 1 });
const yes = market.outcomes.find((o) => o.side === 'yes') ?? market.outcomes[0];

const order = await client.placePaperOrder({
  venue: 'kalshi',
  marketId: market.marketId,
  outcomeId: yes.outcomeId,
  side: 'buy',
  price: 0.4,
  size: 100,
  tif: 'GTC',
  idempotencyKey: randomUUID(),
});

const working = await client.listPaperOrders({ status: 'open' });
const portfolio = await client.paperPortfolio();

Prices are probabilities between 0 and 1 on the market's tick grid, so 0.4 means 40 cents. A buy reserves price times size, plus the modelled fee, from your simulated cash. The idempotency key makes retries safe: generate it once per intended order and resend the same key on a retry, and you get the stored order back instead of a duplicate.

The Python client takes the same parameters:

import uuid
from predictefy import Predictefy

client = Predictefy(api_key="pk_live_YOUR_KEY")

order = client.place_paper_order(
    "kalshi", "MARKET_ID", "OUTCOME_ID", "buy", 0.40, 100,
    tif="GTC",
    idempotency_key=str(uuid.uuid4()),
)
positions = client.paper_positions()
portfolio = client.paper_portfolio()

How are paper fills decided?

Fills come from one rule set, shared by paper trading and Predictefy's backtester, and it is deliberately conservative. When the engine cannot be sure a fill would have happened, it does not fill:

  • Marketable orders walk the book. A buy at or above the best ask takes each displayed level at that level's own price, stopping at your limit.
  • Resting orders need a real cross. Once your order rests, the market has to trade strictly through your price, not just touch it.
  • No order takes more than a quarter of a level on any single book update.
  • Fees are charged on every fill from verified venue fee schedules, at that fill's price and size.
  • Stale books are ignored. Nothing fills against a book older than 30 seconds; the order waits for a fresh one.
  • Time in force behaves as it does live. GTC rests, IOC takes what it can and cancels the rest, and FOK fills completely or not at all.

The result is simulated PnL that errs on the cautious side, which is what you want before real money is involved. Positions are marked from Predictefy's catalog prices, and the simulation can be restarted at any time while keeping every past fill as history.

Kalshi demo or Predictefy paper trading?

Kalshi demoPredictefy paper trading
Prices and liquidityA separate demo exchangeKalshi's live order book
MoneyMock fundsA simulated USD balance you can reset
What you needA Kalshi demo account and demo API keyA Predictefy API key with trade scope
VenuesKalshiKalshi, Polymarket and other venues with live books
Real money at riskNone, mock fundsNone, and 0 credits on every plan including Free
Best forTesting authentication, signing and order flowTesting a strategy against real prices and depth

Most traders use both: the demo to prove the plumbing, and paper trading on real books to prove the strategy. The same paper account also covers Polymarket paper trading, so a cross-venue idea can be tested end to end in one place.

How many paper orders can you run?

Paper trading is included on every Predictefy plan, and the only per-plan difference is how many orders can be open at once. Fills, cancels and account resets are unlimited.

PlanOpen paper orders at once
FreeUp to 10
BuilderUp to 50
ProUp to 200
EnterpriseNo cap

How do you move from paper to live?

On Kalshi directly, switch your client to the production host and a production key, and place orders with the V2 order methods described in the Kalshi SDK guide. Through Predictefy, the same order parameters go to live execution, where orders are built server side, signed in your own process and relayed, so your keys never leave your control. For a complete bot built on these pieces, see how to build a Kalshi trading bot, and to understand what your orders will meet, the Kalshi order book API.

Frequently Asked Questions

Does Kalshi have paper trading?

Kalshi offers a demo environment at demo.kalshi.co that runs on mock funds, with its own API hosts and separate credentials. Kalshi notes demo prices may not reflect real markets. To paper trade against Kalshi's live order books instead, Predictefy's paper trading simulates fills on the real book at 0 credits, on every plan.

How do you use the Kalshi API in the demo environment?

Create a demo account and an API key inside it, then point your client at https://external-api.demo.kalshi.co/trade-api/v2 for REST and wss://external-api-ws.demo.kalshi.co/trade-api/ws/v2 for WebSockets. Request signing and endpoints match production, so moving later only means changing the host and key. Demo keys work only against the demo hosts.

Are Kalshi demo prices the same as real prices?

Not necessarily. The demo is a separate exchange with its own participants and liquidity, and Kalshi's documentation notes that demo prices and market behaviour may not reflect real markets. That makes the demo reliable for testing code, but not for judging whether a strategy would profit on the real exchange.

How do you paper trade Kalshi with real order books?

Use Predictefy's paper trading. Place an order with venue set to kalshi, a market, an outcome, a side, a limit price, a size and a time in force. The paper engine fills it against Kalshi's live order book from a simulated USD balance, walking real depth, with no Kalshi account needed.

Does Predictefy paper trading cost anything?

No. Paper trading is metered at 0 credits and included on every plan, including Free. The only difference between plans is how many paper orders can be open at once: up to 10 on Free, 50 on Builder, 200 on Pro and no cap on Enterprise. Fills, cancels and resets are unlimited.