Exposure Basket API - Weighted Cross-Symbol GEX/DEX/VEX/CHEX - FlashAlpha Lab API
Lab API Exposure Basket

Exposure Basket API

A weighted cross-symbol aggregate of GEX, DEX, VEX and CHEX across up to 50 user-supplied symbols, with per-constituent contributions and regime tags, and any symbols that lacked data reported back in missing_symbols.

Endpoint

GET /v1/exposure/basket
Auth required (X-Api-Key) Rate Limited: Yes Growth plan+

Parameters

Name In Required Default Description
symbols query yes - Comma-separated symbols. Max 50, duplicates de-duped.
weights query no equal weight Comma-separated; same length as symbols. Defaults to equal weight. Negative values rejected; sum-zero rejected.
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/exposure/basket?symbols=AAPL,MSFT,NVDA&weights=0.4,0.3,0.3"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/exposure/basket",
    headers={"X-Api-Key": "YOUR_API_KEY"},
    params={"symbols": "AAPL,MSFT,NVDA", "weights": "0.4,0.3,0.3"}
)
data = resp.json()
print(f"Aggregate net GEX: {data['aggregate']['net_gex']:,}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/exposure/basket?symbols=AAPL,MSFT,NVDA&weights=0.4,0.3,0.3",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log("Aggregate net GEX: " + data.aggregate.net_gex.toLocaleString());

Response

{
  "as_of": "2026-05-29T15:30:00Z",
  "constituent_count": 3,
  "missing_symbols": [],
  "aggregate": {
    "net_gex": 1640000000,
    "net_dex": -210000000,
    "net_vex":  580000000,
    "net_chex": 420000000
  },
  "constituents": [
    { "symbol": "AAPL", "weight": 0.40, "underlying_price": 210.45, "net_gex":  920000000, "net_dex": -120000000, "net_vex": 340000000, "net_chex": 260000000, "contribution_pct": 42.13, "regime": "positive_gamma" },
    { "symbol": "MSFT", "weight": 0.30, "underlying_price": 432.80, "net_gex":  410000000, "net_dex":  -60000000, "net_vex": 140000000, "net_chex":  90000000, "contribution_pct": 18.77, "regime": "positive_gamma" }
  ]
}

Key Response Fields

Field Description
constituent_countNumber of symbols that actually contributed (after drops).
missing_symbols[]Symbols requested but with no MarketDataStore data (invalid, illiquid, or still warming).
aggregate.net_*Σ wᵢ × net_{greek}_i after weight renormalisation.
constituents[].weightRenormalised weight applied to this symbol (sums to 1 across the response).
constituents[].contribution_pct|wᵢ × net_gex_i| / Σ |wⱼ × net_gex_j|, expressed 0-100. Uses weighted GEX (not raw |net_gex|) so a tiny-weight, large-GEX symbol does not dominate the display when its influence on the aggregate is small.
constituents[].regimepositive_gamma when net_gex ≥ 0, else negative_gamma.

Errors

Status Description
400missing_symbols / too_many_symbols / invalid_weights / weight_count_mismatch
403Requires Growth plan or higher
404no_data - none of the requested symbols had data

About

The basket endpoint rolls GEX, DEX, VEX and CHEX up across up to 50 symbols into a single weighted aggregate, targeting the multi-symbol scanners Growth persona. Weights default to equal across the basket; when supplied they are normalised to sum to 1. Symbols with no available data are dropped, the surviving weights are re-normalised, and the dropped tickers are returned in missing_symbols.

Each constituent reports its renormalised weight, underlying price, per-greek values, a contribution percentage based on weighted GEX, and a positive- or negative-gamma regime tag. The endpoint does not pre-validate index/ETF tier gating per constituent, and one HTTP call counts as a single quota debit regardless of how many symbols are passed.

Common Use Cases

  • Aggregate a basket in one call - roll a watchlist or sector basket into a single weighted net GEX / DEX / VEX / CHEX read for one quota debit regardless of symbol count
  • Apply portfolio weights - supplied weights are renormalised so the aggregate reflects your actual book rather than an equal-weight proxy
  • Rank the dominant names - contribution_pct (weighted GEX share) surfaces which constituents drive basket-level exposure and which are noise
  • Read each holding's gamma regime - the positive- or negative-gamma regime tag per constituent shows where the basket is dampened versus trending
  • Frame dispersion trades - compare constituent regimes and contributions against index-level exposure to spot where single names diverge from the basket
  • Watch the tier-gating caveat - the endpoint does not pre-validate index/ETF tier gating per constituent, so confirm entitlement before relying on every symbol's row

Related reading

Complementary endpoints

  • Gamma Exposure (GEX) - the single-symbol gamma sheet behind each constituent
  • Exposure Sheet - the full per-strike greek sheet for any one name in the basket
  • Dispersion - index-vs-constituent vol divergence to pair with basket exposure

Ready to build?

Get your free API key and start pulling live options data in 30 seconds.