{"openapi":"3.1.0","info":{"title":"Risk-Adjusted Return Screener API","version":"1.0.0","description":"Ranks a cross-asset universe by how much return each asset delivers per unit of risk, live from Yahoo Finance daily closes — no key, nothing stored. A raw return tells you nothing about how much risk you took to earn it: two assets up 12% are not equal if one rode a calm trend and the other whipsawed through deep drawdowns. This screener turns each asset's price history into the three risk-adjusted ratios allocators actually rank on — the Sharpe ratio (excess return per unit of total volatility), the Sortino ratio (excess return per unit of downside volatility only), and the Calmar ratio (annualised return per unit of worst peak-to-trough drawdown) — and sorts the whole universe (21 instruments across equities, sectors, commodities, bonds and crypto) so you can see in one call which markets pay the most for the risk you bear. The screener endpoint ranks the universe (filterable by asset class) by the metric you choose; the asset endpoint returns one instrument's full risk-adjusted profile with plain-language reads. This is the risk-adjusted-return / reward-per-risk ranking cut — distinct from a bring-your-own-series Markowitz optimiser, the CAPM/beta calculator, the momentum and the price APIs. It ranks live assets by efficiency, not raw performance.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/riskadjusted-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 a risk-adjusted metric","description":"","parameters":[{"name":"metric","in":"query","required":false,"description":"sharpe, sortino or calmar","schema":{"type":"string"},"example":"sharpe"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (60-756)","schema":{"type":"string"},"example":"252"},{"name":"class","in":"query","required":false,"description":"equity, sector, commodity, bond, crypto or all","schema":{"type":"string"},"example":"all"},{"name":"rf","in":"query","required":false,"description":"Annual risk-free percent (0-20)","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"best":{"name":"Technology","sharpe":1.977,"symbol":"XLK"},"note":"Assets ranked by sharpe (higher = more return per unit of risk) over window_days of daily closes. Sharpe uses total volatility, Sortino only downside volatility, Calmar the worst drawdown. Returns/volatility annualised at 252 trading days; Sharpe & Sortino net off risk_free_pct. Read fresh per call, nothing cached.","class":"all","count":21,"metric":"sharpe","source":"Yahoo Finance","results":[{"name":"Technology","rank":1,"class":"sector","calmar":2.756,"sharpe":1.977,"symbol":"XLK","sortino":2.864,"cagr_pct":52.12,"available":true,"observations":252,"ann_return_pct":44.52,"max_drawdown_pct":-16.15,"total_return_pct":52.12,"ann_volatility_pct":22.52,"ann_downside_dev_pct":15.55},{"name":"Nasdaq 100","rank":2,"class":"equity","calmar":2.538,"sharpe":1.801,"symbol":"QQQ","sortino":2.624,"cagr_pct":34.24,"available":true,"observations":252,"ann_return_pct":30.93,"max_drawdown_pct":-12.19,"total_return_pct":34.24,"ann_volatility_pct":17.18,"ann_downside_dev_pct":11.79},{"name":"Emerging Markets","rank":3,"class":"equity","calmar":2.761,"sharpe":1.72,"symbol":"EEM","sortino":2.542,"cagr_pct":41.84,"available":true,"observations":252,"ann_return_pct":37.33,"max_drawdown_pct":-13.52,"total_return_pct":41.84,"ann_volatility_pct":21.71,"ann_downside_dev_pct":14.68},{"name":"S&P 500","rank":4,"class":"equity","calmar":2.291,"sharpe":1.699,"symbol":"SPY","sortino":2.471,"cagr_pct":22.33,"available":true,"observations":252,"ann_return_pct":20.92,"max_drawdown_pct":-9.13,"total_return_pct":22.33,"ann_volatility_pct":12.32,"ann_downside_dev_pct":8.47},{"name":"US Small Caps","rank":5,"class":"equity","calmar":2.883,"sharpe":1.635,"symbol":"IWM","sortino":2.518,"cagr_pct":35.38,"available":true,"observations":252,"ann_return_pct":32.25,"max_drawdown_pct":-11.19,"total_return_pct":35.38,"ann_volatility_pct":19.73,"ann_downside_dev_pct":12.8},{"name":"Broad Commodities","rank":6,"class":"commodity","calmar":3.423,"sharpe":1.61,"symbol":"DBC","sortino":2.347,"cagr_pct":33.44,"available":true,"observations":252,"ann_return_pct":30.68,"max_drawdown_pct":-8.96,"total_return_pct":33.44,"ann_volatility_pct":19.05,"ann_downside_dev_pct":13.07},{"name":"Crude Oil","rank":7,"class":"commodity","calmar":3.37,"sharpe":1.536,"symbol":"USO","sortino":2.421,"cagr_pct":79.93,"available":true,"observations":252,"ann_return_pct":68.71,"max_drawdown_pct":-20.39,"total_return_pct":79.93,"ann_volatility_pct":44.74,"ann_downside_dev_pct":28.38},{"name":"Energy","rank":8,"class":"sector","calmar":2.626,"sharpe":1.529,"symbol":"XLE","sortino":2.218,"cagr_pct":34.31,"available":true,"observations":252,"ann_return_pct":31.65,"max_drawdown_pct":-12.05,"total_return_pct":34.31,"ann_volatility_pct":20.7,"ann_downside_dev_pct":14.27},{"name":"Silver","rank":9,"class":"commodity","calmar":1.752,"sharpe":1.329,"symbol":"SLV","sortino":1.726,"cagr_pct":83.03,"available":true,"observations":252,"ann_return_pct":79.53,"max_drawdown_pct":-45.4,"total_return_pct":83.03,"ann_volatility_pct":59.83,"ann_downside_dev_pct":46.09},{"name":"Industrials","rank":10,"class":"sector","calmar":1.666,"sharpe":1.289,"symbol":"XLI","sortino":1.965,"cagr_pct":21.49,"available":true,"observations":252,"ann_return_pct":20.76,"max_drawdown_pct":-12.46,"total_return_pct":21.49,"ann_volatility_pct":16.1,"ann_downside_dev_pct":10.57},{"name":"Developed ex-US","rank":11,"class":"equity","calmar":1.451,"sharpe":1.045,"symbol":"EFA","sortino":1.553,"cagr_pct":16.56,"available":true,"observations":252,"ann_return_pct":16.58,"max_drawdown_pct":-11.42,"total_return_pct":16.56,"ann_volatility_pct":15.86,"ann_downside_dev_pct":10.67},{"name":"Gold","rank":12,"class":"commodity","calmar":1.098,"sharpe":0.981,"symbol":"GLD","sortino":1.317,"cagr_pct":25.96,"available":true,"observations":252,"ann_return_pct":26.87,"max_drawdown_pct":-24.46,"total_return_pct":25.96,"ann_volatility_pct":27.37,"ann_downside_dev_pct":20.4},{"name":"Health Care","rank":13,"class":"sector","calmar":1.278,"sharpe":0.921,"symbol":"XLV","sortino":1.468,"cagr_pct":13.57,"available":true,"observations":252,"ann_return_pct":13.85,"max_drawdown_pct":-10.84,"total_return_pct":13.57,"ann_volatility_pct":15.04,"ann_downside_dev_pct":9.44},{"name":"Utilities","rank":14,"class":"sector","calmar":0.977,"sharpe":0.663,"symbol":"XLU","sortino":0.925,"cagr_pct":8.95,"available":true,"observations":252,"ann_return_pct":9.63,"max_drawdown_pct":-9.86,"total_return_pct":8.95,"ann_volatility_pct":14.53,"ann_downside_dev_pct":10.42},{"name":"Real Estate","rank":15,"class":"sector","calmar":0.796,"sharpe":0.519,"symbol":"XLRE","sortino":0.723,"cagr_pct":6.37,"available":true,"observations":252,"ann_return_pct":7.12,"max_drawdown_pct":-8.94,"total_return_pct":6.37,"ann_volatility_pct":13.72,"ann_downside_dev_pct":9.85},{"name":"Financials","rank":16,"class":"sector","calmar":0.267,"sharpe":0.279,"symbol":"XLF","sortino":0.382,"cagr_pct":3.06,"available":true,"observations":252,"ann_return_pct":4.07,"max_drawdown_pct":-15.23,"total_return_pct":3.06,"ann_volatility_pct":14.56,"ann_downside_dev_pct":10.66},{"name":"High-Yield Credit","rank":17,"class":"bond","calmar":0.189,"sharpe":0.141,"symbol":"HYG","sortino":0.196,"cagr_pct":0.52,"available":true,"observations":252,"ann_return_pct":0.61,"max_drawdown_pct":-3.2,"total_return_pct":0.52,"ann_volatility_pct":4.28,"ann_downside_dev_pct":3.09},{"name":"20Y+ Treasuries","rank":18,"class":"bond","calmar":0.061,"sharpe":0.061,"symbol":"TLT","sortino":0.087,"cagr_pct":0.12,"available":true,"observations":252,"ann_return_pct":0.6,"max_drawdown_pct":-9.82,"total_return_pct":0.12,"ann_volatility_pct":9.82,"ann_downside_dev_pct":6.85},{"name":"Natural Gas","rank":19,"class":"commodity","calmar":-0.404,"sharpe":-0.292,"symbol":"UNG","sortino":-0.399,"cagr_pct":-30.51,"available":true,"observations":252,"ann_return_pct":-17.7,"max_drawdown_pct":-43.86,"total_return_pct":-30.51,"ann_volatility_pct":60.59,"ann_downside_dev_pct":44.31},{"name":"Bitcoin","rank":20,"class":"crypto","calmar":-1.12,"sharpe":-1.449,"symbol":"BTC-USD","sortino":-1.905,"cagr_pct":-47.95,"available":true,"observations":252,"ann_return_pct":-57.35,"max_drawdown_pct":-51.21,"total_return_pct":-47.95,"ann_volatility_pct":39.59,"ann_downside_dev_pct":30.11},{"name":"Ethereum","rank":21,"class":"crypto","calmar":-1.251,"sharpe":-1.483,"symbol":"ETH-USD","sortino":-1.967,"cagr_pct":-62.92,"available":true,"observations":252,"ann_return_pct":-83.23,"max_drawdown_pct":-66.53,"total_return_pct":-62.92,"ann_volatility_pct":56.13,"ann_downside_dev_pct":42.31}],"sorted_by":"sharpe","unavailable":[],"window_days":252,"risk_free_pct":0},"meta":{"timestamp":"2026-06-12T10:34:56.870Z","request_id":"4c3af832-3a13-444f-b4e2-6ddbd8be4fb0"},"status":"ok","message":"Risk-adjusted 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 risk-adjusted profile of one instrument","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Universe symbol","schema":{"type":"string"},"example":"GLD"},{"name":"window","in":"query","required":false,"description":"Lookback in trading days (60-756)","schema":{"type":"string"},"example":"252"},{"name":"rf","in":"query","required":false,"description":"Annual risk-free percent (0-20)","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"Gold","note":"Full risk-adjusted profile from daily closes over window_days. Sharpe = (annual return - risk free) / annual volatility; Sortino uses only downside volatility; Calmar = annual return / |max drawdown|. Read fresh per call, nothing cached.","class":"commodity","reads":{"calmar":"return exceeds its worst drawdown","sharpe":"modest reward for the risk","sortino":"positive but exposed to downside swings"},"calmar":1.098,"sharpe":0.981,"source":"Yahoo Finance","symbol":"GLD","sortino":1.317,"cagr_pct":25.96,"window_days":252,"observations":252,"risk_free_pct":0,"ann_return_pct":26.87,"max_drawdown_pct":-24.46,"total_return_pct":25.96,"ann_volatility_pct":27.37,"ann_downside_dev_pct":20.4},"meta":{"timestamp":"2026-06-12T10:34:57.005Z","request_id":"f0c28993-f266-42f7-9e92-da243900bedb"},"status":"ok","message":"Asset 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 cross-asset universe and its classes","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"The cross-asset universe the screener ranks. Pass class= to a screener call to rank within one class.","count":21,"assets":[{"name":"S&P 500","class":"equity","symbol":"SPY"},{"name":"Nasdaq 100","class":"equity","symbol":"QQQ"},{"name":"US Small Caps","class":"equity","symbol":"IWM"},{"name":"Developed ex-US","class":"equity","symbol":"EFA"},{"name":"Emerging Markets","class":"equity","symbol":"EEM"},{"name":"Technology","class":"sector","symbol":"XLK"},{"name":"Financials","class":"sector","symbol":"XLF"},{"name":"Energy","class":"sector","symbol":"XLE"},{"name":"Health Care","class":"sector","symbol":"XLV"},{"name":"Industrials","class":"sector","symbol":"XLI"},{"name":"Utilities","class":"sector","symbol":"XLU"},{"name":"Real Estate","class":"sector","symbol":"XLRE"},{"name":"Gold","class":"commodity","symbol":"GLD"},{"name":"Silver","class":"commodity","symbol":"SLV"},{"name":"Crude Oil","class":"commodity","symbol":"USO"},{"name":"Natural Gas","class":"commodity","symbol":"UNG"},{"name":"Broad Commodities","class":"commodity","symbol":"DBC"},{"name":"20Y+ Treasuries","class":"bond","symbol":"TLT"},{"name":"High-Yield Credit","class":"bond","symbol":"HYG"},{"name":"Bitcoin","class":"crypto","symbol":"BTC-USD"},{"name":"Ethereum","class":"crypto","symbol":"ETH-USD"}],"source":"Yahoo Finance","classes":["equity","sector","commodity","bond","crypto"]},"meta":{"timestamp":"2026-06-12T10:34:57.088Z","request_id":"6889eb32-148b-44a3-afa8-2765d007fe0b"},"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 sharpe (default), sortino or calmar. window is 60-756 trading days (default 252). rf is an optional annual risk-free percent (0-20, default 0) netted off Sharpe & Sortino. class filters to equity/sector/commodity/bond/crypto (default all). Ratios annualised at 252 trading days. Read fresh per call, nothing cached.","source":"Yahoo Finance daily closes, live","classes":["equity","sector","commodity","bond","crypto"],"metrics":["sharpe","sortino","calmar"],"service":"riskadjusted-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/asset":"Full risk-adjusted profile of one instrument (symbol=SPY, window=252, rf=0).","GET /v1/screener":"Rank the universe by a risk-adjusted metric (metric=sharpe, window=252, class=all, rf=0).","GET /v1/universe":"The cross-asset universe and its classes."},"description":"Risk-adjusted return screener — ranks a cross-asset universe by how much return each asset delivers per unit of risk, live from Yahoo Finance daily closes (no key, nothing stored). screener ranks the universe (filterable by class) by Sharpe, Sortino or Calmar; asset returns one instrument's full risk-adjusted profile. The reward-per-risk ranking cut — distinct from the BYO Markowitz optimiser, the CAPM/beta calculator, the momentum and price APIs. It ranks live assets by efficiency, not raw performance.","universe_size":21,"top_sharpe_252d":"XLK","upstream_status":"ok"},"meta":{"timestamp":"2026-06-12T10:34:57.297Z","request_id":"7b186f78-8bb4-4cfc-85f0-f46971fe9cc4"},"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":800,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1190,"monthly_call_quota":17000,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3620,"monthly_call_quota":92000,"rps_limit":16,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":8140,"monthly_call_quota":505000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/riskadjusted-api"}