{"openapi":"3.1.0","info":{"title":"Streak Analysis & Reversal Odds API","version":"1.0.0","description":"The consecutive up- and down-day runs swing-traders fade, with the historical probability that a run reverses, computed live from Yahoo Finance daily closes — no key, nothing stored. \"It has gone up five days in a row, it is due a pullback\" is a guess until you put a number on it. This API counts every up- and down-day run in an instrument's history and measures, for each run length, how often the very next day reversed it — turning a gut feeling into a base rate. For each instrument it returns the current streak (its direction and length), the longest up and down streaks in the window, the average run length, the full distribution of run lengths, and the reversal table: after k consecutive up (or down) days, the share of times the next day went the other way, with the sample size behind each figure. If a name is currently on a streak it also returns the historical odds that tomorrow reverses it — the one number a mean-reversion trader wants. The asset endpoint returns one instrument's full streak profile; the screener endpoint ranks the universe by how stretched each is right now (current streak length), so you can see what is most extended. This is the consecutive-run / reversal-odds cut — distinct from the Hurst persistence-regime API, the multi-timeframe momentum API, the candlestick-pattern API and the price feeds. It is the runs, counted, with the odds attached.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/streak-api","description":"oanor gateway"}],"tags":[{"name":"Screener"},{"name":"Asset"},{"name":"Universe"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/screener":{"get":{"operationId":"get_v1_screener","tags":["Screener"],"summary":"Rank the universe by current streak, reversal odds or longest streak","description":"","parameters":[{"name":"metric","in":"query","required":false,"description":"current_streak, reversal or longest","schema":{"type":"string"},"example":"current_streak"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (120-2000)","schema":{"type":"string"},"example":"504"},{"name":"class","in":"query","required":false,"description":"index, sector, commodity, bond, stock, crypto or all","schema":{"type":"string"},"example":"all"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Ranked by current_streak over window_days of daily closes. current_streak_length is how many consecutive up/down days the instrument is on right now; current_reversal_prob_pct is the historical share of times a streak of that length reversed the next day. Read fresh per call, nothing cached.","class":"all","count":20,"metric":"current_streak","source":"Yahoo Finance","results":[{"name":"Utilities Sector","rank":1,"class":"sector","symbol":"XLU","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":3,"current_streak_length":3,"current_reversal_prob_pct":23.5},{"name":"Apple","rank":2,"class":"stock","symbol":"AAPL","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":2,"current_streak_length":2,"current_reversal_prob_pct":40.8},{"name":"Bitcoin","rank":3,"class":"crypto","symbol":"BTC-USD","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":2,"current_streak_length":2,"current_reversal_prob_pct":54.4},{"name":"Ethereum","rank":4,"class":"crypto","symbol":"ETH-USD","available":true,"longest_overall":9,"current_direction":"up","abs_current_streak":2,"current_streak_length":2,"current_reversal_prob_pct":60},{"name":"S&P 500 ETF","rank":5,"class":"index","symbol":"SPY","available":true,"longest_overall":9,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":46},{"name":"Nasdaq 100 ETF","rank":6,"class":"index","symbol":"QQQ","available":true,"longest_overall":13,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":48.4},{"name":"Russell 2000 ETF","rank":7,"class":"index","symbol":"IWM","available":true,"longest_overall":7,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":47},{"name":"Developed ex-US","rank":8,"class":"index","symbol":"EFA","available":true,"longest_overall":7,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":53},{"name":"Emerging Markets","rank":9,"class":"index","symbol":"EEM","available":true,"longest_overall":11,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":48.5},{"name":"Technology Sector","rank":10,"class":"sector","symbol":"XLK","available":true,"longest_overall":16,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":48.4},{"name":"Financials Sector","rank":11,"class":"sector","symbol":"XLF","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":46.8},{"name":"Energy Sector","rank":12,"class":"sector","symbol":"XLE","available":true,"longest_overall":8,"current_direction":"down","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":56.1},{"name":"Gold ETF","rank":13,"class":"commodity","symbol":"GLD","available":true,"longest_overall":9,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":48.1},{"name":"Silver ETF","rank":14,"class":"commodity","symbol":"SLV","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":46.3},{"name":"Crude Oil ETF","rank":15,"class":"commodity","symbol":"USO","available":true,"longest_overall":7,"current_direction":"down","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":53.4},{"name":"Broad Commodities","rank":16,"class":"commodity","symbol":"DBC","available":true,"longest_overall":8,"current_direction":"down","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":57.4},{"name":"20Y+ Treasuries","rank":17,"class":"bond","symbol":"TLT","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":48.8},{"name":"High-Yield Credit","rank":18,"class":"bond","symbol":"HYG","available":true,"longest_overall":8,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":51.4},{"name":"Nvidia","rank":19,"class":"stock","symbol":"NVDA","available":true,"longest_overall":11,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":59.1},{"name":"Tesla","rank":20,"class":"stock","symbol":"TSLA","available":true,"longest_overall":11,"current_direction":"up","abs_current_streak":1,"current_streak_length":1,"current_reversal_prob_pct":51.6}],"sorted_by":"abs_current_streak","unavailable":[],"window_days":504,"most_extended":{"length":3,"symbol":"XLU","direction":"up"}},"meta":{"timestamp":"2026-06-12T10:34:42.802Z","request_id":"667935e8-6b86-4f30-a7d5-00a9d8a3e897"},"status":"ok","message":"Streak screener retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/asset":{"get":{"operationId":"get_v1_asset","tags":["Asset"],"summary":"Full streak profile with reversal tables and today's odds","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Universe symbol","schema":{"type":"string"},"example":"SPY"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (120-2000)","schema":{"type":"string"},"example":"504"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"S&P 500 ETF","note":"An up day is a close at or above the prior close. The reversal tables give, for each run length, the empirical share of times the next day reversed the run. current_reversal_prob_pct applies that to the current streak. Base rates need >=4 occurrences or are null. Read fresh per call, nothing cached.","read":"on a 1-day up streak; historically 46% of streaks this long reversed down the next day","class":"index","source":"Yahoo Finance","symbol":"SPY","window_days":504,"observations":504,"avg_up_streak":2.32,"current_streak":{"length":1,"direction":"up"},"avg_down_streak":1.71,"longest_overall":9,"longest_up_streak":9,"up_reversal_table":{"1":{"occurrences":124,"reversal_prob_pct":46},"2":{"occurrences":67,"reversal_prob_pct":44.8},"3":{"occurrences":37,"reversal_prob_pct":32.4},"4":{"occurrences":25,"reversal_prob_pct":32},"5+":{"occurrences":36,"reversal_prob_pct":47.2}},"down_reversal_table":{"1":{"occurrences":125,"reversal_prob_pct":58.4},"2":{"occurrences":52,"reversal_prob_pct":51.9},"3":{"occurrences":25,"reversal_prob_pct":60},"4":{"occurrences":10,"reversal_prob_pct":80},"5+":{"occurrences":2}},"longest_down_streak":5,"up_streak_distribution":{"1":58,"2":30,"3":12,"4":8,"5+":17},"down_streak_distribution":{"1":73,"2":27,"3":15,"4":8,"5+":2},"current_reversal_prob_pct":46},"meta":{"timestamp":"2026-06-12T10:34:42.901Z","request_id":"79473f03-7485-41b8-89fb-31507c5fa72c"},"status":"ok","message":"Asset streak profile retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/universe":{"get":{"operationId":"get_v1_universe","tags":["Universe"],"summary":"The universe and its classes","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"The universe the screener ranks. Pass class= to a screener call to rank within one class.","count":20,"assets":[{"name":"S&P 500 ETF","class":"index","symbol":"SPY"},{"name":"Nasdaq 100 ETF","class":"index","symbol":"QQQ"},{"name":"Russell 2000 ETF","class":"index","symbol":"IWM"},{"name":"Developed ex-US","class":"index","symbol":"EFA"},{"name":"Emerging Markets","class":"index","symbol":"EEM"},{"name":"Technology Sector","class":"sector","symbol":"XLK"},{"name":"Financials Sector","class":"sector","symbol":"XLF"},{"name":"Energy Sector","class":"sector","symbol":"XLE"},{"name":"Utilities Sector","class":"sector","symbol":"XLU"},{"name":"Gold ETF","class":"commodity","symbol":"GLD"},{"name":"Silver ETF","class":"commodity","symbol":"SLV"},{"name":"Crude Oil ETF","class":"commodity","symbol":"USO"},{"name":"Broad Commodities","class":"commodity","symbol":"DBC"},{"name":"20Y+ Treasuries","class":"bond","symbol":"TLT"},{"name":"High-Yield Credit","class":"bond","symbol":"HYG"},{"name":"Apple","class":"stock","symbol":"AAPL"},{"name":"Nvidia","class":"stock","symbol":"NVDA"},{"name":"Tesla","class":"stock","symbol":"TSLA"},{"name":"Bitcoin","class":"crypto","symbol":"BTC-USD"},{"name":"Ethereum","class":"crypto","symbol":"ETH-USD"}],"source":"Yahoo Finance","classes":["index","sector","commodity","bond","stock","crypto"]},"meta":{"timestamp":"2026-06-12T10:34:42.999Z","request_id":"b7b1a5ef-438f-43f7-b8d3-580984a1a79b"},"status":"ok","message":"Universe retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"metric is current_streak (default, most extended now), reversal or longest. window is 120-2000 trading days (default 504, ~2 years, for robust base rates). class filters to index/sector/commodity/bond/stock/crypto (default all). An up day is a close at or above the prior close. Read fresh per call, nothing cached.","source":"Yahoo Finance daily closes, live","classes":["index","sector","commodity","bond","stock","crypto"],"metrics":["current_streak","reversal","longest"],"service":"streak-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/asset":"Full streak profile with reversal tables and today's odds (symbol=SPY, window=504).","GET /v1/screener":"Rank the universe by current streak length, reversal odds or longest streak (metric=current_streak, window=504, class=all).","GET /v1/universe":"The universe and its classes."},"description":"Streak analysis & reversal odds — the consecutive up- and down-day runs swing-traders fade, with the historical probability a run reverses, live from Yahoo Finance daily closes (no key, nothing stored). For each instrument it returns the current streak (direction and length), the longest up/down streaks, the average run length, the run-length distribution, and the reversal table (after k consecutive up/down days, how often the next day reversed). If a name is on a streak, it also returns the odds tomorrow reverses it. asset returns one instrument's full streak profile; screener ranks the universe by how extended each is right now. The consecutive-run / reversal-odds cut — distinct from the Hurst persistence API, the multi-timeframe momentum API, the candlestick-pattern API and the price feeds.","universe_size":20,"upstream_status":"ok","most_extended_symbol":"XLU","streak_lengths_tracked":"5+"},"meta":{"timestamp":"2026-06-12T10:34:43.282Z","request_id":"dccfcc7e-39cb-4eec-95cd-078adab553a0"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":715,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1160,"monthly_call_quota":15400,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3540,"monthly_call_quota":86500,"rps_limit":16,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":7940,"monthly_call_quota":474000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/streak-api"}