# Kalshi Event Markets API
> Live market data from Kalshi, the CFTC-regulated US event-contract exchange, served from its public trade API. Kalshi lists yes/no contracts that settle on real-world outcomes — elections, economics, Federal Reserve decisions, weather, sports and world events — and the executed price is the market-implied probability of that outcome. The trades endpoint returns the recent public trade tape: the executed price (as cents and as a 0-1 probability), the size, the taker side and the time — the live pulse of what is actually trading. The events endpoint lists the events (the questions) that group markets, with their category and series. The markets endpoint is the contract directory — every tradable market with its ticker, the yes outcome it settles on, its status and open/close times — filterable by event, series or status. This is a regulated real-money event-contract venue — live implied probabilities and order flow — distinct from the play-money (Manifold), political (PredictIt) and crypto (Polymarket) prediction-market APIs in the catalogue. Live order-book snapshots are gated behind authentication upstream, so prices are sourced from the public trade tape. Live, no key on the upstream, nothing stored.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/kalshi-api/..."
```

## Pricing
- **Free** (Free) — 21,000 calls/Mo, 5 req/s
- **Starter** ($8/Mo) — 245,000 calls/Mo, 15 req/s
- **Pro** ($24/Mo) — 1,050,000 calls/Mo, 40 req/s
- **Scale** ($56/Mo) — 3,700,000 calls/Mo, 100 req/s

## Endpoints

### Markets

#### `GET /v1/events` — Events (questions) grouping markets

**Parameters:**
- `status` (query, optional, string) — open / closed / settled Example: `open`
- `series_ticker` (query, optional, string) — Filter by series
- `limit` (query, optional, string) — Max events (max 200) Example: `50`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/kalshi-api/v1/events?status=open&limit=50"
```

**Response:**
```json
{
    "data": {
        "count": 50,
        "events": [
            {
                "title": "Will Elon Musk visit Mars in his lifetime?",
                "category": "World",
                "event_ticker": "KXELONMARS-99",
                "series_ticker": "KXELONMARS",
                "mutually_exclusive": false
            },
            {
                "title": "Who will the next Pope be?",
                "category": "Elections",
                "event_ticker": "KXNEWPOPE-70",
                "series_ticker": "KXNEWPOPE",
                "mutually_exclusive": true
            },
            {
                "title": "Will the world pass 2 degrees Celsius over pre-industrial levels before 2050?",
                "category": "Climate and Weather",
                "event_ticker": "KXWARMING-50",
                "series_ticker": "KXWARMING",
                "mutually_exclusive": false
            },
            {
                "title": "Will a human land on Mars before California starts high-speed rail?",
                "category": "Science and Technology",
                "event_ticker": "KXMARSVRAIL-50",
                "series_ticker": "KXMARSVRAIL",
                "mutually_exclusive": false
            },
            {
                "title": "Will a supervolcano erupt before 2050?",
                "category": "Climate and Weather",
                "event_ticker": "KXERUPTSUPER-0",
                "series_ticker": "KXERUPTSUPER",
                "mutually_ex
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/markets` — Contract directory

