vike

Recipe 28 of 30

How often does Up win on 5-minute BTC markets, by hour of day?

One /settlements/bulk call with slug_prefix=btc-updown-5m- and two weeks of from_ms returns about 4,000 markets; group winning_outcome by the UTC hour of the start time in each slug.

Every settled 5-minute BTC market carries its winner in winning_outcome and its window's start in the slug, as unix seconds. Two weeks of them, about 4,000 markets, fit in one 5,000-row page of GET /v1/polymarket/settlements/bulk; a jq tail groups them by the UTC hour of the start and gives Up's share of wins in each hour. The full parameter list is on Settlements in bulk.

Quick answer

Ask for two weeks of the family in one page and group it by hour.

cURL
# two weeks of settled 5-minute BTC markets, Up's share of wins per UTC hour of the window start
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/bulk?slug_prefix=btc-updown-5m-&from_ms=1791652883201&limit=5000" \
  | jq '.settlements | map(select(.winning_outcome != "")) | group_by(.slug | ltrimstr("btc-updown-5m-") | tonumber % 86400 / 3600 | floor) | map({utc_hour: (.[0].slug | ltrimstr("btc-updown-5m-") | tonumber % 86400 / 3600 | floor), markets: length, up_share: ((map(select(.winning_outcome == "Up")) | length) / length * 1000 | round / 1000)})'

Example response

Captured from the live API on 2026-10-24 at 17:22 UTC. 4,031 markets with has_more false, folded by the call's jq tail into 24 hours, trimmed to 5. From 2026-10-10 to 2026-10-24 Up won 2,013 markets and Down 2,018. Every hour held 167 or 168 markets, and Up's share ran from 45.2% (03:00, 10:00 and 18:00 UTC) to 58.3% (02:00 UTC).

Example response
[
  {"utc_hour": 0, "markets": 168, "up_share": 0.464},
  {"utc_hour": 1, "markets": 168, "up_share": 0.494},
  {"utc_hour": 2, "markets": 168, "up_share": 0.583},
  {"utc_hour": 3, "markets": 168, "up_share": 0.452},
  {"utc_hour": 4, "markets": 168, "up_share": 0.536}
]

Variations

The whole history. Without from_ms the walk starts at 2026-01-01; follow next_cursor until has_more is false, about 17 pages, and group the rows you collected the same way.

cURL — from the start
# page 1 of every settled 5-minute BTC market
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/bulk?slug_prefix=btc-updown-5m-&limit=5000"

By day of the week. 1970-01-01 was a Thursday, so (start / 86400 + 4) % 7 is the weekday with Sunday as 0.

cURL — weekday
# Up's share of wins per UTC weekday, Sunday = 0
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/bulk?slug_prefix=btc-updown-5m-&from_ms=1791652883201&limit=5000" \
  | jq '.settlements | map(select(.winning_outcome != "")) | group_by((.slug | ltrimstr("btc-updown-5m-") | tonumber / 86400 | floor) + 4 | . % 7) | map({weekday: ((.[0].slug | ltrimstr("btc-updown-5m-") | tonumber / 86400 | floor) + 4 | . % 7), markets: length, up_share: ((map(select(.winning_outcome == "Up")) | length) / length * 1000 | round / 1000)})'

Another coin or window length. Change the prefix and the ltrimstr together, for example eth-updown-15m-.

cURL — 15-minute ETH
# two weeks of 15-minute ETH outcomes
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/bulk?slug_prefix=eth-updown-15m-&from_ms=1791652883201&limit=5000"

Before you rely on it

168 markets an hour is mostly noise

With 168 markets in an hour, a fair coin lands outside 42.4% to 57.6% one time in twenty, so across 24 hours about one hour is expected to fall outside that band by chance, as 02:00 does here. Test a pattern on a second, separate period before trading it. The hour is UTC and comes from the slug, which holds the window's start; from_ms filters on the resolution time, a minute or two after each window closes.

Ask your agent

Connected to the Vike MCP server (https://vike.io/mcp) in Claude, ChatGPT or Cursor, ask it in plain words. No MCP tool lists settlements in bulk. The polymarket_settlement tool answers for one market at a time, at 1 credit a call.

Ask your agent
How did the Polymarket market 0x8c1824d3201d570703ff6a9ac47374327f53b873665abc3f68998704b96bec51 resolve?
Example response
[  {"utc_hour": 0, "markets": 168, "up_share": 0.464},  {"utc_hour": 1, "markets": 168, "up_share": 0.494},  {"utc_hour": 2, "markets": 168, "up_share": 0.583},  {"utc_hour": 3, "markets": 168, "up_share": 0.452},  {"utc_hour": 4, "markets": 168, "up_share": 0.536}]