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 with FlashAlpha?

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

No credit card required Setup in 60 seconds Secure & reliable