Markets

Get one market's metadata

Returns the full metadata document for a single market. Rate-limit bucket: LIGHT.

Provider is resolved case-insensitively against the registry (aliases such as kalshi_offchain → kalshi and dome → polymarket are accepted and normalized before the lookup).

Response is ETagged (strong ETag) with a Cache-Control header; a matching If-None-Match returns 304. Responses ≥1KB are gzip-compressed when the client sends Accept-Encoding: gzip.

get/v1/markets/{provider}/{market_id}

Request

  • Base URL
    https://md.kairos.trade
  • Auth
    • none
    • or API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret

Path parameters

provider'kalshi' | 'polymarket' | 'opinion' | 'predictfun' | 'hyperliquid' | 'kalshi_offchain' | 'dome' required

Venue identifier. Case-insensitive; aliases are normalized (kalshi_offchain→kalshi, dome→polymarket). Unknown values are rejected with 400.

market_idstring required

Venue-specific market identifier (e.g. a Kalshi ticker, or a Polymarket/predict.fun numeric market id or condition id).

Response

Market metadata document.

exchange_idstring required

Canonical provider name.

market_idstring required
condition_idstring required

On-chain condition id for CTF venues; empty string for kalshi.

event_idstring required

Grouping event id (multi-market events); may be empty.

titlestring required
neg_riskboolean required

Whether this market is part of a Polymarket negative-risk group.

tick_sizenumber nullable

Minimum price increment (0, 1) exclusive.

taker_base_fee_bpsinteger nullable
fees_enabledboolean nullable
categorystring nullable
group_slugstring nullable
fee_typestring nullable
statusstring nullable

Venue-reported market status, e.g. active/closed. Populated inconsistently across providers.

imagestring nullable

Display image URL.

iconstring nullable

Display icon URL.

end_datestring nullable

ISO8601 UTC market end/close time.

open_timestring nullable

ISO8601 UTC market open/listing time.

resolution_statusstring

Present only when the market has resolution state.

payout_numeratorsinteger[]

Present only when non-empty (i.e. the market has resolved with a payout vector).

resolved_tsstring

ISO8601 UTC. Present only when set.

proposed_pricenumber

Present only when set (a resolution price has been proposed).

challenge_window_ends_atstring

ISO8601 UTC. Present only when set.

match_delay_msinteger nullable

Polymarket only (absent for other venues). How long Polymarket holds an order before matching it, in milliseconds. Sports markets hold every order for whole seconds (e.g. 1000 or 3000), and the value can change while a market trades, typically at game start; some crypto "Up or Down" markets hold taker orders for 250. When both apply, this is the longer one. 0 means no delay; null means Kairos has not observed this market's delay yet.

rawobject required

Full, unmodified provider-specific market document. Shape varies by provider. Treat as opaque/pass-through.

Example response

{
  "exchange_id": "polymarket",
  "market_id": "1897040",
  "condition_id": "0xabc123...",
  "event_id": "evt-4521",
  "title": "Will BTC close above $120k on July 31?",
  "tick_size": 0.01,
  "taker_base_fee_bps": 200,
  "category": "Crypto",
  "group_slug": "btc-price-2026",
  "fee_type": "standard",
  "status": "active",
  "end_date": "2026-07-31T23:59:59Z",
  "open_time": "2026-01-01T00:00:00Z",
  "resolution_status": "resolved",
  "payout_numerators": [
    1,
    0
  ],
  "resolved_ts": "2026-07-16T00:00:00Z",
  "proposed_price": 1,
  "challenge_window_ends_at": "2026-07-16T02:00:00Z",
  "match_delay_ms": 1000,
  "outcomes": [
    {
      "outcome": "Yes",
      "normalized_outcome": "yes",
      "token_id": "18812649149814341758733697580460697418474693998558159483117",
      "side": "yes"
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.