The Prediction Markets
Concepts

Core concepts: events, markets, outcomes and venues

Prediction markets let people trade on the answer to a question. Kalshi and Polymarket name things differently; TPM gives them one vocabulary. Here is every term the API uses, explained once.

At a glance

TermWhat it isKalshi examplePolymarket example
EventOne real-world question, grouped across venuesTPM slug democratic-presidential-nominee-2028The same TPM slug
VenueThe exchangekalshipolymarket
MarketA venue's listing for the question (market_id)Event ticker KXPRESNOMD-28Event slug democratic-presidential-nominee-2028
OutcomeOne possible answer (id, title)Gavin NewsomGavin Newsom
ContractThe tradable thing behind an outcome (contract_id)Market ticker KXPRESNOMD-28-GNCondition id 0x0f49db97…
QuoteThe current price of an outcome0.160.1635

Event

An event is one real-world question, such as Democratic Presidential Nominee 2028 or Fed decision in December. TPM groups each venue's listing for the same question under one event with a readable slug. Find events with /events and read one with /events/{slug}.

comparison on an event says how alike the venues' listings are: verified (the same bet) or comparable (similar; check the rules). It is absent when only one venue lists the event.

Venue

A venue is an exchange where contracts trade. v1 covers kalshi (a US-regulated exchange) and polymarket. Venue names appear as venue on markets and as provider in WebSocket ids.

Market

A market is one venue's listing for an event. Its market_id is the venue's own id: a Kalshi event ticker (KXPRESNOMD-28) or a Polymarket event slug (democratic-presidential-nominee-2028). One TPM event usually has one market per venue. List markets with /markets.

Watch the naming

Kalshi calls each tradable line a "market", and Polymarket calls its listing an "event". TPM uses market for the venue listing and contract for the tradable line, on both venues.

Outcome and contract

An outcome is one possible answer, such as Gavin Newsom, or Yes on a yes/no question. Each outcome has a stable TPM id and a contract_id: the venue's tradable contract. That is a Kalshi market ticker (KXPRESNOMD-28-GN) or a Polymarket condition id (0x0f49db97…).

Join contract_id to the venue name for bulk prices, e.g. kalshi:KXPRESNOMD-28-GN in /prices.

Quote and price

A quote is the current price of an outcome. Prices are probabilities from 0 to 1. A contract pays $1 if its answer happens, so a price of 0.16 costs 16 cents and implies a 16% chance.

  • probability: the price the venue displays.
  • best_bid: the most a buyer will pay now. best_ask: the least a seller will accept now.
  • freshness: how current the quote is. See freshness.

Cross-venue matching

TPM links the same answer across venues. Outcomes on different venues with the same match.group_id are the same answer. match.contract_compatibility is verified only when a person checked that both contracts settle the same way. Venues can word rules differently, so read both before treating two prices as one bet.

To go from a venue link or id to the other venue, use /matches.

Gap (cross-venue spread)

A gap is how much more one venue pays for Yes (its bid) than the other venue charges (its ask), in probability points. A gap of 0.024 means you could buy at 0.14 on one venue and sell at 0.164 on the other. Gaps are gross: before fees and before checking how much size the order books hold. See /spreads.

Stream ids

Every outcome carries stream: {provider, market_id, outcome_id}. These are the ids the WebSocket uses. For Kalshi they are the market ticker and yes; for Polymarket, the condition id and the CLOB token id.

Build with TPM

Get your free API key

One key gives you Kalshi and Polymarket events, prices with freshness, price history, cross-venue gaps and the live quotes WebSocket.