The IBKR TWS API allows your market-data lines divided by 2 requests per second, which is 50 requests per second on the default 100 lines, and it scales up as lines grow (200 lines give 100 per second). On top of that, historical bars of 30 seconds or less carry their own pacing rules: no identical request within 15 seconds, no 6 or more requests for the same contract, exchange and tick type within 2 seconds, and no more than 60 requests in any 10-minute window. Both rules come from IBKR's current TWS API documentation, read 2026-10-1112. What happens on a breach depends on a TWS setting: reject with error 100 (three strikes end the session) or queue and pace automatically3. Compare brokers in the Broker API Comparator.

What is the TWS API request limit?

Rule Value Source
Requests per second Market-data lines ÷ 2 IBKR pacing docs1
Default lines 100, so 50 requests/second IBKR pacing docs1
Example with more lines 200 lines, 100 requests/second IBKR pacing docs1
FIX through IB Gateway 250 messages/second IBKR pacing docs1

Only the request that starts a data flow counts: a market-data subscription is one request, however many ticks it delivers afterwards1. IBKR notes that above 50 requests per second "some orders may be queued and delayed" and points heavy users to the FIX API1.

What happens when I exceed it?

TWS and IB Gateway have a Global Configuration setting under API > Settings: "Reject messages above maximum allowed message rate vs applying pacing"3.

  • Checked (reject): TWS returns error code 100 for each request over the limit. After three violations the API session terminates, which surfaces as WinError 10053 on Windows or a broken pipe on macOS and Linux3.
  • Unchecked (pace): TWS queues the excess and acknowledges requests in the EReader thread before moving on3.

For an unattended agent, pacing is the safer default, but it turns a burst into latency. A client-side token bucket at your limit keeps both behaviours out of the hot path.

What are the historical-data pacing rules?

IBKR's "Pacing Violations for Small Bars (30 secs or less)" page lists three restrictions2:

Restriction Threshold
Identical historical requests Not within 15 seconds
Same contract, exchange and tick type Fewer than 6 requests within 2 seconds
Requests in any 10-minute period No more than 60
BID_ASK requests Count twice

IBKR states that "these limitations apply to all our clients and it is not possible to overcome them", and suggests a specialized data provider if they do not fit your needs2. The current docs scope these rules to bars of 30 seconds or less. IBKR's older TWS reference, now marked deprecated, also listed a maximum of 50 simultaneous open historical requests4; the current page does not restate that number, so keep concurrency well below it.

How many instruments can I stream at once?

As many as your market-data lines. Every client starts with 100 concurrent lines and never falls below 1005. After the first month the allocation is the greater of monthly commissions divided by 8, equity × 100 / $1,000,000 (rounded down), or 100, so an account with $500 of monthly commissions and $1,245,000 of equity gets 124 lines5. Lines are shared between TWS watchlists and every API connection under the same username6. Because the request limit is lines ÷ 2, buying more lines through commissions or a quote booster also raises your requests per second1.

How do I pull option chains without hitting limits?

Use reqSecDefOptParams. IBKR's option-chain page says that enumerating chains through reqContractDetails with an incompletely defined contract is throttled and slows as the definition becomes more ambiguous, and that reqSecDefOptParams "was introduced that does not have the throttling limitation"7. It returns the expiries and strikes for an underlying; some strike-expiry combinations may not be valid contracts, so validate before subscribing.

How should a compliant client be built?

  • One token bucket at your lines ÷ 2 per second for every outbound request.
  • A historical queue with a rolling 10-minute counter (cap 60), a per-contract 2-second debounce, a 15-second identical-request guard, and BID_ASK counted twice.
  • Pacing mode on in TWS for unattended runs, so a burst queues instead of killing the session.
  • reqSecDefOptParams for chains, never reqContractDetails in a loop.
  • Subscription rotation through your line budget, shared with any TWS watchlists.

For the cost side (the API is free; commissions and market-data subscriptions are not), see Interactive Brokers API Pricing 2026.

