Skip to main content
You can trade prediction market contracts on Kalshi, taking positions on real-world events ranging from financial markets to sports outcomes.
Prediction markets use a pay-per-trade model. When you buy contracts, USDC is transferred from your wallet. When you sell, proceeds are sent directly back to your wallet as USDC.

How Kalshi markets work

Each Kalshi market resolves to either yes or no at a defined settlement date. Contracts are priced in cents, from 1 to 99, representing the market’s implied probability of the yes outcome (e.g., a price of 65 means the market assigns a 65% probability to yes). If you hold the winning side at settlement, each contract pays out $1.00. Markets are organized in a hierarchy:
  • Series — a topic area (e.g., Bitcoin price)
  • Events — a specific occurrence within a series
  • Markets — individual yes/no questions within an event

Browse categories

View all available market categories and their associated tags:
curl https://api.useknot.xyz/predictions/categories \
  -H "Authorization: Bearer <token>"

Sports filters

Get sports-specific filters including available competitions and scopes:
curl https://api.useknot.xyz/predictions/sports \
  -H "Authorization: Bearer <token>"

View markets

List prediction markets with optional filters:
curl "https://api.useknot.xyz/predictions/markets?status=open&limit=20&tradeable_only=true" \
  -H "Authorization: Bearer <token>"

Query parameters

status
string
Filter by market status: unopened, open, closed, or settled.
event_ticker
string
Filter markets by event ticker.
series_ticker
string
Filter markets by series ticker.
limit
number
default:"50"
Maximum number of markets to return.
cursor
string
Pagination cursor returned from a previous response.
tradeable_only
boolean
When true, only markets with active liquidity are returned.

Response

{
  "status": true,
  "data": {
    "markets": [
      {
        "ticker": "KXBTC-26MAR31-T100000",
        "eventTicker": "KXBTC",
        "title": "Bitcoin above $100,000?",
        "subtitle": "Will BTC be at or above $100,000 on March 31?",
        "status": "open",
        "yesBid": 65,
        "yesAsk": 67,
        "volume24h": 125000
      }
    ],
    "cursor": "next-page-cursor"
  }
}
data
object

Get market details

Retrieve full details for a specific market by its ticker:
curl https://api.useknot.xyz/predictions/markets/KXBTC-26MAR31-T100000 \
  -H "Authorization: Bearer <token>"

Get market orderbook

View the current order book for a market:
curl "https://api.useknot.xyz/predictions/markets/KXBTC-26MAR31-T100000/orderbook?depth=10" \
  -H "Authorization: Bearer <token>"

View events

Events are groups of related markets. Browse open events:
curl "https://api.useknot.xyz/predictions/events?status=open&limit=20" \
  -H "Authorization: Bearer <token>"

Get event details

curl https://api.useknot.xyz/predictions/events/KXBTC \
  -H "Authorization: Bearer <token>"

View series

Browse series, optionally filtered by category:
curl "https://api.useknot.xyz/predictions/series?category=Crypto&limit=100" \
  -H "Authorization: Bearer <token>"

Get series details

curl https://api.useknot.xyz/predictions/series/KXBTC \
  -H "Authorization: Bearer <token>"

View milestones

Milestones represent scheduled real-world events such as games or matches:
curl "https://api.useknot.xyz/predictions/milestones?category=Sports&competition=Champions%20League&limit=50" \
  -H "Authorization: Bearer <token>"

Get milestone details

curl https://api.useknot.xyz/predictions/milestones/milestone-id \
  -H "Authorization: Bearer <token>"

Check balance

View your current prediction market balance:
curl https://api.useknot.xyz/predictions/balance \
  -H "Authorization: Bearer <token>"

Buy contracts

Purchase contracts on a market. USDC is transferred from your wallet to fund the purchase:
curl -X POST https://api.useknot.xyz/predictions/buy \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "ticker": "KXBTC-26MAR31-T100000",
    "side": "yes",
    "count": 10
  }'

Request parameters

ticker
string
required
The market ticker to trade (e.g., KXBTC-26MAR31-T100000).
side
string
required
The contract side to buy: yes or no.
count
number
required
Number of contracts to purchase.

Response

{
  "status": true,
  "data": {
    "orderId": "order-uuid",
    "ticker": "KXBTC-26MAR31-T100000",
    "side": "yes",
    "count": 10,
    "pricePerContract": 65,
    "totalCostDollars": 6.50,
    "feeDollars": 0.17,
    "status": "filled"
  }
}
data
object

Sell contracts

Sell contracts you hold. Proceeds are sent directly to your wallet as USDC:
curl -X POST https://api.useknot.xyz/predictions/sell \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "ticker": "KXBTC-26MAR31-T100000",
    "side": "yes",
    "count": 5
  }'

Request parameters

ticker
string
required
The market ticker of the position to sell.
side
string
required
The side to sell: yes or no.
count
number
required
Number of contracts to sell.

View positions

List your current prediction market positions:
curl "https://api.useknot.xyz/predictions/positions?settled=false" \
  -H "Authorization: Bearer <token>"

Query parameters

settled
boolean
Filter by settlement status. Pass false to see open positions or true to see settled ones.

View order history

Retrieve past orders, optionally filtered by market:
curl "https://api.useknot.xyz/predictions/orders?ticker=KXBTC-26MAR31-T100000&limit=50" \
  -H "Authorization: Bearer <token>"

Query parameters

ticker
string
Filter orders by market ticker.
limit
number
default:"50"
Maximum number of orders to return.

Withdraw funds

Withdraw your prediction market balance back to your wallet as USDC:
curl -X POST https://api.useknot.xyz/predictions/withdraw \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"amountDollars": 50.00}'
amountDollars
number
required
Amount to withdraw in USD.

Contract settlement

At market close, Kalshi settles each contract based on the real-world outcome:
  • Winning contracts — each contract pays out $1.00
  • Losing contracts — expire worthless
Settled proceeds are automatically credited to your prediction market balance. Use the withdraw endpoint to move settled funds back to your wallet.

Policy constraints

Prediction markets must be enabled in your agent’s policy. Check allowPredictionMarkets in your policy settings if you receive a 403 error.