general
rate limits & quotas
Understand API query quotas, endpoint isolation, reset schedules, and service-specific limits.
To protect low-latency streaming infrastructure for all traders, gexbot applies tiered query quotas and concurrency limits. Limits are generous and are designed to comfortably accommodate multi-chart and multi-profile workflows for intraday trading over plain REST polling.
Will my use of the API hit the quotas?
No, not when you use the API as documented. The quotas stop abuse and badly written scripts, such as a loop that sends requests with no delay. gexbot does not publish the exact quota numbers.
Quota Policy & Endpoint Isolation
- Independent Endpoint Buckets: Quotas track independently per endpoint pool. Every route form of one endpoint shares one pool, including the platform integration routes. Exceeding a limit on one endpoint (such as historical downloads or Research charts) does not block your account on other endpoints or live WebSockets.
- Quota Windows: Quotas operate over independent daily and monthly windows.
- Per Account: Quotas count per account. All API keys of one account share each pool.
- Midnight ET Rollover: Daily quotas reset every night at 12:00 AM ET (Midnight Eastern Time) to align with US trading session boundaries. Monthly quotas reset at 12:00 AM ET on the first day of the month.
- Email Breach Notifications: On the first breach of an endpoint in a daily or monthly window, gexbot sends an email alert to your registered account email (maximum 1 notification per endpoint per window).
Service-Specific Quotas
Live REST API (Classic, State, Orderflow)
- Operating Hours (NYSE RTH): Spot prices, trade classification, and live feeds update actively from 9:30 AM to 4:00 PM ET. During the 8:00–8:30 AM ET premarket window, active
0DTE/1DTEexpirations advance to the new trading day and Classic GEX by Open Interest updates (published by 8:30 AM ET); State and Orderflow begin streaming the new session's expirations at 9:30 AM ET. - Tier Scaling: The
api_defaultallowance grows with each subscription level. Theapi_majorsandapi_max_changeallowances grow fromClassictoStatetoOrderflow.Quantuses the sameapi_majorsandapi_max_changeallowance asOrderflow. History and futures allowances are fixed. - Server Calculation Frequency: Live calculations refresh at most once per second (1/sec) during market hours. No per-second burst limit applies. Requests for a single ticker at rates above 1 Hz return duplicate snapshots and consume your daily and monthly pool quotas.
- Universe Scanning: To track multiple tickers or profiles simultaneously, stream metrics over WebSockets using the Quant tier rather than heavy REST polling.
Research API (gbR)
- Research add-on required: A
research_API key can be created only with the active Research add-on. The Research REST API has no preview tier. - Web app and Discord without the add-on: 50 charts per day and 1,500 per month for a linked account; 10 per day and 300 per month for a Discord account with no linked gexbot account.
- Add-on quota: 1,000 charts per day and 20,000 per month in the web app and Discord. A Research API key has its own pool (
api_research_command), separate from the gexbot data pools: 1,000,000 requests per day and 30,000,000 per month per endpoint. - Dynamic Caching:
- Market Hours (09:30–16:00 ET): Live metrics cache on 15-minute floor intervals on-request.
- Premarket (before 09:30 ET): Uses the previous session quotes. Open Interest refreshes daily at 08:00 ET.
- After Hours & Weekends: Returns the cached snapshot from the previous session close.
Quant WebSocket Streaming
- Session Slot: Each account has one custom-script WebSocket session slot, shared by all custom API keys of the account, and one platform-integration session slot, shared by the official platform keys (ATAS, Bookmap, NinjaTrader, MotiveWave, Quantower, Sierra Chart, TradingView). A slot covers every hub the account is authorized for (
v2_classic,v2_state_gex,v2_state_greeks_zero,v2_state_greeks,v2_state_greeks_one,v2_orderflow). Spot data uses these same connections and has no hub of its own. One custom-script session and one platform-integration session can run at the same time. - Subsequent Negotiations: A new
POSTorGET /negotiatefrom any key of the same account closes the existing connections of that slot on every hub with the reasonWebsocket Session Limit Reachedbefore it returns new URLs.PATCH /negotiatedoes not close the session; it needs a live connection on every targeted hub. - Group Quotas: Default limit of 150 active hub and group pairs. Each subscribed analytics group plus its companion
{TICKER}_spotmembership counts toward this limit. - Connection Window: Authorized URLs from negotiation expire after 15 minutes if not connected.
Handling 429 and 5xx Responses
When you exceed a rate limit quota:
- The server returns HTTP status
429 Too Many Requests. - The response body includes a descriptive error message:
{ "error": "Rate limit exceeded." } - Use exponential backoff before retrying
429and transient5xxresponses. - If support raises your limit during a window, the 429 can continue for up to 15 minutes.