{"openapi":"3.1.0","info":{"title":"PolySignals.net API","version":"2.13.0","description":"Free, unauthenticated, read-only JSON: crypto direction signals from Polymarket, Kalshi, Limitless and Gemini Up/Down prediction markets, plus daily readings implied by Binance, Deribit, Bybit and OKX options. No uptime guarantee. Not financial advice. Not affiliated with any venue."},"servers":[{"url":"/api/v1"}],"paths":{"/signals.json":{"get":{"summary":"Everything: combined and per-venue readings for every coin × timeframe, written every tick","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","const":2},"generated_at":{"type":"string","format":"date-time"},"tick_seconds":{"type":"integer"},"venues":{"type":"array","items":{"type":"string"}},"coins":{"type":"object","additionalProperties":{"type":"object","properties":{"spot_usd":{"type":["number","null"]},"overall":{"type":["object","null"],"properties":{"score":{"type":"integer"},"direction":{"type":"string"},"confidence":{"type":"integer"}}},"venue_overall":{"type":"object","description":"Per venue: overall from that venue's current 1h, 4h and 1d readings.","additionalProperties":{"type":["object","null"],"properties":{"score":{"type":"integer"},"direction":{"type":"string"},"confidence":{"type":"integer"}}}},"timeframes":{"type":"object","additionalProperties":{"type":"object","properties":{"combined":{"type":"object","properties":{"current":{"type":["object","null"],"properties":{"prob_up":{"type":["number","null"],"description":"Quality-weighted mean of venue probabilities of Up (0..1)."},"score":{"type":["integer","null"],"minimum":-100,"maximum":100},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"late_window":{"type":"boolean","description":"Less than 20% of the window remains."},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"},"description":"Venues blended (quality > 0, or every priced venue in the equal-weighted fallback); a merged options reading lists each options venue in it."},"merged_options":{"type":"array","items":{"type":"string"},"description":"Options venues merged into one reading before blending: their median prob_up, counted as one source. An options venue more than 0.3 from the median of the others is left out and flagged \"outlier\". Empty when none were merged."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources (quality ≥ 0.2); null when fewer than two qualify."},"raw_divergence":{"type":["number","null"],"description":"max − min prob_up across every priced source regardless of quality; null when fewer than two are priced."},"confidence":{"type":"object","description":"score = round(100 × depth × agreement × timing).","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"label":{"type":"string","enum":["high","medium","low"]},"depth":{"type":"number","description":"1 − Π(1 − quality_i) over the independent sources blended (a window's options venues count as one, at the best member's quality)."},"agreement":{"type":"number","description":"clamp(1 − divergence / 0.2, 0, 1) with two or more qualifying sources; 0.7 otherwise."},"timing":{"type":"number","description":"0.5 when late in the window, else 1."},"sources":{"type":"integer","description":"Venues blended."},"independent_sources":{"type":"integer","description":"Readings blended once the window's options venues are merged into one; depth runs over these."},"qualifying_sources":{"type":"integer","description":"Independent sources with quality ≥ 0.2; only these corroborate each other."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources; null when fewer than two qualify."}}},"reference_price":{"type":["number","null"],"description":"The window's price at the open as stored for it: a venue's own price to beat (venue), the collector's Coinbase price taken in the window's first 3 minutes (collector_spot), or the open of the hourly spot candle that started a daily window (candle). Null for the next window and for a window that opened before one was stored."},"reference_source":{"type":["string","null"],"enum":["venue","collector_spot","candle",null]},"move_since_open":{"type":["number","null"],"description":"Price now (the Coinbase Exchange last trade, else spot_usd) ÷ reference_price − 1, 4 decimals."},"time_left":{"type":["number","null"],"description":"Fraction of the window remaining at generated_at, 3 decimals: 1 before it opens."}}},"next":{"type":["object","null"],"properties":{"prob_up":{"type":["number","null"],"description":"Quality-weighted mean of venue probabilities of Up (0..1)."},"score":{"type":["integer","null"],"minimum":-100,"maximum":100},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"late_window":{"type":"boolean","description":"Less than 20% of the window remains."},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"},"description":"Venues blended (quality > 0, or every priced venue in the equal-weighted fallback); a merged options reading lists each options venue in it."},"merged_options":{"type":"array","items":{"type":"string"},"description":"Options venues merged into one reading before blending: their median prob_up, counted as one source. An options venue more than 0.3 from the median of the others is left out and flagged \"outlier\". Empty when none were merged."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources (quality ≥ 0.2); null when fewer than two qualify."},"raw_divergence":{"type":["number","null"],"description":"max − min prob_up across every priced source regardless of quality; null when fewer than two are priced."},"confidence":{"type":"object","description":"score = round(100 × depth × agreement × timing).","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"label":{"type":"string","enum":["high","medium","low"]},"depth":{"type":"number","description":"1 − Π(1 − quality_i) over the independent sources blended (a window's options venues count as one, at the best member's quality)."},"agreement":{"type":"number","description":"clamp(1 − divergence / 0.2, 0, 1) with two or more qualifying sources; 0.7 otherwise."},"timing":{"type":"number","description":"0.5 when late in the window, else 1."},"sources":{"type":"integer","description":"Venues blended."},"independent_sources":{"type":"integer","description":"Readings blended once the window's options venues are merged into one; depth runs over these."},"qualifying_sources":{"type":"integer","description":"Independent sources with quality ≥ 0.2; only these corroborate each other."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources; null when fewer than two qualify."}}},"reference_price":{"type":["number","null"],"description":"The window's price at the open as stored for it: a venue's own price to beat (venue), the collector's Coinbase price taken in the window's first 3 minutes (collector_spot), or the open of the hourly spot candle that started a daily window (candle). Null for the next window and for a window that opened before one was stored."},"reference_source":{"type":["string","null"],"enum":["venue","collector_spot","candle",null]},"move_since_open":{"type":["number","null"],"description":"Price now (the Coinbase Exchange last trade, else spot_usd) ÷ reference_price − 1, 4 decimals."},"time_left":{"type":["number","null"],"description":"Fraction of the window remaining at generated_at, 3 decimals: 1 before it opens."}}}}},"venues":{"type":"object","additionalProperties":{"type":"object","properties":{"current":{"type":["object","null"],"properties":{"venue":{"type":"string"},"source_type":{"type":"string","enum":["prediction_market","options"],"description":"options: implied from call/put prices at the nearest daily expiry, never blended with prediction-market windows."},"coin":{"type":"string"},"timeframe":{"type":"string"},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"prob_up":{"type":["number","null"]},"score":{"type":["integer","null"]},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"spread":{"type":["number","null"],"description":"Best ask − best bid; null for AMMs and for options readings (which carry liquidity_usd instead)."},"volume_usd":{"type":["number","null"],"description":"Volume as the venue reports it, refreshed every tick."},"liquidity_usd":{"type":["number","null"]},"depth_usd":{"type":["number","null"],"description":"Resting order size within 0.05 of the mid, both sides, in USD; null when the venue returns no book for free."},"derived":{"type":"boolean","description":"Interpolated from a strike ladder rather than a direct Up/Down market."},"bid":{"type":["number","null"],"description":"The Up share's best bid where the venue quotes the window directly (Polymarket, Kalshi 15m, Limitless, Gemini Up/Down); null for ladders and options."},"ask":{"type":["number","null"],"description":"The Up share's best ask, as bid."},"stale":{"type":"boolean"},"late_window":{"type":"boolean"},"market_url":{"type":"string","format":"uri"},"confidence":{"type":"object","description":"score = round(100 × quality × timing).","properties":{"score":{"type":"integer"},"label":{"type":"string","enum":["high","medium","low"]},"quality":{"type":"number"},"timing":{"type":"number"}}},"flags":{"type":"array","items":{"type":"string","enum":["outlier","degenerate_curve"]},"description":"Present only on a flagged reading, which is published but never blended. outlier: an options venue more than 0.3 from the median of the other options venues on its window. degenerate_curve: the option ladder's implied probabilities span less than 0.5, so prob_up is null."},"options":{"type":"object","description":"Options venues only: what the chain says beyond prob_up. Each field is null where the venue gives no input for it.","properties":{"p_at_spot":{"type":["number","null"],"description":"P(close > spot) read off the market's own price curve (the digital at spot, skew included), whatever route prob_up took."},"atm_iv":{"type":["number","null"],"description":"Mark IV of the call whose strike is nearest the forward (or spot without one), as a fraction."},"rr25":{"type":["number","null"],"description":"IV of the call with delta nearest +0.25 minus IV of the put with delta nearest −0.25; null where the venue gives no delta (Deribit) or either is more than 0.10 from it."},"forward_usd":{"type":["number","null"],"description":"The expiry's forward: Deribit underlying_price, Bybit underlyingPrice, OKX fwdPx; null on Binance."},"basis":{"type":["number","null"],"description":"forward_usd ÷ spot − 1, 5 decimals."},"method":{"type":"string","enum":["iv","curve"],"description":"How prob_up is read. iv: N(d2) from the venue's mark implied vol (the median of the strikes nearest the price), the forward (spot on Binance) and the time to expiry. curve: the price differences of adjacent calls, used when fewer than two strikes carry an IV, there is no forward or spot, or the expiry has passed."}}}}},"next":{"type":["object","null"],"properties":{"venue":{"type":"string"},"source_type":{"type":"string","enum":["prediction_market","options"],"description":"options: implied from call/put prices at the nearest daily expiry, never blended with prediction-market windows."},"coin":{"type":"string"},"timeframe":{"type":"string"},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"prob_up":{"type":["number","null"]},"score":{"type":["integer","null"]},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"spread":{"type":["number","null"],"description":"Best ask − best bid; null for AMMs and for options readings (which carry liquidity_usd instead)."},"volume_usd":{"type":["number","null"],"description":"Volume as the venue reports it, refreshed every tick."},"liquidity_usd":{"type":["number","null"]},"depth_usd":{"type":["number","null"],"description":"Resting order size within 0.05 of the mid, both sides, in USD; null when the venue returns no book for free."},"derived":{"type":"boolean","description":"Interpolated from a strike ladder rather than a direct Up/Down market."},"bid":{"type":["number","null"],"description":"The Up share's best bid where the venue quotes the window directly (Polymarket, Kalshi 15m, Limitless, Gemini Up/Down); null for ladders and options."},"ask":{"type":["number","null"],"description":"The Up share's best ask, as bid."},"stale":{"type":"boolean"},"late_window":{"type":"boolean"},"market_url":{"type":"string","format":"uri"},"confidence":{"type":"object","description":"score = round(100 × quality × timing).","properties":{"score":{"type":"integer"},"label":{"type":"string","enum":["high","medium","low"]},"quality":{"type":"number"},"timing":{"type":"number"}}},"flags":{"type":"array","items":{"type":"string","enum":["outlier","degenerate_curve"]},"description":"Present only on a flagged reading, which is published but never blended. outlier: an options venue more than 0.3 from the median of the other options venues on its window. degenerate_curve: the option ladder's implied probabilities span less than 0.5, so prob_up is null."},"options":{"type":"object","description":"Options venues only: what the chain says beyond prob_up. Each field is null where the venue gives no input for it.","properties":{"p_at_spot":{"type":["number","null"],"description":"P(close > spot) read off the market's own price curve (the digital at spot, skew included), whatever route prob_up took."},"atm_iv":{"type":["number","null"],"description":"Mark IV of the call whose strike is nearest the forward (or spot without one), as a fraction."},"rr25":{"type":["number","null"],"description":"IV of the call with delta nearest +0.25 minus IV of the put with delta nearest −0.25; null where the venue gives no delta (Deribit) or either is more than 0.10 from it."},"forward_usd":{"type":["number","null"],"description":"The expiry's forward: Deribit underlying_price, Bybit underlyingPrice, OKX fwdPx; null on Binance."},"basis":{"type":["number","null"],"description":"forward_usd ÷ spot − 1, 5 decimals."},"method":{"type":"string","enum":["iv","curve"],"description":"How prob_up is read. iv: N(d2) from the venue's mark implied vol (the median of the strikes nearest the price), the forward (spot on Binance) and the time to expiry. curve: the price differences of adjacent calls, used when fewer than two strikes carry an IV, there is no forward or spot, or the expiry has passed."}}}}}}}}}}},"regime":{"type":["object","null"],"description":"The daily regime strategy's call, decided once a day at 00:05 UTC on the Coinbase close of the day that just ended: long once the close is above sma50 × (1 + 1 × sigma20), flat once it is below sma50 × (1 − 1 × sigma20), unchanged in between. Uses no market data. Null for a coin with fewer than 200 daily closes or without that day's close.","properties":{"as_of":{"type":"string","format":"date","description":"The UTC day whose close decided it."},"call":{"type":"string","enum":["long","flat"]},"close":{"type":"number","description":"That day's close: the Coinbase Exchange last trade (else the Coinbase spot rate) at the collector's first run after 00:00 UTC; the daily candle's close for backfilled days."},"sma50":{"type":"number","description":"Mean of the last 50 daily closes."},"sigma20":{"type":"number","description":"Sample standard deviation of the last 20 daily log returns, as a fraction."},"upper":{"type":"number","description":"sma50 × (1 + sigma20): a flat call turns long above it."},"lower":{"type":"number","description":"sma50 × (1 − sigma20): a long call turns flat below it."},"distance_sigmas":{"type":"number","description":"(close ÷ sma50 − 1) ÷ sigma20, 2 decimals."},"days_in_state":{"type":"integer","description":"Consecutive days with this call, this one included, over the coin's whole history: the rule's own calls stand in for the days before PolySignals.net stored any."},"next_decision_at":{"type":"string","format":"date-time"},"intraday":{"type":["object","null"],"description":"The four-hour paper variant (strategy regime_4h, not relayed): at every 4-hour UTC boundary the Coinbase Exchange last trade against the same upper and lower band, long above upper, flat below lower, unchanged in between; seeded from the daily call. Null before its first check.","properties":{"call":{"type":"string","enum":["long","flat"]},"as_of":{"type":"string","format":"date-time","description":"The boundary this call was taken at."}}}}}}}}}}}}}}}},"/combined.json":{"get":{"summary":"Combined readings only, written once per minute","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","const":2},"generated_at":{"type":"string","format":"date-time"},"coins":{"type":"object","additionalProperties":{"type":"object","properties":{"spot_usd":{"type":["number","null"]},"overall":{"type":["object","null"],"properties":{"score":{"type":"integer"},"direction":{"type":"string"},"confidence":{"type":"integer"}}},"timeframes":{"type":"object","additionalProperties":{"type":"object","properties":{"current":{"type":["object","null"],"properties":{"prob_up":{"type":["number","null"],"description":"Quality-weighted mean of venue probabilities of Up (0..1)."},"score":{"type":["integer","null"],"minimum":-100,"maximum":100},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"late_window":{"type":"boolean","description":"Less than 20% of the window remains."},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"},"description":"Venues blended (quality > 0, or every priced venue in the equal-weighted fallback); a merged options reading lists each options venue in it."},"merged_options":{"type":"array","items":{"type":"string"},"description":"Options venues merged into one reading before blending: their median prob_up, counted as one source. An options venue more than 0.3 from the median of the others is left out and flagged \"outlier\". Empty when none were merged."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources (quality ≥ 0.2); null when fewer than two qualify."},"raw_divergence":{"type":["number","null"],"description":"max − min prob_up across every priced source regardless of quality; null when fewer than two are priced."},"confidence":{"type":"object","description":"score = round(100 × depth × agreement × timing).","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"label":{"type":"string","enum":["high","medium","low"]},"depth":{"type":"number","description":"1 − Π(1 − quality_i) over the independent sources blended (a window's options venues count as one, at the best member's quality)."},"agreement":{"type":"number","description":"clamp(1 − divergence / 0.2, 0, 1) with two or more qualifying sources; 0.7 otherwise."},"timing":{"type":"number","description":"0.5 when late in the window, else 1."},"sources":{"type":"integer","description":"Venues blended."},"independent_sources":{"type":"integer","description":"Readings blended once the window's options venues are merged into one; depth runs over these."},"qualifying_sources":{"type":"integer","description":"Independent sources with quality ≥ 0.2; only these corroborate each other."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources; null when fewer than two qualify."}}},"reference_price":{"type":["number","null"],"description":"The window's price at the open as stored for it: a venue's own price to beat (venue), the collector's Coinbase price taken in the window's first 3 minutes (collector_spot), or the open of the hourly spot candle that started a daily window (candle). Null for the next window and for a window that opened before one was stored."},"reference_source":{"type":["string","null"],"enum":["venue","collector_spot","candle",null]},"move_since_open":{"type":["number","null"],"description":"Price now (the Coinbase Exchange last trade, else spot_usd) ÷ reference_price − 1, 4 decimals."},"time_left":{"type":["number","null"],"description":"Fraction of the window remaining at generated_at, 3 decimals: 1 before it opens."}}},"next":{"type":["object","null"],"properties":{"prob_up":{"type":["number","null"],"description":"Quality-weighted mean of venue probabilities of Up (0..1)."},"score":{"type":["integer","null"],"minimum":-100,"maximum":100},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"late_window":{"type":"boolean","description":"Less than 20% of the window remains."},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"},"description":"Venues blended (quality > 0, or every priced venue in the equal-weighted fallback); a merged options reading lists each options venue in it."},"merged_options":{"type":"array","items":{"type":"string"},"description":"Options venues merged into one reading before blending: their median prob_up, counted as one source. An options venue more than 0.3 from the median of the others is left out and flagged \"outlier\". Empty when none were merged."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources (quality ≥ 0.2); null when fewer than two qualify."},"raw_divergence":{"type":["number","null"],"description":"max − min prob_up across every priced source regardless of quality; null when fewer than two are priced."},"confidence":{"type":"object","description":"score = round(100 × depth × agreement × timing).","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"label":{"type":"string","enum":["high","medium","low"]},"depth":{"type":"number","description":"1 − Π(1 − quality_i) over the independent sources blended (a window's options venues count as one, at the best member's quality)."},"agreement":{"type":"number","description":"clamp(1 − divergence / 0.2, 0, 1) with two or more qualifying sources; 0.7 otherwise."},"timing":{"type":"number","description":"0.5 when late in the window, else 1."},"sources":{"type":"integer","description":"Venues blended."},"independent_sources":{"type":"integer","description":"Readings blended once the window's options venues are merged into one; depth runs over these."},"qualifying_sources":{"type":"integer","description":"Independent sources with quality ≥ 0.2; only these corroborate each other."},"divergence":{"type":["number","null"],"description":"max − min prob_up among qualifying sources; null when fewer than two qualify."}}},"reference_price":{"type":["number","null"],"description":"The window's price at the open as stored for it: a venue's own price to beat (venue), the collector's Coinbase price taken in the window's first 3 minutes (collector_spot), or the open of the hourly spot candle that started a daily window (candle). Null for the next window and for a window that opened before one was stored."},"reference_source":{"type":["string","null"],"enum":["venue","collector_spot","candle",null]},"move_since_open":{"type":["number","null"],"description":"Price now (the Coinbase Exchange last trade, else spot_usd) ÷ reference_price − 1, 4 decimals."},"time_left":{"type":["number","null"],"description":"Fraction of the window remaining at generated_at, 3 decimals: 1 before it opens."}}}}}}}}}}}}}}}}},"/venues/{venue}.json":{"get":{"summary":"One venue's readings, written once per minute","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","enum":["polymarket","kalshi","limitless","gemini","binance_options","deribit_options","bybit_options","okx_options"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","const":2},"venue":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"coins":{"type":"object","additionalProperties":{"type":"object","properties":{"overall":{"type":["object","null"],"properties":{"score":{"type":"integer"},"direction":{"type":"string"},"confidence":{"type":"integer"}}},"timeframes":{"type":"object","additionalProperties":{"type":"object","properties":{"current":{"type":["object","null"],"properties":{"venue":{"type":"string"},"source_type":{"type":"string","enum":["prediction_market","options"],"description":"options: implied from call/put prices at the nearest daily expiry, never blended with prediction-market windows."},"coin":{"type":"string"},"timeframe":{"type":"string"},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"prob_up":{"type":["number","null"]},"score":{"type":["integer","null"]},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"spread":{"type":["number","null"],"description":"Best ask − best bid; null for AMMs and for options readings (which carry liquidity_usd instead)."},"volume_usd":{"type":["number","null"],"description":"Volume as the venue reports it, refreshed every tick."},"liquidity_usd":{"type":["number","null"]},"depth_usd":{"type":["number","null"],"description":"Resting order size within 0.05 of the mid, both sides, in USD; null when the venue returns no book for free."},"derived":{"type":"boolean","description":"Interpolated from a strike ladder rather than a direct Up/Down market."},"bid":{"type":["number","null"],"description":"The Up share's best bid where the venue quotes the window directly (Polymarket, Kalshi 15m, Limitless, Gemini Up/Down); null for ladders and options."},"ask":{"type":["number","null"],"description":"The Up share's best ask, as bid."},"stale":{"type":"boolean"},"late_window":{"type":"boolean"},"market_url":{"type":"string","format":"uri"},"confidence":{"type":"object","description":"score = round(100 × quality × timing).","properties":{"score":{"type":"integer"},"label":{"type":"string","enum":["high","medium","low"]},"quality":{"type":"number"},"timing":{"type":"number"}}},"flags":{"type":"array","items":{"type":"string","enum":["outlier","degenerate_curve"]},"description":"Present only on a flagged reading, which is published but never blended. outlier: an options venue more than 0.3 from the median of the other options venues on its window. degenerate_curve: the option ladder's implied probabilities span less than 0.5, so prob_up is null."},"options":{"type":"object","description":"Options venues only: what the chain says beyond prob_up. Each field is null where the venue gives no input for it.","properties":{"p_at_spot":{"type":["number","null"],"description":"P(close > spot) read off the market's own price curve (the digital at spot, skew included), whatever route prob_up took."},"atm_iv":{"type":["number","null"],"description":"Mark IV of the call whose strike is nearest the forward (or spot without one), as a fraction."},"rr25":{"type":["number","null"],"description":"IV of the call with delta nearest +0.25 minus IV of the put with delta nearest −0.25; null where the venue gives no delta (Deribit) or either is more than 0.10 from it."},"forward_usd":{"type":["number","null"],"description":"The expiry's forward: Deribit underlying_price, Bybit underlyingPrice, OKX fwdPx; null on Binance."},"basis":{"type":["number","null"],"description":"forward_usd ÷ spot − 1, 5 decimals."},"method":{"type":"string","enum":["iv","curve"],"description":"How prob_up is read. iv: N(d2) from the venue's mark implied vol (the median of the strikes nearest the price), the forward (spot on Binance) and the time to expiry. curve: the price differences of adjacent calls, used when fewer than two strikes carry an IV, there is no forward or spot, or the expiry has passed."}}}}},"next":{"type":["object","null"],"properties":{"venue":{"type":"string"},"source_type":{"type":"string","enum":["prediction_market","options"],"description":"options: implied from call/put prices at the nearest daily expiry, never blended with prediction-market windows."},"coin":{"type":"string"},"timeframe":{"type":"string"},"window_start":{"type":"string","format":"date-time"},"window_end":{"type":"string","format":"date-time"},"prob_up":{"type":["number","null"]},"score":{"type":["integer","null"]},"direction":{"type":["string","null"],"enum":["strong_up","up","neutral","down","strong_down",null]},"spread":{"type":["number","null"],"description":"Best ask − best bid; null for AMMs and for options readings (which carry liquidity_usd instead)."},"volume_usd":{"type":["number","null"],"description":"Volume as the venue reports it, refreshed every tick."},"liquidity_usd":{"type":["number","null"]},"depth_usd":{"type":["number","null"],"description":"Resting order size within 0.05 of the mid, both sides, in USD; null when the venue returns no book for free."},"derived":{"type":"boolean","description":"Interpolated from a strike ladder rather than a direct Up/Down market."},"bid":{"type":["number","null"],"description":"The Up share's best bid where the venue quotes the window directly (Polymarket, Kalshi 15m, Limitless, Gemini Up/Down); null for ladders and options."},"ask":{"type":["number","null"],"description":"The Up share's best ask, as bid."},"stale":{"type":"boolean"},"late_window":{"type":"boolean"},"market_url":{"type":"string","format":"uri"},"confidence":{"type":"object","description":"score = round(100 × quality × timing).","properties":{"score":{"type":"integer"},"label":{"type":"string","enum":["high","medium","low"]},"quality":{"type":"number"},"timing":{"type":"number"}}},"flags":{"type":"array","items":{"type":"string","enum":["outlier","degenerate_curve"]},"description":"Present only on a flagged reading, which is published but never blended. outlier: an options venue more than 0.3 from the median of the other options venues on its window. degenerate_curve: the option ladder's implied probabilities span less than 0.5, so prob_up is null."},"options":{"type":"object","description":"Options venues only: what the chain says beyond prob_up. Each field is null where the venue gives no input for it.","properties":{"p_at_spot":{"type":["number","null"],"description":"P(close > spot) read off the market's own price curve (the digital at spot, skew included), whatever route prob_up took."},"atm_iv":{"type":["number","null"],"description":"Mark IV of the call whose strike is nearest the forward (or spot without one), as a fraction."},"rr25":{"type":["number","null"],"description":"IV of the call with delta nearest +0.25 minus IV of the put with delta nearest −0.25; null where the venue gives no delta (Deribit) or either is more than 0.10 from it."},"forward_usd":{"type":["number","null"],"description":"The expiry's forward: Deribit underlying_price, Bybit underlyingPrice, OKX fwdPx; null on Binance."},"basis":{"type":["number","null"],"description":"forward_usd ÷ spot − 1, 5 decimals."},"method":{"type":"string","enum":["iv","curve"],"description":"How prob_up is read. iv: N(d2) from the venue's mark implied vol (the median of the strikes nearest the price), the forward (spot on Binance) and the time to expiry. curve: the price differences of adjacent calls, used when fewer than two strikes carry an IV, there is no forward or spot, or the expiry has passed."}}}}}}}}}}}}}}}}}}},"/history/{coin}.json":{"get":{"summary":"Last 48 hours: combined at 1-minute resolution, per venue at 5-minute resolution","parameters":[{"name":"coin","in":"path","required":true,"schema":{"type":"string","description":"Any coin a venue covers in meta.json venues[].coverage (a coin with only a regime call has no history file)"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"resolution":{"type":"object","properties":{"combined":{"type":"string"},"venues":{"type":"string"}}},"range_hours":{"type":"integer"},"timeframes":{"type":"object","additionalProperties":{"type":"object","properties":{"combined":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"prob_up":{"type":["number","null"]},"score":{"type":["integer","null"]},"confidence":{"type":["integer","null"]}}}},"venues":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"prob_up":{"type":["number","null"]},"score":{"type":["integer","null"]},"confidence":{"type":["integer","null"]}}}}}}}}}}}}}}}},"/results.json":{"get":{"summary":"Live backtest: what following each strategy's calls on Coinbase USD markets has returned per coin, written every minute","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","const":1},"results_version":{"type":"string","description":"Rules of the simulation; a change restarts it."},"methodology_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"fee":{"type":"number","description":"Fee per fill assumed."},"strategies":{"type":"array","items":{"type":"string","enum":["5m","15m","1h","4h","1d","overall","regime","regime_4h"]}},"coins":{"type":"object","additionalProperties":{"type":"object","properties":{"started_at":{"type":"string","format":"date-time","description":"First minute with a Coinbase Exchange ticker and a scored reading."},"last_seen":{"type":"string","format":"date-time"},"spot_usd":{"type":"number","description":"The price the equity is marked at: the Coinbase Exchange last trade, or the Coinbase spot rate in a minute without a ticker."},"buy_hold":{"type":"object","properties":{"return":{"type":"number","description":"Bought at the start's ask with one fee, held since."},"max_drawdown":{"type":"number","description":"Largest peak-to-trough fall."}}},"strategies":{"type":"object","description":"Keys: 5m, 15m, 1h, 4h, 1d (following that window's combined reading), overall, regime (the daily regime call in signals.json: long reads as Buy, flat as Sell) and regime_4h (that block's four-hour intraday call, read the same way).","additionalProperties":{"type":"object","description":"Following one strategy's calls on the coin's Coinbase USD market, long-only, from started_at. Fractions, not percentages.","properties":{"return":{"type":"number","description":"Equity now ÷ starting capital − 1, net of fees."},"gross_return":{"type":"number","description":"The same fills without fees: equity ÷ starting capital − 1 before fees (bid/ask spread included)."},"trades":{"type":"integer","description":"Completed round trips (a buy followed by a sell)."},"fills":{"type":"integer","description":"Fills so far, buys plus sells; each paid the fee."},"win_rate":{"type":["number","null"],"description":"Round trips that made money ÷ trades; null without a trade."},"avg_trade":{"type":["number","null"],"description":"Mean net return per round trip; null without a trade."},"max_drawdown":{"type":"number","description":"Largest peak-to-trough fall of the equity."},"time_in_market":{"type":"number","description":"Share of priced minutes spent holding the coin."},"fees_paid":{"type":"number","description":"Fees paid so far, 0.006 of every fill, in units of the starting capital."},"position":{"type":"string","enum":["usd","coin"]},"since":{"type":["string","null"],"format":"date-time","description":"When the current coin position was entered."},"entry_price":{"type":["number","null"]},"call":{"type":"string","enum":["buy","sell","hold"],"description":"The call the strategy holds right now."}}}}}}}}}}}}}}},"/results/{coin}.json":{"get":{"summary":"One coin's live backtest with its recent trades and equity curve, written every 5 minutes","parameters":[{"name":"coin","in":"path","required":true,"schema":{"type":"string","description":"Any coin in results.json (coins with a Coinbase USD market)"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","const":1},"results_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"coin":{"type":"string"},"fee":{"type":"number"},"started_at":{"type":"string","format":"date-time","description":"First minute with a Coinbase Exchange ticker and a scored reading."},"last_seen":{"type":"string","format":"date-time"},"spot_usd":{"type":"number","description":"The price the equity is marked at: the Coinbase Exchange last trade, or the Coinbase spot rate in a minute without a ticker."},"buy_hold":{"type":"object","properties":{"return":{"type":"number","description":"Bought at the start's ask with one fee, held since."},"max_drawdown":{"type":"number","description":"Largest peak-to-trough fall."}}},"strategies":{"type":"object","description":"Keys: 5m, 15m, 1h, 4h, 1d (following that window's combined reading), overall, regime (the daily regime call in signals.json: long reads as Buy, flat as Sell) and regime_4h (that block's four-hour intraday call, read the same way).","additionalProperties":{"type":"object","description":"Following one strategy's calls on the coin's Coinbase USD market, long-only, from started_at. Fractions, not percentages.","properties":{"return":{"type":"number","description":"Equity now ÷ starting capital − 1, net of fees."},"gross_return":{"type":"number","description":"The same fills without fees: equity ÷ starting capital − 1 before fees (bid/ask spread included)."},"trades":{"type":"integer","description":"Completed round trips (a buy followed by a sell)."},"fills":{"type":"integer","description":"Fills so far, buys plus sells; each paid the fee."},"win_rate":{"type":["number","null"],"description":"Round trips that made money ÷ trades; null without a trade."},"avg_trade":{"type":["number","null"],"description":"Mean net return per round trip; null without a trade."},"max_drawdown":{"type":"number","description":"Largest peak-to-trough fall of the equity."},"time_in_market":{"type":"number","description":"Share of priced minutes spent holding the coin."},"fees_paid":{"type":"number","description":"Fees paid so far, 0.006 of every fill, in units of the starting capital."},"position":{"type":"string","enum":["usd","coin"]},"since":{"type":["string","null"],"format":"date-time","description":"When the current coin position was entered."},"entry_price":{"type":["number","null"]},"call":{"type":"string","enum":["buy","sell","hold"],"description":"The call the strategy holds right now."}}}},"trades":{"type":"object","description":"Per strategy, the last 100 fills, oldest first.","additionalProperties":{"type":"array","items":{"type":"object","properties":{"side":{"type":"string","enum":["buy","sell"]},"t":{"type":"string","format":"date-time"},"price":{"type":"number","description":"Fill price: the Coinbase Exchange ask (buy) or bid (sell), 1 minute after the call changed."},"equity":{"type":"number","description":"Equity right after the fill, marked at the last trade price, starting capital = 1."},"return":{"type":"number","description":"Sell only: the round trip's net return."}}}}},"curve":{"type":"object","properties":{"interval_min":{"type":"integer","const":15},"columns":{"type":"array","items":{"type":"string"},"description":"t, spot, 5m, 15m, 1h, 4h, 1d, overall, regime, regime_4h, buy_hold, 5m_gross, 15m_gross, 1h_gross, 4h_gross, 1d_gross, overall_gross, regime_gross, regime_4h_gross: t, spot, the net equity per strategy, buy & hold, then each strategy's gross equity (the same fills without fees)."},"rows":{"type":"array","description":"Every 15 minutes for the last 48 hours, hourly up to 30 days, daily beyond.","items":{"type":"array","prefixItems":[{"type":"string","format":"date-time"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"}],"minItems":19,"maxItems":19}}}}}}}}}}}},"/meta.json":{"get":{"summary":"Coins, timeframes, venues (with coverage), thresholds and methodology version","responses":{"200":{"description":"OK"}}}},"/markets.json":{"get":{"summary":"The markets on Cryptohopper's exchanges that receive the daily trend signals: per exchange its name, market count and each coin's markets in the exchange's own format; rewritten after each market-list refresh (about daily), cached 10 minutes","responses":{"200":{"description":"OK","content":{"application/json":{}}}}}},"/deliveries.json":{"get":{"summary":"The signaler's recent daily trend signals, newest first: coin, buy or sell, first and last send, and how many markets accepted, refused or let expire each, with the exchanges it reached and, while a decision is still sending, how many it has yet to reach (queued); rewritten after every send, cached 1 minute","responses":{"200":{"description":"OK","content":{"application/json":{}}}}}},"/trend-history.json":{"get":{"summary":"Each coin's daily trend call over the latest 90 closes: `days` (UTC dates, oldest first) and per coin one letter a day, L long, F flat, - no close; rewritten after every 00:05 UTC decision, cached 10 minutes","responses":{"200":{"description":"OK","content":{"application/json":{}}}}}},"/live/index.md":{"get":{"summary":"Every coin's overall call and daily regime state as markdown, for clients that do not run JavaScript; rendered on request, cached 30 s","responses":{"200":{"description":"OK","content":{"text/markdown":{}}}}}},"/live/{coin}.md":{"get":{"summary":"One coin's current and next window per timeframe, per-venue readings, daily regime call, the Cryptohopper markets that get its signals with its latest delivery, the live backtest and the newest headlines that name it, as markdown; cached 30 s","parameters":[{"name":"coin","in":"path","required":true,"schema":{"type":"string","description":"Upper-case ticker from meta.json; a lower-case one redirects"}}],"responses":{"200":{"description":"OK","content":{"text/markdown":{}}},"404":{"description":"Unknown coin"}}}},"/live/trend.md":{"get":{"summary":"The daily trend changes (coins that turned long or flat at each 00:05 UTC decision, the signals sent to Cryptohopper) as markdown; cached 5 minutes","responses":{"200":{"description":"OK","content":{"text/markdown":{}}}}}},"/live/markets.md":{"get":{"summary":"Every Cryptohopper market that receives the daily trend signals as markdown: the exchanges with their counts, then each exchange's markets per coin; cached 1 hour","responses":{"200":{"description":"OK","content":{"text/markdown":{}}}}}},"/live/markets/{exchange}.md":{"get":{"summary":"One exchange's Cryptohopper markets that receive the daily trend signals, per coin, as markdown; cached 1 hour","parameters":[{"name":"exchange","in":"path","required":true,"schema":{"type":"string","description":"Cryptohopper exchange key from markets.json (binance, kraken2, crypto, ...)"}}],"responses":{"200":{"description":"OK","content":{"text/markdown":{}}},"404":{"description":"Unknown exchange; the body lists the keys"}}}},"/live/trend.xml":{"get":{"summary":"The same daily trend changes as an Atom feed, one entry per decision; cached 5 minutes","responses":{"200":{"description":"OK","content":{"application/atom+xml":{}}}}}},"/live/trend/{coin}.xml":{"get":{"summary":"One coin's daily trend changes as an Atom feed, one entry per change; cached 5 minutes","parameters":[{"name":"coin","in":"path","required":true,"schema":{"type":"string","description":"Upper-case ticker from meta.json; a lower-case one redirects"}}],"responses":{"200":{"description":"OK","content":{"application/atom+xml":{}}},"404":{"description":"Unknown coin"}}}},"/live/news.json":{"get":{"summary":"The latest crypto headlines from CoinArticle with the tracked coins each one names; read from CoinArticle's RSS feed at most every 5 minutes, cached 5 minutes","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","const":1},"generated_at":{"type":"string","format":"date-time"},"source":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"},"summary":{"type":"string"},"published_at":{"type":"string","format":"date-time"},"categories":{"type":"array","items":{"type":"string"}},"image":{"type":["string","null"],"format":"uri"},"coins":{"type":"array","items":{"type":"string"},"description":"Tickers the title or summary names, in order of first mention"}}}}}}}}}}}},"/openapi.json":{"get":{"summary":"This document","responses":{"200":{"description":"OK"}}}}}}