The Prediction Markets
API reference

Markets: venue listings

The raw venue listings TPM tracks: a Kalshi event ticker or a Polymarket event. Use them to mirror one venue's catalog or to map venue ids to TPM events. For the cross-venue view, use events.

When to use it

  • Mirror the Kalshi or Polymarket catalog with TPM's normalised prices.
  • Find which TPM event a venue listing belongs to (event_slug).
  • Read a listing's settlement rules before comparing it with another venue.

New here? Read what a market and a contract are first.

GET/api/public/v1/marketsAPI key required

List venue markets

Largest by volume first. Add include=outcomes to get each market's outcomes and quotes.

Parameters

NameInTypeRequiredDefaultDescription
venuequery"kalshi" | "polymarket"No—Only this venue.
qquerystringNo—Search titles and venue ids.
eventquerystringNo—Only markets grouped under this TPM event slug.
statusquery"active" | "all"NoactiveUse all to include closed listings.
includequery"outcomes"No—outcomes adds each market's outcomes and quotes.
limitqueryintegerNo50Rows per page, 1 to 200.
cursorquerystringNo—The pagination.next_cursor from the previous page. Keep the other filters the same. See pagination.

Request

Request
curl -s 'https://api.thepredictionmarkets.com/api/public/v1/markets?venue=kalshi&q=nominee&limit=1' \
  -H 'X-API-Key: tpm_demo_key_authorized_2026'

Response

Example 200 response. Values are illustrative and change over time.

200 OK
{
  "data": [
    {
      "venue": "kalshi",
      "market_id": "KXPRESNOMD-28",
      "title": "Democratic Presidential Nominee 2028",
      "url": "https://kalshi.com/markets/kxpresnomd",
      "status": "active",
      "event_slug": "democratic-presidential-nominee-2028",
      "volume": 244696381.96,
      "liquidity": null,
      "end_date": "2028-11-07T00:00:00Z",
      "last_seen_at": "2026-10-21T08:24:28Z",
      "outcome_count": 41,
      "outcomes": null,
      "rules": null
    }
  ],
  "pagination": {
    "limit": 1,
    "has_more": true,
    "next_cursor": "eyJvIjoxfQ"
  }
}

Response fields

FieldTypeDescription
venue"kalshi" | "polymarket"Which exchange lists it.
market_idstringThe venue listing: a Kalshi event ticker (KXPRESNOMD-28) or a Polymarket event slug.
titlestring | nullTitle as the venue shows it.
urlstring | nullLink to the listing on the venue.
statusstring | nullVenue status, e.g. active.
event_slugstring | nullThe TPM event this listing is grouped under. Use it with /events/{slug}.
volumenumber | nullTotal traded volume in US dollars.
liquiditynumber | nullOrder-book liquidity in US dollars, when the venue reports it.
end_datestring | nullWhen trading is scheduled to close (UTC).
last_seen_atstring | nullLast time TPM polled this listing from the venue.
outcome_countintegerNumber of outcomes (contracts) in the listing.
outcomesOutcome[] | nullIncluded on single-market requests and with include=outcomes. Same shape as in event detail.
rulesstring | nullSettlement rules text, on single-market requests.

Errors

HTTPCodeWhen
400validation.invalid_parameterA filter has a bad value, e.g. venue=robinhood.
400validation.invalid_cursorThe cursor is malformed or was made with other filters.
401auth.missing_keyNo X-API-Key header was sent.
401auth.invalid_keyThe key is wrong or was revoked.
429rate_limit.per_secondToo many requests this second. Wait for Retry-After.
400 validation.invalid_parameter
{
  "error": {
    "code": "validation.invalid_parameter",
    "message": "venue: Input should be 'polymarket' or 'kalshi'",
    "request_id": "0f8969a6-0968-4d7c-9cbb-de379e8c19c4"
  }
}

All codes are listed on the errors page.

Try it

Runs a live request from your browser. Pre-filled with the shared demo key (5 requests per second for everyone); paste your own key for steadier results.

HTTP: —Time: —Rows: —Remaining this second: —Request: —
Press Send to run this request.
GET/api/public/v1/markets/{venue}/{market_id}API key required

Get one venue market

One listing with every outcome's quote and the settlement rules text. The sample is trimmed to one outcome.

Parameters

NameInTypeRequiredDefaultDescription
venuepath"kalshi" | "polymarket"Yes—The venue.
market_idpathstringYes—Kalshi event ticker or Polymarket event slug.

Request

Request
curl -s 'https://api.thepredictionmarkets.com/api/public/v1/markets/kalshi/KXPRESNOMD-28' \
  -H 'X-API-Key: tpm_demo_key_authorized_2026'

Response

Example 200 response. Values are illustrative and change over time.

200 OK
{
  "data": {
    "venue": "kalshi",
    "market_id": "KXPRESNOMD-28",
    "title": "Democratic Presidential Nominee 2028",
    "url": "https://kalshi.com/markets/kxpresnomd",
    "status": "active",
    "event_slug": "democratic-presidential-nominee-2028",
    "volume": 244696381.96,
    "liquidity": null,
    "end_date": "2028-11-07T00:00:00Z",
    "last_seen_at": "2026-10-21T08:24:28Z",
    "outcome_count": 41,
    "outcomes": [
      {
        "id": "5c66f06e-dcac-44fa-93af-ba710d2a9ed2",
        "title": "Gavin Newsom",
        "contract_id": "KXPRESNOMD-28-GN",
        "status": "active",
        "volume": 11138438.36,
        "probability_change_24h": null,
        "quote": {
          "probability": 0.16,
          "best_bid": 0.16,
          "best_ask": 0.17,
          "spread": 0.01,
          "source": "live",
          "observed_at": "2026-10-21T08:38:56Z",
          "age_seconds": 3,
          "freshness": "live"
        },
        "stream": {
          "provider": "kalshi",
          "market_id": "KXPRESNOMD-28-GN",
          "outcome_id": "yes"
        },
        "match": {
          "group_id": "b5f0c3d2-6a1e-5f7b-9c2d-1e8a4f3b7d60",
          "key": "candidate:gnew",
          "state": "AUTO_MATCHED",
          "contract_compatibility": "unverified"
        }
      }
    ],
    "rules": "If the named person is the Democratic nominee for President in 2028, the market resolves to Yes."
  }
}

Errors

HTTPCodeWhen
404not_found.marketTPM has no market with this id on that venue.
401auth.missing_keyNo X-API-Key header was sent.
401auth.invalid_keyThe key is wrong or was revoked.
429rate_limit.per_secondToo many requests this second. Wait for Retry-After.
404 not_found.market
{
  "error": {
    "code": "not_found.market",
    "message": "No kalshi market with id 'KXNOTREAL'.",
    "request_id": "0f8969a6-0968-4d7c-9cbb-de379e8c19c4"
  }
}

All codes are listed on the errors page.

Try it

Runs a live request from your browser. Pre-filled with the shared demo key (5 requests per second for everyone); paste your own key for steadier results.

HTTP: —Time: —Rows: —Remaining this second: —Request: —
Press Send to run this request.

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.