# Beta Screener API
> Ranks a cross-asset universe by beta to a benchmark, so you can see at a glance which markets amplify the benchmark's moves and which dampen or hedge them, computed live from Yahoo Finance daily closes — no key, nothing stored. Beta is the single number that says how much an asset moves for each 1% the market moves: a beta of 1.3 rises ~1.3% when the benchmark rises 1% (and falls harder when it drops), a beta near 0 is decoupled, a negative beta moves against the market (a hedge). The screener endpoint ranks the 21-instrument universe (equities, sectors, commodities, bonds, crypto; filterable by class) by beta to a chosen benchmark (the S&P 500 by default), each with its correlation and R-squared so you know how reliable the beta is. The asset endpoint returns one instrument's full beta profile against the benchmark. The dispersion endpoint returns the spread of betas across the universe — the high-beta-minus-low-beta gap, the mean beta and the share of risk-on names — a read on how much the market is rewarding risk-taking right now. This is the systematic-risk / market-sensitivity ranking cut — distinct from a bring-your-own-series CAPM/beta calculator, the total-risk Sharpe/Sortino screener, the correlation matrix and the price APIs. It ranks live assets by how much market risk they carry.

## 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/betadispersion-api/..."
```

## Pricing
- **Free** (Free) — 700 calls/Mo, 2 req/s
- **Starter** ($12/Mo) — 16,800 calls/Mo, 6 req/s
- **Pro** ($36/Mo) — 90,000 calls/Mo, 16 req/s
- **Mega** ($80/Mo) — 495,000 calls/Mo, 40 req/s

## Endpoints

### Screener

#### `GET /v1/screener` — Rank the universe by beta to a benchmark

**Parameters:**
- `benchmark` (query, optional, string) — Universe symbol used as benchmark Example: `SPY`
- `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`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/betadispersion-api/v1/screener?benchmark=SPY&window=252&class=all"
```

**Response:**
```json
{
    "data": {
        "note": "Assets ranked by beta to SPY over window_days of daily returns. Beta > 1 amplifies the benchmark, < 1 dampens it, < 0 moves against it. correlation/R-squared show how reliable the beta is (a low R-squared beta is noisy). Read fresh per call, nothing cached.",
        "class": "all",
        "count": 21,
        "source": "Yahoo Finance",
        "results": [
            {
                "beta": 2.813,
                "name": "Ethereum",
                "rank": 1,
                "class": "crypto",
                "symbol": "ETH-USD",
                "available": true,
                "r_squared": 0.272,
                "correlation": 0.521,
                "observations": 252,
                "classification": "very high-beta (sharply amplifies)",
                "ann_volatility_pct": 66.49
            },
            {
                "beta": 1.758,
                "name": "Bitcoin",
                "rank": 2,
                "class": "crypto",
                "symbol": "BTC-USD",
                "available": true,
                "r_squared": 0.263,
                "correlation": 0.513,
                "observations": 252,
                "classification": "very high-beta (sharply amplifies)",
                "ann_volatility_pct": 42.23
            },
            {
                "beta": 1.595,
                "name": "Technology",
                "rank": 3,
                "class": "sector",
                "symbol": "XLK",
               
…(truncated, see openapi.json for full schema)
```

### Asset

#### `GET /v1/asset` — Beta profile of one instrument vs the benchmark

**Parameters:**
- `symbol` (query, required, string) — Universe symbol Example: `XLK`
- `benchmark` (query, optional, string) — Benchmark symbol Example: `SPY`
- `window` (query, optional, string) — Lookback in trading days (60-756) Example: `252`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/betadispersion-api/v1/asset?symbol=XLK&benchmark=SPY&window=252"
```

**Response:**
```json
{
    "data": {
        "beta": 1.595,
        "name": "Technology",
        "note": "beta = cov(asset, benchmark) / var(benchmark) on daily returns aligned over common trading days. A beta of 1.3 means the asset tends to move ~1.3% for each 1% of the benchmark. R-squared is the share of the asset's moves explained by the benchmark. Read fresh per call, nothing cached.",
        "class": "sector",
        "source": "Yahoo Finance",
        "symbol": "XLK",
        "benchmark": "SPY",
        "r_squared": 0.761,
        "correlation": 0.872,
        "window_days": 252,
        "observations": 252,
        "benchmark_name": "S&P 500",
        "classification": "very high-beta (sharply amplifies)",
        "ann_volatility_pct": 22.52
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:54.390Z",
        "request_id": "202b7909-d5f2-413a-a32f-815ef4af107c"
    },
    "status": "ok",
    "message": "Asset beta retrieved successfully",
    "success": true
}
```

### Dispersion

#### `GET /v1/dispersion` — Beta dispersion across the universe with a risk-appetite read

**Parameters:**
- `benchmark` (query, optional, string) — Benchmark symbol Example: `SPY`
- `window` (query, optional, string) — Lookback in trading days (60-756) Example: `252`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/betadispersion-api/v1/dispersion?benchmark=SPY&window=252"
```

**Response:**
```json
{
    "data": {
        "note": "Beta dispersion across the whole universe vs SPY. A wide high-minus-low spread and a high share of >1.15 betas indicates the market is rewarding risk-taking (risk-on); a large negative-beta share indicates available hedges / a defensive regime. Read fresh per call, nothing cached.",
        "read": "balanced beta distribution",
        "count": 21,
        "lowest": {
            "beta": -1.252,
            "symbol": "USO"
        },
        "source": "Yahoo Finance",
        "highest": {
            "beta": 2.813,
            "symbol": "ETH-USD"
        },
        "benchmark": "SPY",
        "mean_beta": 0.752,
        "window_days": 252,
        "benchmark_name": "S&P 500",
        "high_beta_share": 0.333,
        "negative_beta_share": 0.143,
        "beta_spread_high_minus_low": 4.065
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:54.585Z",
        "request_id": "9efdbf0f-eade-47d5-9e59-c82481680142"
    },
    "status": "ok",
    "message": "Beta dispersion retrieved successfully",
    "success": true
}
```

### Meta

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

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

**Response:**
```json
{
    "data": {
        "note": "benchmark is any universe symbol (default SPY). window is 60-756 trading days (default 252). class filters to equity/sector/commodity/bond/crypto (default all). Beta is cov(asset,benchmark)/var(benchmark) on daily returns. Read fresh per call, nothing cached.",
        "source": "Yahoo Finance daily closes, live",
        "classes": [
            "equity",
            "sector",
            "commodity",
            "bond",
            "crypto"
        ],
        "service": "betadispersion-api",
        "universe": [
            "SPY",
            "QQQ",
            "IWM",
            "EFA",
            "EEM",
            "XLK",
            "XLF",
            "XLE",
            "XLV",
            "XLI",
            "XLU",
            "XLP",
            "XLRE",
            "GLD",
            "SLV",
            "USO",
            "DBC",
            "TLT",
            "HYG",
            "BTC-USD",
            "ETH-USD"
        ],
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/asset": "Beta profile of one instrument vs the benchmark (symbol=XLK, benchmark=SPY, window=252).",
            "GET /v1/screener": "Rank the universe by beta to a benchmark (benchmark=SPY, window=252, class=all).",
            "GET /v1/dispersion": "Beta dispersion across the universe with a risk-appetite read (benchmark=SPY, window=252)."
        },
        "description": "Beta screener / beta dispersion — ranks a cross-asset univ
…(truncated, see openapi.json for full schema)
```


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