**Parameters:**
- `status` (query, optional, string) — open / closed / settled Example: `open`
- `event_ticker` (query, optional, string) — Filter by event
- `series_ticker` (query, optional, string) — Filter by series
- `limit` (query, optional, string) — Max markets (max 200) Example: `50`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/kalshi-api/v1/markets?status=open&limit=50"
```

**Response:**
```json
{
    "data": {
        "count": 50,
        "source": "Kalshi",
        "markets": [
            {
                "title": "yes Korea Republic,yes Canada,yes USA,yes Switzerland,yes Germany,yes Spain,yes Argentina,yes Portugal,yes Colombia,yes Brazil,yes Ecuador,yes Belgium,yes Japan,yes France,yes Switzerland",
                "status": "active",
                "ticker": "KXMVESPORTSMULTIGAMEEXTENDED-S2026E0FFC9EFB95-D066B69639D",
                "open_time": "2026-06-12T01:41:11Z",
                "close_time": "2026-06-26T02:00:00Z",
                "event_ticker": "KXMVESPORTSMULTIGAMEEXTENDED-S2026E0FFC9EFB95",
                "yes_sub_title": "yes Korea Republic,yes Canada,yes USA,yes Switzerland,yes Germany,yes Spain,yes Argentina,yes Portugal,yes Colombia,yes Brazil,yes Ecuador,yes Belgium,yes Japan,yes France,yes Switzerland",
                "can_close_early": true,
                "expiration_time": "2026-06-26T02:00:00Z"
            },
            {
                "title": "yes Los Angeles D wins by over 2.5 runs,no Republic of Korea wins by over 2.5 goals,no Over 3.5 goals scored,yes New York wins by over 5.5 points,no Dallas wins by over 3.5 points",
                "status": "active",
                "ticker": "KXMVESPORTSMULTIGAMEEXTENDED-S20262347818E8FB-928FF93F346",
                "open_time": "2026-06-12T01:41:11Z",
                "close_time": "2026-06-14T22:40:00Z",
                "event_ticker": "KXMVESPORTSMULTIGAMEEXTENDED-S20262347818E8FB",
  
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/trades` — Recent public trade tape with prices

**Parameters:**
- `limit` (query, optional, string) — Max trades (max 200) Example: `50`
- `ticker` (query, optional, string) — Filter to one market

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/kalshi-api/v1/trades?limit=50"
```

**Response:**
```json
{
    "data": {
        "count": 50,
        "source": "Kalshi",
        "trades": [
            {
                "time": "2026-06-12T01:41:33.929026Z",
                "count": 6,
                "ticker": "KXMLBGAME-26JUN111905SEABAL-SEA",
                "taker_side": "yes",
                "no_price_cents": 85,
                "yes_price_cents": 15,
                "yes_probability": 0.15
            },
            {
                "time": "2026-06-12T01:41:33.834731Z",
                "count": 27.06,
                "ticker": "KXMLBSPREAD-26JUN111840LADPIT-LAD4",
                "taker_side": "no",
                "no_price_cents": 88,
                "yes_price_cents": 12,
                "yes_probability": 0.12
            },
            {
                "time": "2026-06-12T01:41:33.81759Z",
                "count": 37,
                "ticker": "KXWCGAME-26JUN11KORCZE-KOR",
                "taker_side": "yes",
                "no_price_cents": 62,
                "yes_price_cents": 38,
                "yes_probability": 0.38
            },
            {
                "time": "2026-06-12T01:41:33.813501Z",
                "count": 55.59,
                "ticker": "KXWCSCORE-26JUN11KORCZE-KOR1CZE1",
                "taker_side": "yes",
                "no_price_cents": 83,
                "yes_price_cents": 17,
                "yes_probability": 0.17
            },
            {
                "time": "2026-06-12T01:41:33.753918Z",
                "count": 78.49,

…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/kalshi-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Trade prices are in cents (0-100) and also a probability (0-1): a price of 63 implies a 63% chance. Live prices come from the public trade tape; order-book snapshots are gated behind authentication upstream, so the markets directory carries structure (ticker, outcome, status, times), not quotes. A market is identified by its ticker, an event by its event_ticker.",
        "source": "Kalshi public trade API (api.elections.kalshi.com/trade-api/v2, live)",
        "service": "kalshi-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/events": "Events (questions) that group markets — category, series, mutual-exclusivity (status=open).",
            "GET /v1/trades": "Recent public trade tape — executed price (implied probability), size, taker side, time (filter ticker).",
            "GET /v1/markets": "Contract directory — ticker, yes outcome, status, open/close times (status=open; filter event_ticker, series_ticker, ticker)."
        },
        "description": "Live market data from Kalshi, the CFTC-regulated US event-contract exchange. Kalshi lists yes/no contracts that settle on real-world outcomes (elections, economics, weather, sports, world events) and the executed price is the market-implied probability. trades returns the recent public trade tape — executed price (implied probability), size, taker side and time — the live pulse of what is trading. events lists the events (questions) gro
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/kalshi-api
OpenAPI spec: https://www.oanor.com/api/kalshi-api/openapi.json
