Dealer gamma, key levels, Greeks exposure, flow, tape and sweeps for every listed symbol, computed from the live OPRA book. JSON over REST, a WebSocket stream, and an MCP server for your AI assistant.
The API serves the numbers the DataFirst terminal draws: key levels, exposure by strike, every contract with its Greeks and IV, flow, the tape and sweeps, volatility and history. Use it from your own dashboards, scripts and agents.
Three steps from no key to your first levels.
DATAFIRST_KEY so it stays out of your code.curl -H "Authorization: Bearer $DATAFIRST_KEY" \ https://api.datafirsttrading.com/v1/symbols/SPY/levelsEvery request carries your key as a Bearer token in the Authorization header. Read it from the environment, and keep it out of browser code and version control.
Authorization: Bearer $DATAFIRST_KEY# macOS and Linuxexport DATAFIRST_KEY="your key"Every tier reads every expiration. Tiers differ by speed, calls a day and how far back you can read.
| Plan | Price | Speed | Calls a day | Symbols | History | Also |
|---|---|---|---|---|---|---|
| Free | Free | 1 request/s | 200 calls a day | SPY, SPX, QQQ | The current session | Ask Marlon: 5 questions a day |
| Trader | $99/mo | 4 requests/s, burst 20 | 10,000 calls a day | Every symbol | Today and the last 5 sessions | Ask Marlon: 300 a day |
| Developer | $249/mo | 10 requests/s, burst 60 | 100,000 calls a day | Every symbol | One year of history | Ask Marlon: 1,000 a day |
| Quant | $999/mo | 50 requests/s, burst 150 | Unlimited calls | Every symbol | Everything recorded | Bulk export as Parquet |
Every request to the API counts as a call, and one AI question can make several. The day resets at midnight New York time. Your own key's limits are one call away.
curl -H "Authorization: Bearer $DATAFIRST_KEY" \ https://api.datafirsttrading.com/v1/meEvery quote and print comes from OPRA, the consolidated feed of every US options trade and quote, and our own engine computes the rest.
Grouped by what they answer. Paths are relative to the base URL.
/v1/symbols/{s}/levelsKey levels now: gamma flip, call and put walls, max pain, vol trigger, net GEX and exposures./strikes · /contracts · /heatmapExposure by strike, every contract with its Greeks and IV, and the strike-by-expiration grid./flow · /v1/flow/leaders · /unusualWho is buying and selling premium, by name, sector and market, and what is unusual today./v1/tape · /v1/sweeps · /v1/tradesEvery print with its quote, sweeps detected, the whole session queryable and aggregated./vol · /history/ivTerm structure, skew and a daily IV history for every name./history/levels · /history/replayAny past session minute by minute, second by second since October 2026, replayable.wss /v1/streamLevels pushed once a second for every symbol you subscribe to./v1/symbols · /v1/meWhat is covered, every listed expiration, and your own key's limits./v1/exportEvery finished session as Parquet files, for research and backtests (Quant).GET /v1/symbols/{s}/levels returns the levels now for one symbol, with the totals and when they were computed.
{ "data": { "key_levels": { "gamma_flip": 766.51, "call_wall": 770, "put_wall": 760, "max_pain": 770 }, "totals": { "net_gex": -2511916135, "gex_ratio": 0.3869 } }, "meta": { "symbol": "SPY", "as_of": "2026-10-19T20:33:28.174Z", "spot": { "price": 766.92, "source": "equities" } }}Subscribe once and the WebSocket pushes levels every second for every symbol you follow, so dashboards stay current without polling.
WS /v1/stream# one update a second per subscribed symbolRead any past session minute by minute, and second by second since October 2026. Daily IV history covers every name. How far back you can read depends on your plan.
GET /history/levelsGET /history/replayGET /history/ivOn Quant, every finished session is available as Parquet files for research and backtests.
curl -H "Authorization: Bearer $DATAFIRST_KEY" \ https://api.datafirsttrading.com/v1/exportEvery endpoint is a tool, generated from the same contract as the API, plus three that do the legwork: a session summary, the market at any past minute, and chart data ready to draw. Works in Claude, Cursor and any MCP client.
Where is SPY's gamma flip right now, and is dealer gamma positive?
1 calllevels("SPY")
What happened to QQQ's walls around 2:30 pm last Thursday?
3 callssessions · replay_at · history_levels
Draw NVDA's strike profile by vanna for the next 7 expirations.
1 callchart("strike_profile", "NVDA", measure="vanna")
Rather just ask? Ask Marlon answers in words and draws the chart, from the same numbers.
Questions a day come with your key: 5 on Free, 300 on Trader and 1,000 on Developer.
Try Marlon on the FAQSPY, SPX and QQQ for the current session, 200 calls a day.