TWS API 10.47, released May 20 2026, breaks two common integrations: it removes reqFundamentalData (plus its protobuf siblings, callbacks, and the FUNDAMENTAL_RATIOS = 47 tick type), and it adds a setting that prepends a $LEDGER- prefix to per-currency account values, changing the keys returned by reqAccountUpdates and reqAccountUpdatesMulti. The stable channel sits one step back at 10.45 (Mar 30 2026); 10.47 is the latest and the first 2026 line with Python API binaries12. If your bot reads fundamentals or parses per-currency balances, read this before you upgrade. Compare IBKR against other brokers in the Broker API Comparator.
TL;DR
- Stable: TWS API 10.45, released Mar 30 20261.
- Latest: TWS API 10.47, released May 20 2026 — first 2026 line shipping Python API support1.
- 10.47 removed fundamentals:
reqFundamentalData,reqFundamentalsDataProtoBuf,cancelFundamentalData,cancelFundamentalsDataProtoBuf, their callbacks, and tick typeFUNDAMENTAL_RATIOS = 4723. - 10.47
$LEDGER-prefix: a new API setting prepends$LEDGER-to per-currency keys (e.g.$LEDGER-CashBalance); off by default for upgrading users, on for new users; affectsreqAccountUpdates/reqAccountUpdatesMulti24. - 10.46 added ticks: odd-lot tick types 105–108 and generic tick 7872.
- Rate limits unchanged: 50 messages/second client cap and the historical-data pacing rules still hold5.
Version state in June 2026
IBKR runs two parallel channels on the TWS API download page1:
| Channel | Version | Release date | API languages |
|---|---|---|---|
| Stable | 10.45 | Mar 30 2026 | Java, C++, C#/.NET, ActiveX, DDE |
| Latest | 10.47 | May 20 2026 | Above plus Python |
Verified 2026-06-161. The split matters for a production bot: the stable channel is the conservative default, but the Python API binaries ride the latest channel, so a Python integration on the current download is already on 10.47 and inherits its breaking changes. The 2026 production release notes also list 10.46 and 10.48 entries beyond what the download page surfaces as the headline pair2.
The removed fundamentals API
The clearest break in 10.47 is the deletion of the legacy fundamentals path. Removed methods: reqFundamentalData, reqFundamentalsDataProtoBuf, cancelFundamentalData, and cancelFundamentalsDataProtoBuf, along with the matching callbacks and the FUNDAMENTAL_RATIOS = 47 tick type23. Code calling any of these against a 10.47 client stops returning data. This was a financial-statement and ratio feed (Reuters-sourced), separate from corporate-event data. IBKR's current path for corporate events is the Wall Street Horizon methods reqWshMetaData and reqWshEventData, which cover earnings dates, dividends, splits, and conferences6. A bot that depended on reqFundamentalData for ratios needs an external fundamentals source after upgrading.
The $LEDGER- per-currency prefix
The second behavior change is opt-in but easy to trip over. 10.47 adds an API setting, "Prepend '$LEDGER-' prefix to per-currency account values"24. It fixes a long-standing ambiguity: a key like CashBalance appeared both at the overall-account level and inside each currency ledger, with no way to tell them apart. With the setting on, per-currency keys become $LEDGER-CashBalance and so on, while account-level keys stay bare24. The default is what bites you: off for upgrading users, on for new users24. Two installs of the same bot can therefore parse different account-value keys depending on install age. Affected calls are reqAccountUpdates and reqAccountUpdatesMulti2.
What changed in 10.46
Between the 10.45 stable and 10.47 latest, 10.46 added market-data ticks rather than breaking anything2:
- Odd-lot tick types:
oddLotBid = 105,oddLotAsk = 106,oddLotBidSize = 107,oddLotAskSize = 1082. - Support for requesting generic tick 7872.
These are additive: existing tick handling keeps working, and the new ticks are available if you subscribe to them. The production notes also record a 10.48 entry — reqOpenOrders now includes de-activated orders — beyond the 10.47 latest-channel headline2.
Rate limits in 2026: no change
A frequent question around any API bump is whether the pacing rules moved. For TWS API in 2026 they did not. The client-to-TWS ceiling is still 50 messages per second, and a sustained breach still ends in TWS closing the connection5. Historical-data pacing is also unchanged: at most 60 requests per 10-minute window, no 6+ requests for the same contract/exchange/tick type within 2 seconds, no identical request repeated within 15 seconds, BID_ASK counted double, and 50 simultaneous open historical requests5. For the full pacing playbook see IBKR TWS API Rate Limits 2026; for the cost side see Interactive Brokers API Pricing 2026.
Upgrade checklist
- Audit for
reqFundamentalDataand its cancel/protobuf variants and theFUNDAMENTAL_RATIOStick; route those to an external fundamentals feed before moving to 10.4723. - Pin the
$LEDGER-setting explicitly in your build runbook so every install parses the same keys, rather than relying on the upgrade-vs-new default24. - Stay on 10.45 stable for non-Python clients that read fundamentals until the migration is done; the Python download is already on 10.471.
- Re-test account-value parsing against both prefixed and bare keys.
- No throttle changes to re-tune — the 50/second and historical pacing rules carry over from the prior line5.
Verified figures
The 10.45 stable (Mar 30 2026) and 10.47 latest (May 20 2026) versions, the Python-on-latest channel split, the 10.47 fundamentals removal (reqFundamentalData and variants plus the FUNDAMENTAL_RATIOS = 47 tick), the $LEDGER- prefix setting and its upgrade-vs-new default, the 10.46 odd-lot ticks (105–108) and generic tick 787, and the unchanged 50/second and historical pacing limits were all verified against IBKR's own pages on 2026-06-17. The IBKR Campus changelog page returned 403 in-session; the version table is taken from the public TWS API download page and the public 2026 production release notes instead. Prices and per-exchange data subscriptions are not restated here; see the pricing article.
Connects to
- IBKR TWS API Rate Limits 2026: the full pacing rules these updates leave intact.
- Interactive Brokers API Pricing 2026: the cost side of the same API.
- Alpaca vs Interactive Brokers API 2026: pacing model versus a flat per-minute cap.
- Broker API Comparator: IBKR's surface against other brokers.
References
Footnotes
-
Interactive Brokers. "TWS API" download page (Stable: API 10.45, Release Date Mar 30 2026; Latest: API 10.47, Release Date May 20 2026; Python included on the latest channel). interactivebrokers.github.io, verified 2026-06-16. https://interactivebrokers.github.io/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Interactive Brokers. "Trader Workstation (TWS) 2026 API Production Release Notes" (10.47 removes reqFundamentalData/reqFundamentalsDataProtoBuf/cancelFundamentalData/cancelFundamentalsDataProtoBuf and the related callbacks/tick types; adds the "$LEDGER-" per-currency prefix setting affecting reqAccountUpdates/reqAccountUpdatesMulti, disabled by default for upgrading users and enabled for new users; 10.46 adds odd-lot ticks 105–108 and generic tick 787; 10.48 reqOpenOrders includes de-activated orders). ibkrguides.com, verified 2026-06-16. https://www.ibkrguides.com/releasenotes/prod-2026.htm ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16
-
Interactive Brokers / industry coverage. "TWS API 10.47" (removed reqFundamentalData, reqFundamentalsDataProtoBuf, cancelFundamentalData, cancelFundamentalsDataProtoBuf, the fundamentalData callbacks, and tick type FUNDAMENTAL_RATIOS = 47). reelfinancial.com, verified 2026-06-16. https://www.reelfinancial.com/archives/98837 ↩ ↩2 ↩3
-
FX News Group. "Interactive Brokers updates TWS API" (10.47: new "Prepend '$LEDGER-' prefix to per-currency account values" setting; keys become e.g. "$LEDGER-CashBalance"; disabled by default for existing users, enabled for new ones). fxnewsgroup.com, verified 2026-06-16. https://fxnewsgroup.com/forex-news/retail-forex/interactive-brokers-updates-tws-api-2/ ↩ ↩2 ↩3 ↩4 ↩5
-
Interactive Brokers. "TWS API - Historical Data Limitations" (60 requests / 10 minutes, 6 same-contract requests / 2 seconds, identical request within 15 seconds, BID_ASK counts double, 50 max simultaneous open requests; the 50 messages/second client cap is documented in the TWS API introduction). interactivebrokers.github.io, verified 2026-06-16. https://interactivebrokers.github.io/tws-api/historical_limitations.html ↩ ↩2 ↩3 ↩4
-
Interactive Brokers. "TWS API - Fundamental Data" (current corporate-event path uses reqWshMetaData and reqWshEventData for earnings, dividends, splits, spinoffs, and conferences). interactivebrokers.github.io, verified 2026-06-16. https://interactivebrokers.github.io/tws-api/fundamentals.html ↩
Verified engine output
Show the recompute-verified inputs and outputs
| require_futures | 1 |
|---|---|
| max_auth_complexity | 5 |
| filters › require options | false |
|---|---|
| filters › require futures | true |
| filters › require crypto | false |
| filters › require mcp | false |
| filters › require free tier | false |
| filters › max auth complexity | 5 |
| results › row 1 › broker › id | schwab |
| results › row 1 › broker › name | Schwab |
| results › row 1 › broker › url | https://www.schwab.com/ |
| results › row 1 › broker › docs url | https://developer.schwab.com/ |
| results › row 1 › broker › auth | OAuth 2.0 (3-legged) |
| results › row 1 › broker › auth complexity | 4 |
| results › row 1 › broker › order types (9 items) | [...] |
| results › row 1 › broker › rate limits | 120 req/min per endpoint (published tier) |
| results › row 1 › broker › market data › row 1 | Real-time equities + options quotes |
| results › row 1 › broker › market data › row 2 | Historical bars (1m to daily) |
| results › row 1 › broker › market data › row 3 | No exchange depth via API |
| results › row 1 › broker › mcp | none |
| results › row 1 › broker › mcp note | No official or listed community MCP server |
| results › row 1 › broker › assets › stocks | true |
| results › row 1 › broker › assets › options | true |
| results › row 1 › broker › assets › futures | true |
| results › row 1 › broker › assets › crypto | false |
| results › row 1 › broker › assets › forex | true |
| results › row 1 › broker › assets › bonds | true |
| results › row 1 › broker › account minimum | 0 |
| results › row 1 › broker › commission | $0 equities, $0.65/contract options |
| results › row 1 › broker › good for | Established retail, post-TDA API migration |
| results › row 1 › broker › has free tier | true |
| results › row 1 › broker › notes › row 1 | API rebuilt after TD Ameritrade integration; still maturing |
| results › row 1 › broker › notes › row 2 | Requires individual developer registration and app review |
| results › row 1 › broker › notes › row 3 | Token refresh flow is finicky vs Alpaca/Tradier |
| results › row 1 › score | 2 |
| results › row 1 › max score | 2 |
| results › row 1 › fits | true |
| results › row 2 › broker › id | ibkr |
| results › row 2 › broker › name | Interactive Brokers |
| results › row 2 › broker › url | https://www.interactivebrokers.com/ |
| results › row 2 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| results › row 2 › broker › auth | OAuth + TWS/IB Gateway |
| results › row 2 › broker › auth complexity | 5 |
| results › row 2 › broker › order types (10 items) | [...] |
| results › row 2 › broker › rate limits | ~50 msg/sec per connection; 50 orders/sec burst |
| results › row 2 › broker › market data › row 1 | Global equities via subscription bundles |
| results › row 2 › broker › market data › row 2 | Level-2 depth on most exchanges |
| results › row 2 › broker › market data › row 3 | Historical depth across asset classes |
| results › row 2 › broker › mcp | community |
| results › row 2 › broker › mcp note | Community CLI MCP; audit before production |
| results › row 2 › broker › assets › stocks | true |
| results › row 2 › broker › assets › options | true |
| results › row 2 › broker › assets › futures | true |
| results › row 2 › broker › assets › crypto | true |
| results › row 2 › broker › assets › forex | true |
| results › row 2 › broker › assets › bonds | true |
| results › row 2 › broker › account minimum | 0 |
| results › row 2 › broker › commission | Tiered per-share or fixed; ~$0.0035/sh tiered |
| results › row 2 › broker › good for | Multi-asset-class, international, scale |
| results › row 2 › broker › has free tier | false |
| results › row 2 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| results › row 2 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| results › row 2 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| results › row 2 › score | 2 |
| results › row 2 › max score | 2 |
| results › row 2 › fits | true |
| results › row 3 › broker › id | alpaca |
| results › row 3 › broker › name | Alpaca |
| results › row 3 › broker › url | https://alpaca.markets/ |
| results › row 3 › broker › docs url | https://alpaca.markets/docs/ |
| results › row 3 › broker › auth | API Key + Secret |
| results › row 3 › broker › auth complexity | 1 |
| results › row 3 › broker › order types (10 items) | [...] |
| results › row 3 › broker › rate limits | 200 req/min (free), higher on paid tiers |
| results › row 3 › broker › market data › row 1 | IEX real-time (free) |
| results › row 3 › broker › market data › row 2 | Full SIP on Algo Trader Plus ($99/mo) |
| results › row 3 › broker › market data › row 3 | Historical bars + trades + quotes |
| results › row 3 › broker › mcp | official |
| results › row 3 › broker › mcp note | Official MCP V2, 61 actions, idempotent order submission |
| results › row 3 › broker › assets › stocks | true |
| results › row 3 › broker › assets › options | true |
| results › row 3 › broker › assets › futures | false |
| results › row 3 › broker › assets › crypto | true |
| results › row 3 › broker › assets › forex | false |
| results › row 3 › broker › assets › bonds | false |
| results › row 3 › broker › account minimum | 0 |
| results › row 3 › broker › commission | $0 (PFOF on equities) |
| results › row 3 › broker › good for | Solo AI operator, paper-to-live parity |
| results › row 3 › broker › has free tier | true |
| results › row 3 › broker › notes › row 1 | Free paper trading with same API surface as live |
| results › row 3 › broker › notes › row 2 | Options require Algo Trader Plus tier |
| results › row 3 › broker › notes › row 3 | Python/Go SDKs mature; rate-limit backoff documented |
| results › row 3 › score | 1 |
| results › row 3 › max score | 2 |
| results › row 3 › fits | false |
| results › row 3 › fail reasons › row 1 | Futures |
| results › row 4 › broker › id | tradier |
| results › row 4 › broker › name | Tradier |
| results › row 4 › broker › url | https://tradier.com/ |
| results › row 4 › broker › docs url | https://developer.tradier.com/ |
| results › row 4 › broker › auth | OAuth 2.0 |
| results › row 4 › broker › auth complexity | 3 |
| results › row 4 › broker › order types (8 items) | [...] |
| results › row 4 › broker › rate limits | 120 req/min market data, 60 req/min trading |
| results › row 4 › broker › market data › row 1 | Real-time equities + options (streaming) |
| results › row 4 › broker › market data › row 2 | Historical OHLC back ~5 years |
| results › row 4 › broker › market data › row 3 | No Level-2 depth |
| results › row 4 › broker › mcp | community |
| results › row 4 › broker › mcp note | Community MCP; idempotency is a manual patch |
| results › row 4 › broker › assets › stocks | true |
| results › row 4 › broker › assets › options | true |
| results › row 4 › broker › assets › futures | false |
| results › row 4 › broker › assets › crypto | false |
| results › row 4 › broker › assets › forex | false |
| results › row 4 › broker › assets › bonds | false |
| results › row 4 › broker › account minimum | 0 |
| results › row 4 › broker › commission | $0 equities (PFOF), $0.35/contract options Pro |
| results › row 4 › broker › good for | Options-first retail, multi-leg strategies |
| results › row 4 › broker › has free tier | true |
| results › row 4 › broker › notes › row 1 | Free sandbox with delayed data |
| results › row 4 › broker › notes › row 2 | Strong options chain + multi-leg order API |
| results › row 4 › broker › notes › row 3 | US-only account eligibility |
| results › row 4 › score | 1 |
| results › row 4 › max score | 2 |
| results › row 4 › fits | false |
| results › row 4 › fail reasons › row 1 | Futures |
| results › row 5 › broker › id | robinhood |
| results › row 5 › broker › name | Robinhood |
| results › row 5 › broker › url | https://robinhood.com/ |
| results › row 5 › broker › docs url | https://docs.robinhood.com/ |
| results › row 5 › broker › auth | OAuth 2.0 (unofficial endpoints) |
| results › row 5 › broker › auth complexity | 4 |
| results › row 5 › broker › order types › row 1 | market |
| results › row 5 › broker › order types › row 2 | limit |
| results › row 5 › broker › order types › row 3 | stop |
| results › row 5 › broker › order types › row 4 | stop-limit |
| results › row 5 › broker › order types › row 5 | gtc |
| results › row 5 › broker › order types › row 6 | ioc |
| results › row 5 › broker › rate limits | Not publicly documented; low throughput |
| results › row 5 › broker › market data › row 1 | Delayed quotes in public tier |
| results › row 5 › broker › market data › row 2 | Limited historical depth |
| results › row 5 › broker › market data › row 3 | No public Level-2 |
| results › row 5 › broker › mcp | none |
| results › row 5 › broker › mcp note | No MCP; unofficial SDKs only |
| results › row 5 › broker › assets › stocks | true |
| results › row 5 › broker › assets › options | true |
| results › row 5 › broker › assets › futures | false |
| results › row 5 › broker › assets › crypto | true |
| results › row 5 › broker › assets › forex | false |
| results › row 5 › broker › assets › bonds | false |
| results › row 5 › broker › account minimum | 0 |
| results › row 5 › broker › commission | $0 (PFOF), $5/mo Gold for margin + extras |
| results › row 5 › broker › good for | Casual retail; not recommended for agents |
| results › row 5 › broker › has free tier | true |
| results › row 5 › broker › notes › row 1 | No officially supported public API in 2026 |
| results › row 5 › broker › notes › row 2 | Community SDKs break on auth changes without notice |
| results › row 5 › broker › notes › row 3 | Paper trading unavailable |
| results › row 5 › score | 1 |
| results › row 5 › max score | 2 |
| results › row 5 › fits | false |
| results › row 5 › fail reasons › row 1 | Futures |
| fitting brokers › row 1 › broker › id | schwab |
| fitting brokers › row 1 › broker › name | Schwab |
| fitting brokers › row 1 › broker › url | https://www.schwab.com/ |
| fitting brokers › row 1 › broker › docs url | https://developer.schwab.com/ |
| fitting brokers › row 1 › broker › auth | OAuth 2.0 (3-legged) |
| fitting brokers › row 1 › broker › auth complexity | 4 |
| fitting brokers › row 1 › broker › order types (9 items) | [...] |
| fitting brokers › row 1 › broker › rate limits | 120 req/min per endpoint (published tier) |
| fitting brokers › row 1 › broker › market data › row 1 | Real-time equities + options quotes |
| fitting brokers › row 1 › broker › market data › row 2 | Historical bars (1m to daily) |
| fitting brokers › row 1 › broker › market data › row 3 | No exchange depth via API |
| fitting brokers › row 1 › broker › mcp | none |
| fitting brokers › row 1 › broker › mcp note | No official or listed community MCP server |
| fitting brokers › row 1 › broker › assets › stocks | true |
| fitting brokers › row 1 › broker › assets › options | true |
| fitting brokers › row 1 › broker › assets › futures | true |
| fitting brokers › row 1 › broker › assets › crypto | false |
| fitting brokers › row 1 › broker › assets › forex | true |
| fitting brokers › row 1 › broker › assets › bonds | true |
| fitting brokers › row 1 › broker › account minimum | 0 |
| fitting brokers › row 1 › broker › commission | $0 equities, $0.65/contract options |
| fitting brokers › row 1 › broker › good for | Established retail, post-TDA API migration |
| fitting brokers › row 1 › broker › has free tier | true |
| fitting brokers › row 1 › broker › notes › row 1 | API rebuilt after TD Ameritrade integration; still maturing |
| fitting brokers › row 1 › broker › notes › row 2 | Requires individual developer registration and app review |
| fitting brokers › row 1 › broker › notes › row 3 | Token refresh flow is finicky vs Alpaca/Tradier |
| fitting brokers › row 1 › score | 2 |
| fitting brokers › row 1 › max score | 2 |
| fitting brokers › row 1 › fits | true |
| fitting brokers › row 2 › broker › id | ibkr |
| fitting brokers › row 2 › broker › name | Interactive Brokers |
| fitting brokers › row 2 › broker › url | https://www.interactivebrokers.com/ |
| fitting brokers › row 2 › broker › docs url | https://www.interactivebrokers.com/en/trading/ib-api.php |
| fitting brokers › row 2 › broker › auth | OAuth + TWS/IB Gateway |
| fitting brokers › row 2 › broker › auth complexity | 5 |
| fitting brokers › row 2 › broker › order types (10 items) | [...] |
| fitting brokers › row 2 › broker › rate limits | ~50 msg/sec per connection; 50 orders/sec burst |
| fitting brokers › row 2 › broker › market data › row 1 | Global equities via subscription bundles |
| fitting brokers › row 2 › broker › market data › row 2 | Level-2 depth on most exchanges |
| fitting brokers › row 2 › broker › market data › row 3 | Historical depth across asset classes |
| fitting brokers › row 2 › broker › mcp | community |
| fitting brokers › row 2 › broker › mcp note | Community CLI MCP; audit before production |
| fitting brokers › row 2 › broker › assets › stocks | true |
| fitting brokers › row 2 › broker › assets › options | true |
| fitting brokers › row 2 › broker › assets › futures | true |
| fitting brokers › row 2 › broker › assets › crypto | true |
| fitting brokers › row 2 › broker › assets › forex | true |
| fitting brokers › row 2 › broker › assets › bonds | true |
| fitting brokers › row 2 › broker › account minimum | 0 |
| fitting brokers › row 2 › broker › commission | Tiered per-share or fixed; ~$0.0035/sh tiered |
| fitting brokers › row 2 › broker › good for | Multi-asset-class, international, scale |
| fitting brokers › row 2 › broker › has free tier | false |
| fitting brokers › row 2 › broker › notes › row 1 | Requires TWS or IB Gateway running locally |
| fitting brokers › row 2 › broker › notes › row 2 | Idempotency via client-supplied orderId |
| fitting brokers › row 2 › broker › notes › row 3 | Fully headless gateway is possible but under-documented |
| fitting brokers › row 2 › score | 2 |
| fitting brokers › row 2 › max score | 2 |
| fitting brokers › row 2 › fits | true |
Computed live at build time.
Frequently asked questions
- What is the latest Interactive Brokers TWS API version in 2026?
- TWS API 10.47, released May 20 2026, is the latest channel and the first 2026 line with Python API binaries. The stable channel is 10.45, released Mar 30 2026 (verified 2026-06-16).
- What did TWS API 10.47 remove?
- It removed the legacy fundamentals path: reqFundamentalData, reqFundamentalsDataProtoBuf, cancelFundamentalData, cancelFundamentalsDataProtoBuf, their callbacks, and the FUNDAMENTAL_RATIOS = 47 tick type. Code calling these stops returning data on a 10.47 client.
- What is the $LEDGER- prefix in TWS API 10.47?
- A new API setting that prepends $LEDGER- to per-currency account-value keys (e.g. $LEDGER-CashBalance) so they are distinct from account-level keys. It is off by default for upgrading users and on for new users, and it affects reqAccountUpdates and reqAccountUpdatesMulti.
- Did the IBKR API rate limits change in the 2026 updates?
- No. The 50 messages/second client cap and the historical-data pacing rules (60 per 10 minutes, 6 per 2 seconds for the same contract, no identical request within 15 seconds, BID_ASK counted double, 50 simultaneous open requests) carry over unchanged (verified 2026-06-16).