Verified figures

The lines ÷ 2 rule, the 100-line default, the 200-line example and the FIX 250 messages/second figure, the reject-versus-pace setting and error 100, the small-bar historical pacing rules, the line-allocation formula and the option-chain guidance were read from IBKR's current TWS API and market-data documentation on 2026-10-11.

Connects to

References

Footnotes

  1. Interactive Brokers. "TWS API: Pacing Limitations, Introduction" (maximum requests per second = market-data lines / 2; default 100 lines = 50/second; 200 lines = 100/second; FIX via IB Gateway 250 messages/second). Read 2026-10-11. https://www.interactivebrokers.com/docs/tws-api/doc/pacing-limitations/introduction ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  2. Interactive Brokers. "TWS API: Pacing Violations for Small Bars (30 secs or less)" (15-second identical-request rule; 6 requests per contract/exchange/tick type in 2 seconds; 60 requests per 10 minutes; BID_ASK counted twice). Read 2026-10-11. https://www.interactivebrokers.com/docs/tws-api/doc/market-data-historical/historical-data-limitations/pacing-violations-for-small-bars-30-secs-or-less ↩ ↩2 ↩3

  3. Interactive Brokers. "TWS API: Pacing Behavior" (reject vs pace setting; error 100; session ends after three violations). Read 2026-10-11. https://www.interactivebrokers.com/docs/tws-api/doc/pacing-limitations/pacing-behavior ↩ ↩2 ↩3 ↩4

  4. Interactive Brokers. "TWS API v9.72+: Historical Data Limitations" (legacy reference, marked deprecated; maximum 50 simultaneous open historical requests). Read 2026-10-11. https://interactivebrokers.github.io/tws-api/historical_limitations.html ↩

  5. Interactive Brokers. "Market Data Lines: How Market Data is Allocated" (100 lines minimum; commissions / 8 or equity × 100 / $1,000,000). Read 2026-10-11. https://www.interactivebrokers.com/docs/general/market-data-subscriptions/market-data-lines/how-market-data-is-allocated ↩ ↩2

  6. Interactive Brokers. "Market Data Lines: Introduction" (lines shared between TWS and API connections). Read 2026-10-11. https://www.interactivebrokers.com/docs/general/market-data-subscriptions/market-data-lines/introduction ↩

  7. Interactive Brokers. "TWS API: Option Chains" (reqContractDetails throttled for chains; reqSecDefOptParams without the throttling limitation). Read 2026-10-11. https://www.interactivebrokers.com/docs/tws-api/doc/contracts-financial-instruments/option-chains/introduction ↩

Verified engine output

