Endpoints
The whole-ecosystem live measurement bundle: active markets, venue split, open interest, domain (category) composition, probability distribution, and 24-hour activity. This is the current diurnal value — it breathes with the latest capture hour. Use the archive endpoints for fixed, comparable daily values.
as_of carries the artifact timestampcurl https://volroc.ai/api/public/observatory
{
"active_markets": 49813,
"structure": {
"venue_distribution": [
{ "venue": "kalshi", "count": 41421 },
{ "venue": "polymarket", "count": 8392 }
],
"open_interest": {
"total": 1394324489.62,
"by_venue": { "kalshi": 748101638.72, "polymarket": 646222850.90 },
"unit_note": "Kalshi open interest + Polymarket USD liquidity"
},
"categories": [ { "name": "Sports", "count": 22957, "open_interest": 603383196.75 }, … ]
},
"price_distribution": { "scale": "0-1", "n": 49813, "buckets": [ … ] },
"activity": {
"markets_traded_24h": 13648,
"volume_by_venue": [
{ "venue": "kalshi", "unit": "contracts", "volume_24h": 102776497 },
{ "venue": "polymarket", "unit": "usd", "volume_24h": 77835888.85 }
]
},
"as_of": "2026-06-04T14:33:02Z"
}
Index of every frozen daily snapshot — one row per day with headline figures. Powers the archive list and the historical-series charts.
curl https://volroc.ai/api/public/archive
{
"count": 1,
"days": [
{
"date": "2026-06-04",
"active_markets": 49813,
"open_interest_total": 1394324489.62,
"venue_distribution": [ { "venue": "kalshi", "count": 41421 }, … ],
"categories": [ { "name": "Sports", "count": 22957, "open_interest": 603383196.75 }, … ]
}
]
}
One frozen daily snapshot — the full observatory bundle for that date, plus its
freeze provenance. Records are immutable once frozen, so they cache long. Strict
YYYY-MM-DD only; 404 if that day was never frozen.
400 bad date · 404 not frozencurl https://volroc.ai/api/public/archive/2026-06-04
{
"active_markets": 49813,
"structure": { "venue_distribution": [ … ], "open_interest": { … }, "categories": [ … ] },
"price_distribution": { "scale": "0-1", "n": 49813, "buckets": [ … ] },
"archive": {
"canonical_date": "2026-06-04",
"canonical_hour_utc": "00:00",
"frozen_at_utc": "2026-06-04T14:48:10Z"
},
"market_state": { "markets_tracked": 32348, … }
}
The 2026 World Cup observatory bundle: what prediction markets are pricing around the tournament across both venues — counts, open interest, category breakdown, probability distribution, and the largest markets per venue. Observational only.
curl https://volroc.ai/api/public/world-cup
{
"event": { "name": "2026 FIFA World Cup", "starts": "2026-06-11",
"ends": "2026-07-19", "hosts": "United States, Canada & Mexico",
"teams": 48, "matches": 104 },
"overview": { "active_markets": 1263,
"by_venue": [ { "venue": "kalshi", "count": 1111 },
{ "venue": "polymarket", "count": 152 } ] },
"categories": [ { "key": "advancement", "label": "Team Advancement",
"count": 355, "kalshi_oi_contracts": 1458535.56 }, … ],
"largest": {
"kalshi": [ { "label": "Will the Portugal win the 2026 Men's World Cup?",
"size": 4328249.84, "size_field": "open_interest_contracts" }, … ],
"polymarket": [ { "label": "Will Brazil win the 2026 FIFA World Cup?",
"size": 1956913.94, "size_field": "volume_24h_usd" }, … ]
}
}
Liveness and freshness of the underlying data artifact. Always returns
200; ok is false when no artifact is currently reachable.
curl https://volroc.ai/api/public/health
{
"ok": true,
"generated_at": "2026-06-04T14:33:02Z",
"source_freshness": { "artifact": "fresh" },
"warmup": {}
}
Units & conventions
Venues are never blended. Kalshi open interest and volume are in contracts; Polymarket open interest is USD liquidity and volume is USD. Figures from different venues are reported per venue, each labelled with its unit, and are never summed. Where a single open-interest total is shown, it combines Kalshi open interest with Polymarket USD liquidity as comparable USD magnitudes — not an identical instrument.
Probabilities are on a 0–1 scale (yes-price), both venues.
Domains are a venue-agnostic subject taxonomy classified from Kalshi series prefixes and
Polymarket title keywords, with a residual Other bucket reported honestly.
Live vs. canonical hour
/observatory is the live, diurnal value — it changes through the
day with the latest capture hour. The archive endpoints return the canonical value frozen
at 00:00 UTC each day, which is what makes days comparable to one another. If you are
building a time series, use /archive and /archive/<date>, not
repeated reads of /observatory.
Attribution & citation
The data is free to use. Please attribute it as “VolRoc Observatory, volroc.ai” and cite the specific endpoint or dated record where relevant — e.g. “VolRoc Prediction Market Archive — 2026-06-04, volroc.ai/prediction-markets/2026-06-04/”.
Source markets are collected from the public Kalshi and Polymarket APIs. VolRoc is an independent observatory; it is not affiliated with either venue, and it is not a sportsbook, broker, or exchange. Figures are observational and approximate.
Stay in the loop
We post a short daily read on the prediction-market universe, and we'll note material API changes there. Leave an email, or just reach the project at volroc.ai.
No spam. Statistics and API notes only.