vike

One market

One market's detail — the same row shape as the directory, for a single market you already hold a condition_id for.

GET https://data.vike.io/v1/polymarket/markets/{condition_id}

One market's detail — the same row shape as the directory, for a single market. Call it when you already hold a condition_id (from a Polymarket URL, a settlement row, or a stored id) and want its token_ids, tick size and lifecycle flags without searching.

Note the shape: a one-element array, not a bare object. Even for a single market you index [0]. It is the same row the directory returns, plus source, which is why an unknown id is an empty array rather than a 404 — see the callout below.

Markets outside the recorded universe are answered too. The directory lists the markets Vike records; a market it does not hold (most resolved markets, including nearly every settled 5-minute Up/Down market) is looked up in Polymarket's full market catalog instead. source says which list answered: "recorded" (the directory) or "catalog". A catalog row carries the same condition_id, slug, token_ids and end_date, and active/closed derived by the same rule (an on-chain resolution or Polymarket's own closed flag). The catalog has no tick size and no neg-risk flag, so a catalog row returns tick_size and neg_risk as null, never a guessed value. An end_date of 0 means the market has no end date on record, in either list. Only an id that neither list knows returns [].

cURL
# one market you already hold a condition_id for: its token_ids, tick size and lifecycle flags, no search needed
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x7b9072e6a9cdcf022c4f098564e8ee612d544e179e4a33dcc2790fbaa778daa8"

# a sibling market from the same /markets?query=bitcoin search, to compare neg_risk, tick_size and end_date
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x84fdc3f917e34acca874f93d978e84ed0c08969903ddf40a5d65274b3a5b4fdf"

# read tick_size per market rather than assuming it: this one steps in 0.01 where the two above step in 0.001
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x752fa61c93f16c4b15e85b0bd438d9c684176b0ea7b319a84c8aca34616e8a8c"

# a market that has resolved on chain: its closed flag here is derived from that resolution, so read it beside /settlements
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13"

# just the token_ids, ready to feed /ohlcv, /orderbook, /market_stats or /events
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x7b9072e6a9cdcf022c4f098564e8ee612d544e179e4a33dcc2790fbaa778daa8" | jq '.[0].token_ids'

# an id neither the directory nor the catalog knows is 200 with [], not a 404, so test the length rather than the status
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x0000000000000000000000000000000000000000000000000000000000000000" | jq length
condition_idpathrequired
The 0x-prefixed market condition id.
Example response
[
  {
    "active": 0,
    "closed": 1,
    "condition_id": "0x7b9072e6a9cdcf022c4f098564e8ee612d544e179e4a33dcc2790fbaa778daa8",
    "end_date": 1798779600000,
    "neg_risk": 1,
    "slug": "will-bitcoin-reach-70000-by-december-31-2026-from-june-8",
    "source": "recorded",
    "tick_size": 0.001,
    "token_ids": [
      "95532524407959903145510583684979049735028502452973932716346555811355282494630",
      "107869950127184141743772429738701578723770582686430100389837827512148691029625"
    ]
  }
]

A market the directory does not hold comes from the catalog. This is the real row for 0x80412eea…7f0e, a settled 5-minute Bitcoin Up/Down market: no tick size or neg-risk flag on record, so both are null:

Example response: a catalog row
[
  {
    "active": 0,
    "closed": 1,
    "condition_id": "0x80412eea753511e2b99b34ac7278f583aa633755d4bfc37937747fcccdc67f0e",
    "end_date": 1767225300000,
    "neg_risk": null,
    "slug": "btc-updown-5m-1767225000",
    "source": "catalog",
    "tick_size": null,
    "token_ids": [
      "49699554833940749458928669349813611676670305272267507372557451546278237252538",
      "19759251783825530137716888916762539198265502090004595143306471486961806482242"
    ]
  }
]

The path segment is matched as a condition_id only

The route looks a market up by condition_id and by nothing else, so a token_id in this position returns [] with status 200. Any value that is not 0x and 64 hex digits, a token id included, gets that [] with an X-Vike-Note: condition_id is 0x followed by 64 hex digits; this value is not one header; a well-formed id that neither list knows gets [] with no header. There is no query-parameter form either: the route accepts no query parameters at all, and ?token_id= on this path is refused with 400 {"error":"unknown query parameter 'token_id' (this endpoint accepts: none)"}. There is no token-to-market lookup in this namespace, so keep the condition_id from the /markets row you took the token from.

Example response
[  {    "active": 0,    "closed": 1,    "condition_id": "0x7b9072e6a9cdcf022c4f098564e8ee612d544e179e4a33dcc2790fbaa778daa8",    "end_date": 1798779600000,    "neg_risk": 1,    "slug": "will-bitcoin-reach-70000-by-december-31-2026-from-june-8",    "source": "recorded",    "tick_size": 0.001,    "token_ids": [      "95532524407959903145510583684979049735028502452973932716346555811355282494630",      "107869950127184141743772429738701578723770582686430100389837827512148691029625"    ]  }]