The NFA gexbot OpenAPI Specification.
This repository contains the OpenAPI 3.0.1 specification for the NFA gexbot API, which covers two product offerings:
- gexbot — Options-derived market data including GEX (Gamma Exposure), greeks, and orderflow metrics for enumerated tickers.
- gexbot research (
gbR) — Chart and analytical data for a broad range of options metrics across any supported ticker, with flexible output formats, views, and filtering.
https://api.gex.bot/v2
All endpoints except /tickers and /{package}/categories require a valid API key passed as a Bearer token in the
Authorization header.
Each product requires a dedicated API key — a gexbot key for the gexbot endpoints and a gexbot research (gbR)
key for the /research endpoints. Keys are not interchangeable between products.
| Endpoint | Description |
|---|---|
/{ticker}/classic/{category} |
Classic GEX chart data |
/{ticker}/state/{category} |
State greeks chart data |
/{ticker}/orderflow/orderflow |
Orderflow metrics |
/{ticker}/classic/{category}/majors |
Key GEX levels (classic) |
/{ticker}/state/{category}/majors |
Key GEX levels (state) |
/{ticker}/classic/{category}/maxchange |
Max GEX change by lookback (classic) |
/{ticker}/state/{category}/maxchange |
Max GEX change by lookback (state) |
/tickers |
List available ticker symbols |
/{package}/categories |
List available data category names for a package |
GET https://api.gex.bot/tickers/quant |
List Quant ticker symbols |
/options/{ticker}/expiries |
List all valid expiries for realtime groups |
/hist/{ticker}/{package}/{category}/{date} |
Download historical data |
POST /negotiate |
Negotiate V2 WebSocket URLs, analytics, and spot groups |
PATCH /negotiate |
Replace active V2 WebSocket groups without reconnecting |
GET /negotiate |
Legacy WebSocket negotiation compatibility |
| Endpoint | Description |
|---|---|
/research/{ticker}/{metric} |
Research chart data for a ticker and metric |
gexbot — Request
GET https://api.gex.bot/v2/SPX/classic/gex_full
Authorization: Bearer gexbot_custom_<your-api-key-secret>
User-Agent: my-app/1.0
Accept: application/jsonNote: Your gexbot API key must include both the prefix
gexbot_custom_and your secret key in theAuthorizationheader (e.g.,gexbot_custom_your-secret-key).
Response
{
"timestamp": 1777492800,
"ticker": "SPX",
"min_dte": 0,
"sec_min_dte": 1,
"spot": 7138.55,
"zero_gamma": 7112.95,
"major_pos_vol": 7135,
"major_pos_oi": 7200,
"major_neg_vol": 7100,
"major_neg_oi": 6900,
"strikes": [
[
6890,
-228.01,
-86.9,
[
-240.55,
-243.15,
-245.22,
-221.27,
-220.12
]
],
[
6895,
-48.47,
69.76,
[
-49.05,
-46.76,
-45.55,
-45.53,
-42.97
]
],
// Trimmed for brevity
[
7380,
44.16,
75.99,
[
0,
47.7,
47.3,
0,
40.55
]
],
[
7385,
5.5,
14.27,
[
0,
0,
0,
0,
0
]
]
],
"sum_gex_vol": 1712585.519,
"sum_gex_oi": 51521.105,
"delta_risk_reversal": 0.118,
"max_priors": [
[
7140,
170979.742
],
[
7135,
1145886.722
],
[
7135,
997473.336
],
[
7135,
1106210.715
],
[
7135,
1128504.809
],
[
7135,
1131150.488
]
]
}Request
GET https://api.gex.bot/v2/research/SPX/gex_both
Authorization: Bearer <your-gbR-api-key>
User-Agent: my-app/1.0
Accept: application/jsonNote: The
/researchendpoints require a dedicated gexbot research (gbR) API key withresearch_prefix. This is separate from your gexbot API key and is not interchangeable.
Query parameters (all optional)
| Parameter | Type | Description |
|---|---|---|
format |
string | Output format: png, jpeg, svg, pdf, json, csv, webp |
view |
string | Chart view: skew, term, surface |
type |
string | Chart type: line, histogram, scatter, bar |
theme |
string | Color theme: light, dark (default: dark) |
strikes |
number | Number of strikes to include |
start_dte |
number | Start DTE filter |
end_dte |
number | End DTE filter |
expiration_filter |
string | Expiration date filter |
contract_agg |
boolean | Aggregate by contract |
expiry_agg |
boolean | Aggregate by expiry |
skew_adj |
boolean | Apply skew adjustment |
limit_y |
boolean | Limit y-axis range |
contract_filter |
string | Filter contracts: calls, puts, all |
moneyness_filter |
string | Filter by moneyness: atm, itm, ntm, otm |
Subscriptions are available for different data packages at https://www.gexbot.com/:
- Classic — Classic GEX data
- State — State greeks data
- Orderflow — Orderflow metrics
- Quant — Full access including historical data and WebSocket feeds
- Research — gexbot research (
gbR) access for chart and analytical data across any ticker and metric
Quant API users should send the complete analytics group set and one matching {ticker}_spot group for each
analytics ticker to POST /negotiate. The server returns authorized v2_* hub URLs and joins the initial memberships.
Analytics and spot use separate groups on the same V2 connections. Spot messages use the proto.spot type URL.
A POST request with no spot groups remains on the current-generation hubs for compatibility.
Use PATCH /negotiate to replace the complete V2 membership set without reconnecting. Repeat each spot membership on
every V2 hub that has analytics for that ticker. Spot memberships count toward the WebSocket group limit.
Realtime analytics groups include the standard full/zero/one groups and explicit-expiry groups such as
SPX_state_gamma_20260717. Use GET /v2/options/{ticker}/expiries to discover valid expiry dates. Use
GET https://api.gex.bot/tickers/quant to discover additional Quant tickers.
Custom Quant use of GET /negotiate is deprecated and should migrate to POST and PATCH. Official Orderflow
integrations continue to use the GET compatibility flow.
See docs/websocket.md for the full WebSocket real-time feed documentation.
- quant-python-sockets — Python client for real-time WebSocket feeds
- quant-historical — Historical data download examples