Show the recompute-verified inputs and outputs
Multi-asset brokers including futures coverage
Inputs
require_futures1
max_auth_complexity5
Result
filters › require optionsfalse
filters › require futurestrue
filters › require cryptofalse
filters › require mcpfalse
filters › require free tierfalse
filters › max auth complexity5
results › row 1 › broker › idibkr
results › row 1 › broker › nameInteractive Brokers
results › row 1 › broker › urlhttps://www.interactivebrokers.com/
results › row 1 › broker › docs urlhttps://www.interactivebrokers.com/en/trading/ib-api.php
results › row 1 › broker › authOAuth + TWS/IB Gateway
results › row 1 › broker › auth complexity5
results › row 1 › broker › order types (10 items)[...]
results › row 1 › broker › rate limitsMarket-data lines / 2 requests per second (50 on the default 100 lines); small-bar history 60 requests per 10 min
results › row 1 › broker › market data › row 1Global equities via subscription bundles
results › row 1 › broker › market data › row 2Level-2 depth on most exchanges
results › row 1 › broker › market data › row 3Historical depth across asset classes
results › row 1 › broker › mcpofficial
results › row 1 › broker › mcp noteOfficial IBKR Connector: remote MCP at api.ibkr.com, IBKR sign-in, one account; drafts trade instructions that you submit as orders yourself
results › row 1 › broker › assets › stockstrue
results › row 1 › broker › assets › optionstrue
results › row 1 › broker › assets › futurestrue
results › row 1 › broker › assets › cryptotrue
results › row 1 › broker › assets › forextrue
results › row 1 › broker › assets › bondstrue
results › row 1 › broker › account minimum0
results › row 1 › broker › commissionTiered per-share or fixed; ~$0.0035/sh tiered
results › row 1 › broker › good forMulti-asset-class, international, scale
results › row 1 › broker › has free tierfalse
results › row 1 › broker › notes › row 1Requires TWS or IB Gateway running locally
results › row 1 › broker › notes › row 2Idempotency via client-supplied orderId
results › row 1 › broker › notes › row 3Fully headless gateway is possible but under-documented
results › row 1 › score2
results › row 1 › max score2
results › row 1 › fitstrue
results › row 2 › broker › idalpaca
results › row 2 › broker › nameAlpaca
results › row 2 › broker › urlhttps://alpaca.markets/
results › row 2 › broker › docs urlhttps://alpaca.markets/docs/
results › row 2 › broker › authAPI Key + Secret
results › row 2 › broker › auth complexity1
results › row 2 › broker › order types (10 items)[...]
results › row 2 › broker › rate limitsTrading API 200 req/min; market data 200/min free, 10,000/min on Algo Trader Plus
results › row 2 › broker › market data › row 1IEX real-time (free)
results › row 2 › broker › market data › row 2Full SIP on Algo Trader Plus ($99/mo)
results › row 2 › broker › market data › row 3Historical bars + trades + quotes
results › row 2 › broker › mcpofficial
results › row 2 › broker › mcp noteOfficial open-source MCP server (V2 rewrite on FastMCP/OpenAPI); data, paper and live trading
results › row 2 › broker › assets › stockstrue
results › row 2 › broker › assets › optionstrue
results › row 2 › broker › assets › futuresfalse
results › row 2 › broker › assets › cryptotrue
results › row 2 › broker › assets › forexfalse
results › row 2 › broker › assets › bondsfalse
results › row 2 › broker › account minimum0
results › row 2 › broker › commission$0 (PFOF on equities)
results › row 2 › broker › good forSolo AI operator, paper-to-live parity
results › row 2 › broker › has free tiertrue
results › row 2 › broker › notes › row 1Free paper trading with same API surface as live
results › row 2 › broker › notes › row 2Real-time OPRA options data needs Algo Trader Plus; Basic gets the indicative feed
results › row 2 › broker › notes › row 3Python/Go SDKs mature; rate-limit backoff documented
results › row 2 › score1
results › row 2 › max score2
results › row 2 › fitsfalse
results › row 2 › fail reasons › row 1Futures
results › row 3 › broker › idtradier
results › row 3 › broker › nameTradier
results › row 3 › broker › urlhttps://tradier.com/
results › row 3 › broker › docs urlhttps://developer.tradier.com/
results › row 3 › broker › authOAuth 2.0
results › row 3 › broker › auth complexity3
results › row 3 › broker › order types (8 items)[...]
results › row 3 › broker › rate limits120 req/min standard and market data, 60 req/min trading (production)
results › row 3 › broker › market data › row 1Real-time equities + options (streaming)
results › row 3 › broker › market data › row 2Historical OHLC back ~5 years
results › row 3 › broker › market data › row 3No Level-2 depth
results › row 3 › broker › mcpofficial
results › row 3 › broker › mcp noteOfficial hosted MCP server (Streamable HTTP, personal API token); market data, accounts and order placement
results › row 3 › broker › assets › stockstrue
results › row 3 › broker › assets › optionstrue
results › row 3 › broker › assets › futuresfalse
results › row 3 › broker › assets › cryptofalse
results › row 3 › broker › assets › forexfalse
results › row 3 › broker › assets › bondsfalse
results › row 3 › broker › account minimum0
results › row 3 › broker › commission$0 equities (PFOF), $0.35/contract options Pro
results › row 3 › broker › good forOptions-first retail, multi-leg strategies
results › row 3 › broker › has free tiertrue
results › row 3 › broker › notes › row 1Free sandbox with delayed data
results › row 3 › broker › notes › row 2Strong options chain + multi-leg order API
results › row 3 › broker › notes › row 3US-only account eligibility
results › row 3 › score1
results › row 3 › max score2
results › row 3 › fitsfalse
results › row 3 › fail reasons › row 1Futures
results › row 4 › broker › idrobinhood
results › row 4 › broker › nameRobinhood
results › row 4 › broker › urlhttps://robinhood.com/
results › row 4 › broker › docs urlhttps://docs.robinhood.com/
results › row 4 › broker › authAPI key (Crypto Trading API); Robinhood sign-in (Trading MCP)
results › row 4 › broker › auth complexity3
results › row 4 › broker › order types › row 1market
results › row 4 › broker › order types › row 2limit
results › row 4 › broker › order types › row 3stop
results › row 4 › broker › order types › row 4stop-limit
results › row 4 › broker › rate limitsNot publicly documented
results › row 4 › broker › market data › row 1Delayed quotes in public tier
results › row 4 › broker › market data › row 2Limited historical depth
results › row 4 › broker › market data › row 3No public Level-2
results › row 4 › broker › mcpofficial
results › row 4 › broker › mcp noteOfficial Robinhood Trading MCP (Agentic Trading): long equities, options and crypto, only in a dedicated agentic account; no multi-leg options
results › row 4 › broker › assets › stockstrue
results › row 4 › broker › assets › optionstrue
results › row 4 › broker › assets › futuresfalse
results › row 4 › broker › assets › cryptotrue
results › row 4 › broker › assets › forexfalse
results › row 4 › broker › assets › bondsfalse
results › row 4 › broker › account minimum0
results › row 4 › broker › commission$0 (PFOF), $5/mo Gold for margin + extras
results › row 4 › broker › good forAgent-driven trading from an existing Robinhood account; no REST API for stocks or options
results › row 4 › broker › has free tiertrue
results › row 4 › broker › notes › row 1Official REST API covers crypto only; stocks and options are reachable only through the Trading MCP
results › row 4 › broker › notes › row 2Trade approvals are off by default for external MCP agents
results › row 4 › broker › notes › row 3Paper trading unavailable
results › row 4 › score1
results › row 4 › max score2
results › row 4 › fitsfalse
results › row 4 › fail reasons › row 1Futures
results › row 5 › broker › idschwab
results › row 5 › broker › nameSchwab
results › row 5 › broker › urlhttps://www.schwab.com/
results › row 5 › broker › docs urlhttps://developer.schwab.com/
results › row 5 › broker › authOAuth 2.0 (3-legged)
results › row 5 › broker › auth complexity4
results › row 5 › broker › order types (9 items)[...]
results › row 5 › broker › rate limits120 req/min for non-order calls per app; order writes 0-120/min per account, set at app registration
results › row 5 › broker › market data › row 1Real-time equities + options quotes
results › row 5 › broker › market data › row 2Historical bars (1m to daily)
results › row 5 › broker › market data › row 3No exchange depth via API
results › row 5 › broker › mcpcommunity
results › row 5 › broker › mcp noteNo official MCP; community servers wrap the Trader API (self-hosted, re-authorize when the 7-day refresh token expires)
results › row 5 › broker › assets › stockstrue
results › row 5 › broker › assets › optionstrue
results › row 5 › broker › assets › futuresfalse
results › row 5 › broker › assets › cryptofalse
results › row 5 › broker › assets › forexfalse
results › row 5 › broker › assets › bondsfalse
results › row 5 › broker › account minimum0
results › row 5 › broker › commission$0 equities, $0.65/contract options
results › row 5 › broker › good forEstablished retail, post-TDA API migration
results › row 5 › broker › has free tiertrue
results › row 5 › broker › notes › row 1API rebuilt after TD Ameritrade integration; still maturing
results › row 5 › broker › notes › row 2Orders cover stocks, ETFs and options; futures and forex trade on thinkorswim, not through the API
results › row 5 › broker › notes › row 3Requires individual developer registration and app review
results › row 5 › broker › notes › row 4Token refresh flow is finicky vs Alpaca/Tradier
results › row 5 › score1
results › row 5 › max score2
results › row 5 › fitsfalse
results › row 5 › fail reasons › row 1Futures
fitting brokers › row 1 › broker › idibkr
fitting brokers › row 1 › broker › nameInteractive Brokers
fitting brokers › row 1 › broker › urlhttps://www.interactivebrokers.com/
fitting brokers › row 1 › broker › docs urlhttps://www.interactivebrokers.com/en/trading/ib-api.php
fitting brokers › row 1 › broker › authOAuth + TWS/IB Gateway
fitting brokers › row 1 › broker › auth complexity5
fitting brokers › row 1 › broker › order types (10 items)[...]
fitting brokers › row 1 › broker › rate limitsMarket-data lines / 2 requests per second (50 on the default 100 lines); small-bar history 60 requests per 10 min
fitting brokers › row 1 › broker › market data › row 1Global equities via subscription bundles
fitting brokers › row 1 › broker › market data › row 2Level-2 depth on most exchanges
fitting brokers › row 1 › broker › market data › row 3Historical depth across asset classes
fitting brokers › row 1 › broker › mcpofficial
fitting brokers › row 1 › broker › mcp noteOfficial IBKR Connector: remote MCP at api.ibkr.com, IBKR sign-in, one account; drafts trade instructions that you submit as orders yourself
fitting brokers › row 1 › broker › assets › stockstrue
fitting brokers › row 1 › broker › assets › optionstrue
fitting brokers › row 1 › broker › assets › futurestrue
fitting brokers › row 1 › broker › assets › cryptotrue
fitting brokers › row 1 › broker › assets › forextrue
fitting brokers › row 1 › broker › assets › bondstrue
fitting brokers › row 1 › broker › account minimum0
fitting brokers › row 1 › broker › commissionTiered per-share or fixed; ~$0.0035/sh tiered
fitting brokers › row 1 › broker › good forMulti-asset-class, international, scale
fitting brokers › row 1 › broker › has free tierfalse
fitting brokers › row 1 › broker › notes › row 1Requires TWS or IB Gateway running locally
fitting brokers › row 1 › broker › notes › row 2Idempotency via client-supplied orderId
fitting brokers › row 1 › broker › notes › row 3Fully headless gateway is possible but under-documented
fitting brokers › row 1 › score2
fitting brokers › row 1 › max score2
fitting brokers › row 1 › fitstrue

Computed live at build time.

Frequently asked questions

What is the IBKR TWS API rate limit?
Your market-data lines divided by 2 requests per second. Every account starts with 100 lines, so the default is 50 requests per second; 200 lines give 100 per second. Only the request that starts a data flow counts (IBKR TWS API docs, read 2026-10-11).
What happens if I exceed the TWS API pacing limit?
It depends on the TWS setting 'Reject messages above maximum allowed message rate vs applying pacing'. With reject on, TWS returns error 100 and terminates the API session after three violations. With it off, TWS queues and paces the requests.
What triggers an IBKR historical-data pacing violation?
For bars of 30 seconds or less: an identical request within 15 seconds, 6 or more requests for the same contract, exchange and tick type within 2 seconds, or more than 60 requests in any 10-minute period. BID_ASK requests count twice.
How do I poll IBKR option chains without hitting rate limits?
Use reqSecDefOptParams, which returns expiries and strikes without the throttling that applies when reqContractDetails enumerates a chain from an incompletely defined contract.
How many market-data lines does IBKR give?
100 to start, never fewer. After the first month IBKR allocates the greater of monthly commissions divided by 8, equity times 100 divided by $1,000,000, or 100. Lines are shared between TWS and API connections.