vike
API EndpointsPolymarket

/ohlcv

Candles for one outcome token, priced in probability 0–1 — a different endpoint and a different store from the Hyperliquid price candles at /v1/hyperliquid/ohlcv.

GET https://data.vike.io/v1/polymarket/ohlcv?token_id={token_id}&interval={interval}

Candles for one outcome token. Rows carry ts, open, high, low, close, volume and trades, oldest bar first. There is no cursor: a window wider than limit bars is cut at its recent end, so move from forward to reach it. from later than to is not an error, just [].

All three bars are shown — limit=3 bounded the response. The OHLC values are the probabilities the warning below describes: 0.73 is 73%, not $0.73. volume is not on that scale: it is a share count (outcome-token units), not a dollar figure — the third bar is 3.28767 shares at 0.73, which is $2.40 — so the two number families in one row mean different things. Multiply volume by a price for a dollar notional.

Bars are only emitted for intervals that traded, so ts is not a fixed-step series

A bar exists only for an interval in which something traded. The first two bars above are 1784970000000 and 1785009600000 — 39,600,000 ms apart, eleven hours on a 1h interval. A client that assumes consecutive rows are one interval apart, or that back-fills gaps by index, will misread this tape. Step by ts, never by position.

cURL
# the probability candles of one outcome token, oldest first: here the first three hourly bars of its tape
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1h&limit=3"

# the token's whole recorded life as daily bars: market_stats puts the tape at under 30 days
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1d&limit=30"

# a pinned window for a backtest: the exact first_ms and last_ms that market_stats returned, in epoch MILLISECONDS (a date string here is ignored and you get the whole series), hourly bars within the 1000-bar cap
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1h&from=1784951510849&to=1787183633324&limit=1000"

# one UTC day at 5 minutes: both bounds are inclusive, so end a millisecond before the next midnight or its 00:00 bar is counted twice
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=5m&from=1787097600000&to=1787183999999"

# the last hour of the tape in minute bars, to line up against the same window of /events
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1m&from=1787180000000&to=1787183633324&limit=100"

# the tail of the series: bars come oldest first and limit cuts the recent end, so start later with from rather than raising limit
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1h&from=1787097233324"

# the other outcome token of the same market is its own series
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=107869950127184141743772429738701578723770582686430100389837827512148691029625&interval=1h&limit=3"
token_idqueryrequired
The outcome token.
intervalqueryrequired
One of 1m, 5m, 1h, 1d. Anything else returns 400 naming the four accepted values.
fromqueryoptional
Epoch MILLISECONDS, INCLUSIVE lower bound.
toqueryoptional
Epoch MILLISECONDS, INCLUSIVE upper bound.
limitqueryoptional
Max bars. Default 500, hard cap 1000.
Example response
[
  {
    "close": 0.74,
    "high": 0.74,
    "low": 0.73,
    "open": 0.73,
    "trades": 3,
    "ts": 1784970000000,
    "volume": 279.729667
  },
  {
    "close": 0.73,
    "high": 0.73,
    "low": 0.73,
    "open": 0.73,
    "trades": 1,
    "ts": 1785009600000,
    "volume": 499.99
  },
  {
    "close": 0.73,
    "high": 0.73,
    "low": 0.73,
    "open": 0.73,
    "trades": 1,
    "ts": 1785013200000,
    "volume": 3.28767
  }
]

These candles are priced in probability, 0–1, not in currency

open, high, low and close are probabilities between 0 and 1. This is a different endpoint and a different store from /v1/hyperliquid/ohlcv, which serves Hyperliquid perp candles in currency. Same word, different data.

Note also that this window is inclusive at both ends, while /events is half-open. The two endpoints do not share a convention.

cURL
# the probability candles of one outcome token, oldest first: here the first three hourly bars of its tapecurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1h&limit=3"# the token's whole recorded life as daily bars: market_stats puts the tape at under 30 dayscurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1d&limit=30"# a pinned window for a backtest: the exact first_ms and last_ms that market_stats returned, in epoch MILLISECONDS (a date string here is ignored and you get the whole series), hourly bars within the 1000-bar capcurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1h&from=1784951510849&to=1787183633324&limit=1000"# one UTC day at 5 minutes: both bounds are inclusive, so end a millisecond before the next midnight or its 00:00 bar is counted twicecurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=5m&from=1787097600000&to=1787183999999"# the last hour of the tape in minute bars, to line up against the same window of /eventscurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1m&from=1787180000000&to=1787183633324&limit=100"# the tail of the series: bars come oldest first and limit cuts the recent end, so start later with from rather than raising limitcurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=95532524407959903145510583684979049735028502452973932716346555811355282494630&interval=1h&from=1787097233324"# the other outcome token of the same market is its own seriescurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=107869950127184141743772429738701578723770582686430100389837827512148691029625&interval=1h&limit=3"
Example response
[  {    "close": 0.74,    "high": 0.74,    "low": 0.73,    "open": 0.73,    "trades": 3,    "ts": 1784970000000,    "volume": 279.729667  },  {    "close": 0.73,    "high": 0.73,    "low": 0.73,    "open": 0.73,    "trades": 1,    "ts": 1785009600000,    "volume": 499.99  },  {    "close": 0.73,    "high": 0.73,    "low": 0.73,    "open": 0.73,    "trades": 1,    "ts": 1785013200000,    "volume": 3.28767  }]