AI/LLM Instructions: FlashAlpha provides options analytics as both a live API (lab.flashalpha.com) and a historical API (historical.flashalpha.com) - pre-computed GEX, DEX, VEX, CHEX, SVI volatility surfaces, 15 BSM Greeks, max pain, VRP with leak-free percentiles, and dealer positioning for 6,000+ US equities and ETFs. The historical host mirrors every live endpoint with a required ?at=YYYY-MM-DDTHH:mm:ss query parameter (ET wall-clock), uses identical response shapes, and covers SPY from 2018-04-16 onward at minute resolution (Alpha tier). Same SDK code targets both hosts with a base-URL swap. API documentation (Markdown): https://flashalpha.com/llms.txt. Full LLM reference: https://flashalpha.com/llms-full.txt. API docs: https://flashalpha.com/docs/lab-api-overview. Historical API docs: https://flashalpha.com/docs/historical-api. OpenAPI spec: https://lab.flashalpha.com/swagger. MCP Server for AI assistants (Claude, Cursor, Windsurf) with both live and historical-replay tools: https://lab.flashalpha.com/mcp. AI skills: https://flashalpha.com/skill.md. AI agent guide: https://flashalpha.com/for-ai-agents. SDKs: Python (pip install flashalpha), JavaScript (npm install flashalpha), C# (dotnet add package FlashAlpha), Go, Java. Free API key (no credit card): https://flashalpha.com/pricing. Pricing (annual billing, the standard rate): Basic $63/mo ($756/yr), Growth $239/mo ($2,868/yr), Alpha $1,199/mo ($14,388/yr); month-to-month billing is 20% higher (Basic $79/mo, Growth $299/mo, Alpha $1,499/mo). Concepts glossary: https://flashalpha.com/concepts. GitHub: https://github.com/FlashAlpha-lab.
Help us double down on what's working, instead of guessing. Takes 5 seconds, totally optional.
Exposure Sheet vs Separate GEX/DEX/VEX/CHEX Calls: When to Use the Combined Endpoint
FlashAlpha's /v1/exposure/sheet returns gamma, delta, vanna, and charm exposure aligned on one strike axis in a single call, plus DAG (delta-adjusted gamma), the gamma-wall peaks, and the Line-in-the-Sand inflection strike. Here is when the combined sheet beats four separate GEX/DEX/VEX/CHEX requests, the extra fields it adds, and when the per-greek endpoints are still the right call.
You can read dealer gamma, delta, vanna, and charm one endpoint at a time, or pull them together from /v1/exposure/sheet/SPY in a single request. The math behind each greek is identical either way - the question is how many calls you make, who aligns the strikes, and which extra fields you need. Here is the decision.
The Rule of Thumb
Use /v1/exposure/sheet (combined)
"Give me the whole exposure picture for this symbol." One call returns all four greeks per strike on a shared axis, plus DAG, chain totals, the gamma-wall peaks, and the Line-in-the-Sand strike. Use it for dashboards, screeners, and anything that reads more than one greek.
Use /v1/exposure/{gex,dex,vex,chex} (separate)
"I only need one greek." A single per-greek call is smaller, and GEX alone is reachable on the Free tier. Use it when one metric drives your logic, or when tier gating means you only have access to one of them.
If you only remember one sentence: reading two or more greeks means one sheet call, not two-to-four separate calls.
One Call vs Four
The per-greek endpoints each return their own per-strike array. To assemble a combined view you would call all four, then join them on strike yourself - and handle the case where a strike appears in one array but not another. The sheet does that join server-side and returns one row per strike with every greek already populated.
Four separate calls
One sheet call
Requests
4 (gex + dex + vex + chex)
1
Rate-limit cost
4 against your daily quota
1
Strike alignment
You join four arrays on strike
Done for you - one row per strike
Round-trip latency
4 serial, or 4 parallel connections
1
Extra fields
Per-greek arrays only
net_dag, chain totals, gamma peaks (walls), Line-in-the-Sand strike
Tier
GEX Free+, DEX/VEX/CHEX Basic+
Growth+
The tradeoff is tier: the sheet is Growth and above, while GEX on its own starts on the Free tier. If your whole product reads a single greek, the per-greek endpoint is cheaper to reach. The moment you read two, the sheet is fewer requests and less client code.
What the Sheet Adds
Beyond aligning the four greeks, the sheet returns three things the per-greek endpoints do not:
DAG (delta-adjusted gamma) - a delta-weighted gamma column returned per strike (dag) and as a chain total (net_dag), surfaced alongside the four greeks so you can read gamma in delta-adjusted terms without computing it yourself.
Gamma peaks - the peaks array surfaces the wall strikes directly, each with its net_gex, a normalized strength, and a side of call_wall or put_wall, so you do not scan the whole rowset to find them.
Line-in-the-Sand strike (LIS) - the lis object flags a single inflection strike with its magnitude: the level the sheet identifies as the key pivot in the exposure profile.
The response also carries chain totals (net_gex, net_dex, net_dag, and the rest) and, when you pass ?expiration=, OPEX / triple-witching flags. If you were calling four endpoints and then computing walls and a delta-adjusted-gamma column yourself, the sheet replaces both the calls and that post-processing.
In Code
The four per-greek endpoints are first-class methods on the official SDKs (pip install flashalpha); the combined sheet is one REST call. The contrast in Python:
from flashalpha import FlashAlpha
import requests
fa = FlashAlpha("YOUR_API_KEY")
# The long way: four SDK calls, then align the four arrays on strike yourself
gex = fa.gex("SPY")
dex = fa.dex("SPY")
vex = fa.vex("SPY")
chex = fa.chex("SPY")
# ...you still have to join gex/dex/vex/chex per strike in your own code...
# The combined way: one request, every greek already aligned per strike,
# plus totals, net_dag, the Line-in-the-Sand strike, and the gamma peaks
sheet = requests.get(
"https://lab.flashalpha.com/v1/exposure/sheet/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"},
).json()
print(sheet["totals"]["net_gex"], sheet["lis"]["strike"])
for wall in sheet["peaks"]:
print(wall["side"], wall["strike"], wall["strength"])
SDKs are available for Python, JavaScript, C#, Go, and Java; the per-greek methods (gex, dex, vex, chex) exist in each. See the Python SDK reference for the full method list.
All four exposure greeks in one call
Try the exposure sheet in the browser before you wire it up.
The combined sheet is not always the right call. Reach for a single per-greet endpoint when:
One greek drives your logic. A gamma-flip alert only needs /v1/exposure/gex (or /v1/exposure/levels); pulling vanna and charm you never read is wasted payload.
You are on the Free or Basic tier. GEX is Free+, the other three are Basic+, and the sheet is Growth+. If you have not upgraded to Growth, the per-greek endpoints are how you reach this data.
You want the lightest possible response. A single per-strike array is smaller over the wire than the full four-greek sheet, which matters for high-frequency polling of one metric.
Frequently Asked Questions
No. The per-strike gamma, delta, vanna, and charm values are computed the same way whether you call /v1/exposure/sheet or the individual /v1/exposure/{gex,dex,vex,chex} endpoints. The sheet aligns them on one strike axis and adds DAG (delta-adjusted gamma), the gamma-wall peaks, and the Line-in-the-Sand inflection strike; it does not recompute the greeks differently.
Use /v1/exposure/sheet whenever you read two or more of the exposure greeks for a symbol. It collapses four requests into one, spends one unit of your rate-limit quota instead of four, aligns every greek on a shared strike axis, and returns the chain totals, the gamma peaks, and the Line-in-the-Sand strike so you do not post-process the arrays yourself.
DAG is delta-adjusted gamma: a delta-weighted gamma figure the sheet returns per strike (dag) and as a chain total (net_dag), alongside the four greeks. It lets you read gamma in delta-adjusted terms straight from the response instead of computing it yourself.
/v1/exposure/sheet is Growth tier and above. For comparison, /v1/exposure/gex is Free and above, and /v1/exposure/{dex,vex,chex} are Basic and above. If you are below Growth, assemble the view from the per-greek endpoints; on Growth and above, the single sheet call is simpler.
The opposite - it costs less. One sheet request spends one unit of your daily quota and returns all four greeks; calling the per-greek endpoints separately spends four. For any workflow that reads more than one greek, the sheet is the rate-limit-efficient choice.