# Risk-Adjusted Return Screener API
> 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.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/riskadjusted-api/..."
```

## Pricing
- **Free** (Free) — 800 calls/Mo, 2 req/s
- **Starter** ($12/Mo) — 17,000 calls/Mo, 6 req/s
- **Pro** ($36/Mo) — 92,000 calls/Mo, 16 req/s
- **Mega** ($81/Mo) — 505,000 calls/Mo, 40 req/s

## Endpoints

### Screener

#### `GET /v1/screener` — Rank the universe by a risk-adjusted metric

**Parameters:**
- `metric` (query, optional, string) — sharpe, sortino or calmar Example: `sharpe`
- `window` (query, optional, string) — Lookback in trading days (60-756) Example: `252`
- `class` (query, optional, string) — equity, sector, commodity, bond, crypto or all Example: `all`
- `rf` (query, optional, string) — Annual risk-free percent (0-20) Example: `0`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/riskadjusted-api/v1/screener?metric=sharpe&window=252&class=all&rf=0"
```

**Response:**
```json
{
    "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": 
…(truncated, see openapi.json for full schema)
```

### Asset

#### `GET /v1/asset` — Full risk-adjusted profile of one instrument

**Parameters:**
- `symbol` (query, required, string) — Universe symbol Example: `GLD`
- `window` (query, optional, string) — Lookback in trading days (60-756) Example: `252`
- `rf` (query, optional, string) — Annual risk-free percent (0-20) Example: `0`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/riskadjusted-api/v1/asset?symbol=GLD&window=252&rf=0"
```

**Response:**
```json
{
    "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
}
```

### Universe

#### `GET /v1/universe` — The cross-asset universe and its classes

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/riskadjusted-api/v1/universe"
```

**Response:**
```json
{
    "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",
                "sym
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/riskadjusted-api/v1/meta"
```

**Response:**
```json
{
    "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 op
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/riskadjusted-api
OpenAPI spec: https://www.oanor.com/api/riskadjusted-api/openapi.json
