Kalshi API — Mapped Kalshi Data With Cross-Venue IDs

Kalshi API via matchwire: query Kalshi markets with same-event IDs matched to Polymarket International and Polymarket US. Docs and MCP included.

Kalshi data, mapped

This Kalshi API returns Kalshi markets with matchwire mapped event IDs attached. Each listing carries venue, marketId, type, side, tier, confidence and the ready-made request: the Kalshi ticker stays native and request is the exact Kalshi GET that market answers. Mapping only, no prices. History depth is not published yet.

Kalshi is a CFTC-regulated exchange; matchwire is a data and mapping layer, not a broker.

Same event on Polymarket International and Polymarket US

Each mapped Kalshi market carries the shared ID joining it to the same event on Polymarket International and Polymarket US. See the Polymarket venues for the sibling view.

Worked exampleA mapped Kalshi market is served as its native ticker, for example KXNFLGAME-26OCT02PITCLE, with request pointing at https://external-api.kalshi.com/trade-api/v2/markets/<ticker>.

Endpoints you will use

Every call is one endpoint with comma lists as filters: GET /api/v1/rows, GET /api/v1/rows?since=SEQ, GET /api/v1/sports, GET /api/v1/status, GET /api/v1/push and GET /health. Narrow with venue=kalshi, type=winner,total,handicap, league=MLB, status=scheduled|live|ended and since=SEQ for changes only.

Code sample

curl -H "x-api-key: YOUR_KEY" \
  "https://api.matchwire.win/api/v1/rows?venue=kalshi&sport=nfl&status=scheduled"

DIY Kalshi wiring vs matchwire

DIY against the raw Kalshi API means your own client, your own schema, and a manual Polymarket join you maintain. matchwire means one client and a shared mapped ID. Full compare: Prediction Market API.

FAQ

Does this replace direct Kalshi access?
It is a mapping layer over Kalshi data, not execution. Rate limit: 60 requests a minute per key, and the /api/v1/push stream is not limited, so poll ?since=SEQ for deltas instead of pulling the full set on a timer.
Tickers vs mapped ID?
The venue ticker stays native; the mapped ID joins venues. Its format is ev:<sport>:<team-a>:<team-b>:<YYYY-MM-DD>.
Freshness?
Rows carry a seq; ask for ?since=SEQ and changed games come back whole, with deletions as tombstones. A freshness figure is not published yet.
Auth?
Send your key as the x-api-key header on every call. Your key's plan decides which venues and sports it may read. Asking for anything outside it returns a 403 that names what is not allowed.
How do the Polymarket venues look?
Same event ID on Polymarket API: International + US, with parent coverage on Prediction Market API.