v1

latestOpenAPI 3.1.02026-07-243035381.4 MB
Prediction API

List prediction markets

/v4/data/prediction/markets

100 credits per API call

List prediction markets across supported platforms. A market is a single binary or multi-outcome question (e.g. "Will candidate X win?"); it belongs to a parent event when one is defined upstream. Each row carries pricing-friendly roll-ups (volume, liquidity), the current outcome set, and on-chain references on platforms where they exist.

Supported platforms (filter via platform or omit for a cross-platform feed):

  • Polymarket — polymarket
  • Kalshi — kalshi

Filtering, sorting and pagination

  • The status, category, tag, search and minVolume filters are only honoured by Polymarket. To use any of them you must also pin platform=polymarket — calling them without that pin returns 400.
  • eventId accepts either a Polymarket numeric event id or a Kalshi event ticker. When omitted, results span all events on the targeted platform(s).
  • endingBefore is an ISO-8601 timestamp; markets closing on or after that timestamp are excluded.
  • sort accepts volume_desc, liquidity_desc, endingSoon, newest. When omitted on a cross-platform feed, results are interleaved between the two platforms.
  • Pagination is cursor-based. The first call returns a pagination.cursor; pass it back verbatim as ?cursor=… on the next call. Cursors are opaque, fingerprint-bound, and expire when filters change — never construct or modify them by hand.

Other notes

  • volumeUnit is usd on Polymarket (dollar-denominated notional) and contracts on Kalshi (contract count — not USD).
  • liquidity is null on Kalshi — quoted liquidity is not exposed by the upstream markets feed; aggregate orderbook depth client-side if you need it.
  • chain is populated for Polymarket markets (Polygon CTF) and null on Kalshi which has no on-chain footprint.
  • status in the response is the verbatim upstream status string (richer than the ?status= filter enum) — values can include paused, archived, settled, etc.
get/v4/data/prediction/markets

Query parameters

platform'polymarket' | 'kalshi'

Prediction-market platform identifier.

Example:polymarket

Filter to a single platform. Omit for a cross-platform feed.

status'active' | 'closed' | 'resolved'

Coarse lifecycle filter used by the ?status= query parameter. The response field status carries a richer, platform-native string (e.g. paused, archived, settled); this enum is used only for filtering.

Example:active

Filter by lifecycle status. Polymarket-only — must be combined with platform=polymarket.

categorystring
Example:crypto

Filter by category. Polymarket-only — must be combined with platform=polymarket.

tagstring
Example:bitcoin

Filter by tag slug. Polymarket-only — must be combined with platform=polymarket.

eventIdstring
Example:KXELONMARS

Scope the listing to a single parent event. Polymarket numeric event id (e.g. 12345) or Kalshi event ticker (e.g. KXELONMARS).

searchstring
Example:bitcoin

Free-text search across market questions. Polymarket-only — must be combined with platform=polymarket.

endingBeforestring date-time
Example:2026-12-31T00:00:00Z

Exclude markets closing on or after this ISO-8601 timestamp.

minVolumenumber
Example:10000

Minimum volume threshold in volumeUnit units. Polymarket-only — must be combined with platform=polymarket.

sort'volume_desc' | 'liquidity_desc' | 'endingSoon' | 'newest'

Sort order for event and market listings. When omitted on a cross-platform feed, results are interleaved between platforms instead.

Example:volume_desc

Sort order. When omitted on a cross-platform feed, results are interleaved between platforms instead.

cursorstring

Opaque base64-encoded pagination token. Returned in pagination.cursor on responses that have more pages. Pass back verbatim as ?cursor=… to fetch the next page. Cursors are fingerprint-bound to the filter set — modifying any filter between calls invalidates the cursor and returns 400. The field is omitted from pagination on the last page.

Example:eyJwbUV2dEN1cnNvciI6IjIwMjUtMTEtMDFUMTI6MzQ6NTZaIn0=

Opaque cursor returned by the previous response's pagination.cursor. Omit on the first call.

limitinteger
Example:20

Page size. Defaults to 20 when omitted.

Response

OK

Example response

{
  "data": [
    {
      "id": "KXELONMARS-99",
      "platform": "polymarket",
      "eventId": "KXELONMARS",
      "question": "Will Elon Musk land humans on Mars by 2030?",
      "description": "Resolves YES if SpaceX confirms a successful crewed Mars landing by 2030-12-31.",
      "category": "Science",
      "tags": [
        "space",
        "spacex"
      ],
      "imageUrl": "https://polymarket.com/images/elon-mars.png",
      "status": "active",
      "openTime": "2024-01-01T00:00:00Z",
      "closeTime": "2030-12-31T23:59:59Z",
      "settleTime": "2031-01-15T00:00:00Z",
      "outcomes": [
        {
          "name": "YES",
          "price": 0.42,
          "tokenId": "71321045679252212594626385532706912750332728571942612009397583165281712267356"
        }
      ],
      "volume": 1542300.12,
      "volumeUnit": "usd",
      "liquidity": 89400.5,
      "resolution": {
        "outcome": "YES",
        "resolvedAt": "2026-04-12T18:00:00Z",
        "txHash": "0x9c1f…",
        "source": "uma"
      },
      "createdAt": "2023-11-21T10:42:00Z",
      "source": {
        "platform": "polymarket",
        "platformId": "KXELONMARS-99",
        "url": "https://kalshi.com/markets/kxelonmars"
      },
      "chain": {
        "chainId": 137,
        "conditionId": "0xdd22472e552920b8438158ea7238bfadfa4f736aa4cee91a6b86c39ead110917",
        "tokenIds": {
          "yes": "7132104567925221259…",
          "no": "5239841276582930182…"
        },
        "resolutionSource": "https://uma.app/"
      }
    }
  ],
  "pagination": {
    "cursor": "eyJwbUV2dEN1cnNvciI6IjIwMjUtMTEtMDFUMTI6MzQ6NTZaIn0=",
    "pageSize": 20
  }
}