{"openapi":"3.1.0","info":{"title":"Range Expansion & Contraction API","version":"1.0.0","description":"The volatility-coiling setups breakout traders hunt, computed live from Yahoo Finance daily OHLC — no key, nothing stored. Markets do not trend or chop at random: tight-range days cluster and precede expansion, and the classic edge — Toby Crabel's NR7 (the narrowest daily range of the last seven), the inside day (a bar wholly inside the prior one) and the outside day (a bar that engulfs it) — is that a coiled spring releases. This API measures the coil and the release. For each instrument it returns today's range as a percentile of its recent range (low = contracted/coiling, high = already expanded), whether today is an NR7, NR4, inside or outside day, the average daily range, and the historical frequency of each setup. Crucially it also returns the follow-through: after an NR7, how often the next day broke the NR7 day's high or low and how often its range expanded — the base rate that tells you whether the coil is worth trading. The asset endpoint returns one instrument's full range profile; the screener endpoint ranks the universe by contraction (most coiled, lowest current range percentile — the breakout candidates) or by realised range. This is the range-contraction / NR7 breakout-setup cut — distinct from the candlestick-pattern API (named reversal/continuation shapes, not range size), the volatility dashboard (level, not the coil), and the gap and price APIs. It is the squeeze before the move.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/rangeexpansion-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 contraction, range or outside-day frequency","description":"","parameters":[{"name":"metric","in":"query","required":false,"description":"contraction, range or outside_freq","schema":{"type":"string"},"example":"contraction"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (60-1000)","schema":{"type":"string"},"example":"252"},{"name":"class","in":"query","required":false,"description":"index, sector, commodity, bond, stock or all","schema":{"type":"string"},"example":"all"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Ranked by contraction over window_days of daily OHLC. current_range_percentile places today's high-low range in its recent distribution: low = contracted/coiling (breakout candidate), high = already expanded. is_nr7 marks the narrowest range of the last seven days. Read fresh per call, nothing cached.","class":"all","count":20,"metric":"contraction","source":"Yahoo Finance","results":[{"name":"Nvidia","rank":1,"class":"stock","is_nr7":false,"symbol":"NVDA","available":true,"avg_range_pct":2.82,"is_inside_day":false,"is_outside_day":false,"current_range_pct":2.99,"outside_day_freq_pct":15.1,"current_range_percentile":65.9},{"name":"Meta Platforms","rank":2,"class":"stock","is_nr7":false,"symbol":"META","available":true,"avg_range_pct":2.38,"is_inside_day":false,"is_outside_day":false,"current_range_pct":2.67,"outside_day_freq_pct":8.8,"current_range_percentile":72.2},{"name":"Financials Sector","rank":3,"class":"sector","is_nr7":false,"symbol":"XLF","available":true,"avg_range_pct":1.23,"is_inside_day":false,"is_outside_day":false,"current_range_pct":1.39,"outside_day_freq_pct":12.4,"current_range_percentile":73.8},{"name":"Amazon","rank":4,"class":"stock","is_nr7":false,"symbol":"AMZN","available":true,"avg_range_pct":2.24,"is_inside_day":false,"is_outside_day":false,"current_range_pct":2.88,"outside_day_freq_pct":8,"current_range_percentile":79.8},{"name":"Apple","rank":5,"class":"stock","is_nr7":false,"symbol":"AAPL","available":true,"avg_range_pct":1.97,"is_inside_day":false,"is_outside_day":false,"current_range_pct":2.51,"outside_day_freq_pct":10.4,"current_range_percentile":82.1},{"name":"Tesla","rank":6,"class":"stock","is_nr7":false,"symbol":"TSLA","available":true,"avg_range_pct":3.65,"is_inside_day":false,"is_outside_day":false,"current_range_pct":4.73,"outside_day_freq_pct":8,"current_range_percentile":83.3},{"name":"Russell 2000 ETF","rank":7,"class":"index","is_nr7":false,"symbol":"IWM","available":true,"avg_range_pct":1.6,"is_inside_day":false,"is_outside_day":false,"current_range_pct":2.41,"outside_day_freq_pct":12.7,"current_range_percentile":86.9},{"name":"Alphabet","rank":8,"class":"stock","is_nr7":false,"symbol":"GOOGL","available":true,"avg_range_pct":2.41,"is_inside_day":false,"is_outside_day":false,"current_range_pct":3.48,"outside_day_freq_pct":8.8,"current_range_percentile":86.9},{"name":"AMD","rank":9,"class":"stock","is_nr7":false,"symbol":"AMD","available":true,"avg_range_pct":4.34,"is_inside_day":false,"is_outside_day":false,"current_range_pct":6.64,"outside_day_freq_pct":10.8,"current_range_percentile":89.3},{"name":"Microsoft","rank":10,"class":"stock","is_nr7":false,"symbol":"MSFT","available":true,"avg_range_pct":1.87,"is_inside_day":false,"is_outside_day":false,"current_range_pct":3.29,"outside_day_freq_pct":5.2,"current_range_percentile":92.1},{"name":"High-Yield Credit","rank":11,"class":"bond","is_nr7":false,"symbol":"HYG","available":true,"avg_range_pct":0.27,"is_inside_day":false,"is_outside_day":false,"current_range_pct":0.56,"outside_day_freq_pct":8,"current_range_percentile":94.4},{"name":"Silver ETF","rank":12,"class":"commodity","is_nr7":false,"symbol":"SLV","available":true,"avg_range_pct":2.88,"is_inside_day":false,"is_outside_day":true,"current_range_pct":6.25,"outside_day_freq_pct":5.2,"current_range_percentile":94.8},{"name":"Dow Jones ETF","rank":13,"class":"index","is_nr7":false,"symbol":"DIA","available":true,"avg_range_pct":1,"is_inside_day":false,"is_outside_day":false,"current_range_pct":1.8,"outside_day_freq_pct":10,"current_range_percentile":95.2},{"name":"Crude Oil ETF","rank":14,"class":"commodity","is_nr7":false,"symbol":"USO","available":true,"avg_range_pct":2.58,"is_inside_day":false,"is_outside_day":false,"current_range_pct":6.3,"outside_day_freq_pct":8.8,"current_range_percentile":96},{"name":"20Y+ Treasuries","rank":15,"class":"bond","is_nr7":false,"symbol":"TLT","available":true,"avg_range_pct":0.63,"is_inside_day":false,"is_outside_day":false,"current_range_pct":1.16,"outside_day_freq_pct":9.6,"current_range_percentile":96.4},{"name":"Energy Sector","rank":16,"class":"sector","is_nr7":false,"symbol":"XLE","available":true,"avg_range_pct":1.78,"is_inside_day":false,"is_outside_day":false,"current_range_pct":3.38,"outside_day_freq_pct":8,"current_range_percentile":96.8},{"name":"S&P 500 ETF","rank":17,"class":"index","is_nr7":false,"symbol":"SPY","available":true,"avg_range_pct":0.94,"is_inside_day":false,"is_outside_day":true,"current_range_pct":2.11,"outside_day_freq_pct":11.2,"current_range_percentile":97.6},{"name":"Gold ETF","rank":18,"class":"commodity","is_nr7":false,"symbol":"GLD","available":true,"avg_range_pct":1.4,"is_inside_day":false,"is_outside_day":true,"current_range_pct":3.97,"outside_day_freq_pct":8.4,"current_range_percentile":97.6},{"name":"Technology Sector","rank":19,"class":"sector","is_nr7":false,"symbol":"XLK","available":true,"avg_range_pct":1.69,"is_inside_day":false,"is_outside_day":false,"current_range_pct":3.91,"outside_day_freq_pct":8.8,"current_range_percentile":98},{"name":"Nasdaq 100 ETF","rank":20,"class":"index","is_nr7":false,"symbol":"QQQ","available":true,"avg_range_pct":1.29,"is_inside_day":false,"is_outside_day":false,"current_range_pct":3.26,"outside_day_freq_pct":9.6,"current_range_percentile":98.4}],"nr7_today":[],"sorted_by":"current_range_percentile","most_coiled":{"is_nr7":false,"symbol":"NVDA","range_percentile":65.9},"unavailable":[],"window_days":252},"meta":{"timestamp":"2026-06-12T10:34:42.045Z","request_id":"30f10b1a-508d-41c1-81a1-3c88140bfbf7"},"status":"ok","message":"Range 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 range profile with NR7/inside/outside flags and NR7 follow-through","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 (60-1000)","schema":{"type":"string"},"example":"252"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"S&P 500 ETF","note":"Daily range = high - low. current_range_percentile is today's range within the window. NR7/NR4 = narrowest range of the last 7/4 days; inside/outside days compare the band to the prior bar. nr7_breakout_rate = share of NR7 days whose next day broke the NR7 high or low (>=5 samples or null). Read fresh per call, nothing cached.","class":"index","reads":{"setup":"outside day — range engulfed yesterday's, volatility expanding","state":"expanded — wide range day, move may be exhausting","nr7_edge":"after an NR7, the next day broke its high or low 100% of the time historically"},"today":{"is_nr4":false,"is_nr7":false,"is_inside_day":false,"is_outside_day":true},"source":"Yahoo Finance","symbol":"SPY","window_days":252,"nr4_freq_pct":28.9,"nr7_freq_pct":17.9,"observations":252,"avg_range_pct":0.94,"current_range_pct":2.11,"nr7_follow_samples":44,"inside_day_freq_pct":8,"outside_day_freq_pct":11.2,"nr7_breakout_rate_pct":100,"nr7_expansion_rate_pct":75,"current_range_percentile":97.6},"meta":{"timestamp":"2026-06-12T10:34:42.147Z","request_id":"1b424293-67ef-496f-bc6b-35d247997b01"},"status":"ok","message":"Asset range 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 — liquid index/sector/commodity/bond ETFs and large-cap stocks. 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":"Dow Jones ETF","class":"index","symbol":"DIA"},{"name":"Technology Sector","class":"sector","symbol":"XLK"},{"name":"Financials Sector","class":"sector","symbol":"XLF"},{"name":"Energy Sector","class":"sector","symbol":"XLE"},{"name":"Gold ETF","class":"commodity","symbol":"GLD"},{"name":"Silver ETF","class":"commodity","symbol":"SLV"},{"name":"Crude Oil ETF","class":"commodity","symbol":"USO"},{"name":"20Y+ Treasuries","class":"bond","symbol":"TLT"},{"name":"High-Yield Credit","class":"bond","symbol":"HYG"},{"name":"Apple","class":"stock","symbol":"AAPL"},{"name":"Microsoft","class":"stock","symbol":"MSFT"},{"name":"Nvidia","class":"stock","symbol":"NVDA"},{"name":"Tesla","class":"stock","symbol":"TSLA"},{"name":"Amazon","class":"stock","symbol":"AMZN"},{"name":"Meta Platforms","class":"stock","symbol":"META"},{"name":"Alphabet","class":"stock","symbol":"GOOGL"},{"name":"AMD","class":"stock","symbol":"AMD"}],"source":"Yahoo Finance","classes":["index","sector","commodity","bond","stock"]},"meta":{"timestamp":"2026-06-12T10:34:42.258Z","request_id":"6d72cbd9-7cf5-4301-b522-844b43dc549a"},"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 contraction (default, most coiled first), range or outside_freq. window is 60-1000 trading days (default 252). class filters to index/sector/commodity/bond/stock (default all). NR7 = narrowest daily range of the last 7 days; inside/outside days compare to the prior bar. Read fresh per call, nothing cached.","source":"Yahoo Finance daily OHLC, live","classes":["index","sector","commodity","bond","stock"],"metrics":["contraction","range","outside_freq"],"service":"rangeexpansion-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/asset":"Full range profile with NR7/inside/outside flags and NR7 follow-through (symbol=SPY, window=252).","GET /v1/screener":"Rank the universe by contraction, range or outside-day frequency (metric=contraction, window=252, class=all).","GET /v1/universe":"The universe and its classes."},"description":"Range expansion & contraction — the volatility-coiling setups breakout traders hunt, live from Yahoo Finance daily OHLC (no key, nothing stored). For each instrument it returns today's range as a percentile of its recent range (low = coiling), whether today is an NR7/NR4, inside or outside day, the average daily range, the frequency of each setup, and the follow-through after an NR7 (how often the next day broke its high/low or expanded). asset returns one instrument's full range profile; screener ranks the universe by contraction (most coiled — breakout candidates) or realised range. The range-contraction / NR7 breakout-setup cut — distinct from the candlestick-pattern API, the volatility dashboard, and the gap and price APIs.","universe_size":20,"upstream_status":"ok","most_coiled_252d":"NVDA"},"meta":{"timestamp":"2026-06-12T10:34:42.453Z","request_id":"6c69ab18-4f74-4eb8-821a-128c7a25b6a3"},"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":635,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1230,"monthly_call_quota":13700,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3900,"monthly_call_quota":77000,"rps_limit":16,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":8620,"monthly_call_quota":450000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/rangeexpansion-api"}