API
Every number on this site comes from a handful of JSON files served over HTTPS with open CORS. They are free to use, need no key, and come with no uptime guarantee: this is a best-effort feed, not a service level. Please cache on your side and poll no faster than the data changes. Version 2 (venues, combined signal, confidence score).
Endpoints
GET /api/v1/signals.json | Everything: combined and per-venue readings for every coin × timeframe. Written every tick (tick_seconds). Cache 10 s. |
GET /api/v1/combined.json | Combined readings only. Written once a minute. Cache 30 s. |
GET /api/v1/venues/{venue}.json | One venue's readings. Venues: polymarket, kalshi, limitless. Written once a minute. Cache 30 s. |
GET /api/v1/history/{coin}.json | Last 48 h: combined at 1-minute and per-venue at 5-minute resolution. Coins: BTC, ETH, SOL, XRP, DOGE, HYPE, BNB. Rebuilt every 5 min. |
GET /api/v1/meta.json | Coins, timeframes (5m, 15m, 1h, 4h, 1d), venues with coverage, thresholds and methodology version. |
GET /api/v1/openapi.json | OpenAPI 3.1 description of the above. |
Example
curl -s https://polysignals.net/api/v1/combined.json | jq '.coins.BTC.overall'
curl -s https://polysignals.net/api/v1/signals.json | jq '.coins.ETH.timeframes["1h"].combined.current.confidence'
curl -s https://polysignals.net/api/v1/venues/kalshi.json | jq '.coins.SOL["15m"].current.prob_up'signals.json, trimmed to one coin, one timeframe and one venue:
{
"version": 2,
"generated_at": "2026-09-30T20:26:05Z",
"tick_seconds": 30,
"venues": ["polymarket", "kalshi", "limitless"],
"coins": {
"BTC": {
"spot_usd": 83616.4,
"overall": { "score": 9, "direction": "neutral", "confidence": 71 },
"timeframes": {
"1h": {
"combined": {
"current": {
"prob_up": 0.511,
"score": 2,
"direction": "neutral",
"late_window": false,
"window_start": "2026-09-30T20:00:00Z",
"window_end": "2026-09-30T21:00:00Z",
"sources": ["polymarket", "kalshi", "limitless"],
"divergence": 0,
"confidence": { "score": 97, "label": "high", "depth": 0.97, "agreement": 1, "timing": 1, "sources": 3, "divergence": 0 }
},
"next": null
},
"venues": {
"kalshi": {
"current": {
"venue": "kalshi", "coin": "BTC", "timeframe": "1h",
"window_start": "2026-09-30T20:00:00Z", "window_end": "2026-09-30T21:00:00Z",
"prob_up": 0.51, "score": 2, "direction": "neutral",
"spread": 0.01, "volume_usd": 333616, "liquidity_usd": null,
"derived": true, "stale": false, "late_window": false,
"market_url": "https://kalshi.com/markets/kxbtcd/KXBTCD-26SEP3017",
"confidence": { "score": 72, "label": "high", "quality": 0.72, "timing": 1 }
},
"next": null
}
}
}
}
}
}
}Combined reading fields
prob_up- Quality-weighted mean of venue Up probabilities (0–1). null when no source qualifies.
score- (prob_up − 0.5) × 200, rounded. −100 to +100.
direction- strong_up · up · neutral · down · strong_down.
late_window- true when less than 20% of the window remains.
window_start / window_end- ISO-8601 UTC. Compute time remaining from window_end; there is no countdown field.
sources- Venue ids blended into this reading (quality > 0).
divergence- max − min prob_up among sources with quality ≥ 0.2; 0 with one source.
confidence- { score, label, depth, agreement, timing, sources, divergence } — score = round(100 × depth × agreement × timing).
Venue reading fields
prob_up / score / direction- As above, for this venue alone.
spread- Best ask − best bid of the Up share. null for AMM venues.
volume_usd- Volume as reported by the venue (lags on some venues).
liquidity_usd- Pool liquidity for AMM venues, else null.
derived- true when interpolated from a strike ladder (Kalshi hourly).
stale- true when the quote could not be refreshed and the previous value is shown (quality 0).
market_url- The market on the venue's site.
confidence- { score, label, quality, timing } — score = round(100 × quality × timing).
Per coin
overall is the confidence-weighted mean of the combined current scores across timeframes, with its own confidence; venue_overall.{venue} is the same computed from one venue’s readings (also returned as overall in venues/{venue}.json); spot_usd is a display-only spot price from Coinbase.
When no source clears the quality bar (typically a thin window with zero reported volume), the combined reading is still filled from the available prices, equal-weighted, with confidence.score 0 — so every priced window shows a direction, and the confidence tells you how much to trust it.
History file
{ coin, generated_at, resolution: { combined: "1m", venues: "5m" }, range_hours: 48, timeframes: { "1h": { combined: [{ t, prob_up, score, confidence }], venues: { kalshi: [ … ] } } } }. Minutes with no usable reading are simply absent.
Not financial advice. Not affiliated with Polymarket, Kalshi or Limitless. The feed can change or stop without notice.