The Prediction Markets
API reference

List and search events

Search and filter events: real-world questions grouped across Kalshi and Polymarket. Each row has the leading outcome's price.

When to use it

  • Find the slug for an event, then call /events/{slug} for every outcome's price.
  • Build a browse or search page: filter by category, venue or closing_within_days.
  • Rank events by volume, trending or probability_change.

Rows only include the leading outcome. For every outcome on every venue, fetch the event detail.

GET/api/public/v1/eventsAPI key required

List events

Returns one page of events, sorted by trending unless you choose another sort.

Parameters

NameInTypeRequiredDefaultDescription
qquerystringNo—Search event titles, e.g. fed rate or nba champion.
categoryquerystringNo—A category slug from /categories, e.g. politics.
venuequery"kalshi" | "polymarket"No—Only events listed on this venue.
statusquerystringNoactiveactive, trading (a venue still trades it), closed, resolved or all.
tagquerystringNo—Comma-separated topic tags.
closing_within_daysquery1 | 7 | 30No—Only events closing within 1, 7 or 30 days.
sortquerystringNotrendingtrending, volume, probability_change, end_date or created_at.
orderquery"asc" | "desc"NodescSort direction.
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/events?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": [
    {
      "id": "4d633d66-f3da-4f36-b04c-ce41b26bb13a",
      "slug": "democratic-presidential-nominee-2028",
      "title": "Democratic Presidential Nominee 2028",
      "category": "politics",
      "status": "active",
      "trading_state": "trading",
      "end_date": "2028-11-07T00:00:00Z",
      "venues": [
        "kalshi",
        "polymarket"
      ],
      "outcome_count": 128,
      "leading_outcome": {
        "title": "Alexandria Ocasio-Cortez",
        "probability": 0.1645,
        "change_24h": null
      },
      "volume": 1540934033.49,
      "volume_24h": 541492.33,
      "liquidity": 74355239.4,
      "freshness": {
        "state": "fresh",
        "age_seconds": 94,
        "observed_at": "2026-10-21T08:37:22Z"
      },
      "web_url": "https://thepredictionmarkets.com/odds/democratic-presidential-nominee-2028"
    }
  ],
  "pagination": {
    "limit": 1,
    "has_more": true,
    "next_cursor": "eyJvIjoxfQ"
  }
}

Response fields

FieldTypeDescription
idstringTPM event id.
slugstringReadable id. Use it with /events/{slug}.
titlestringEvent title.
categorystring | nullCategory slug.
statusstring | nullTPM status, e.g. active or resolved.
trading_statestring | nulltrading while a venue still trades it.
end_datestring | nullScheduled close (UTC).
venuesstring[]Venues that list it: kalshi, polymarket or both.
outcome_countinteger | nullNumber of outcomes.
leading_outcomeobject{title, probability, change_24h} of the most likely outcome.
volumenumber | nullTotal traded volume in US dollars across venues.
volume_24hnumber | nullVolume in the last 24 hours.
liquiditynumber | nullOrder-book liquidity in US dollars.
freshnessobject{state, age_seconds, observed_at} for the listing data. state is fresh, aging, stale or unknown.
web_urlstringThe event page on thepredictionmarkets.com.
paginationobject{limit, has_more, next_cursor}. See pagination.

Errors

HTTPCodeWhen
400validation.invalid_parameterA filter has a bad value, e.g. limit=500.
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": "limit: Input should be less than or equal to 200",
    "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.