# Broker streaming APIs compared

Independent and unofficial. Not affiliated with or endorsed by any broker or platform named here. Educational only: nothing here is advice, and nothing here recommends a broker or a trade.

This is the markdown version of https://openbrokerapi.com/guides/streaming-compared, written from the same records as that page.

Risk warning: CFDs and spread bets are complex instruments and come with a high risk of losing money rapidly due to leverage. You can lose money on these products, and each provider publishes its own loss figure under FCA rules. You should consider whether you understand how they work and whether you can afford to take the high risk of losing your money. Automated and API trading can amplify losses through bugs, connectivity failures and runaway orders.

How each broker and platform API pushes prices and account updates: the transport, the cap on streams or subscriptions, and the heartbeat, each with its source and checked date.

- Last reviewed: 2026-09-18

Unverified in part: carried over from an earlier version of this site. The links below are the sources it was written from, but its statements have not been re-read at source since the date shown, so check anything you rely on.

## Streaming by API

- API: [OANDA](https://openbrokerapi.com/brokers/oanda); Transport: HTTP streaming: one long lived HTTP connection to the stream host (stream-fxtrade or stream-fxpractice), sending newline delimited JSON price and heartbeat lines.; Max streams or subscriptions: 20 active streams per IP address; no more than 2 new connections a second; at most 4 prices a second per instrument; Heartbeat: Every 5 seconds on pricing and transaction streams; Source: [developer.oanda.com](https://developer.oanda.com/rest-live-v20/development-guide/) Transport and heartbeat: [developer.oanda.com](https://developer.oanda.com/rest-live-v20/pricing-ep/); Checked: 18 Sep 2026
- API: [IG](https://openbrokerapi.com/brokers/ig); Transport: Streaming connections; Max streams or subscriptions: 40 concurrent streaming subscriptions per streaming connection. IG warns that opening extra connections to get past that risks having your API permissions revoked; Heartbeat: Not stated on the IG streaming guide or the Labs FAQ we opened; Source: [labs.ig.com](https://labs.ig.com/streaming-api-guide.html); Checked: 19 Sep 2026
- API: [Capital.com](https://openbrokerapi.com/brokers/capital-com); Transport: WebSocket (wss://api-streaming-capital.backend-capital.com/connect); Max streams or subscriptions: Maximum of 40 instruments; Heartbeat: Ping at least every 10 minutes; Source: [open-api.capital.com](https://open-api.capital.com/); Checked: 18 Sep 2026
- API: [Saxo OpenAPI](https://openbrokerapi.com/brokers/saxo); Transport: WebSocket, separate SIM and live hosts; Max streams or subscriptions: Withdrawn on 20 Sep 2026. Saxo used to publish 4 streaming connections per user and a 200 instrument cap on price subscriptions. The streaming pages opened that day say only that the number of WebSocket connections depends on the throttling profile assigned to the application, so both figures are unverified; Heartbeat: Control messages carry the reference id _heartbeat for keepalive. The interval in seconds is not stated on the streaming pages we opened.; Source: [openapi.help.saxo](https://openapi.help.saxo/hc/en-us/articles/4417467162641-How-many-concurrent-price-subscriptions-can-I-have) Heartbeat: [developer.saxo](https://www.developer.saxo/openapi/learn/streaming); Checked: 19 Sep 2026
- API: [Interactive Brokers](https://openbrokerapi.com/brokers/ibkr); Transport: Web API: WebSocket. TWS API: event driven socket; Max streams or subscriptions: Web API: capped by the account's market data lines, 100 per user by default, and 5 concurrent historical requests; top of book updates every 500ms and an smd stream ends after 15 minutes unless re-requested. TWS API: up to 32 simultaneous connections, each with its own client id; Heartbeat: Websocket: an ech+hb echo heartbeat, which IBKR recommends every 10 seconds. REST session: POST /tickle about every 60 seconds; Source: [interactivebrokers.com](https://www.interactivebrokers.com/docs/web-api/web-api-v-1-0-documentation/websockets) Heartbeat and tickle: [interactivebrokers.com](https://www.interactivebrokers.com/docs/web-api/v1/endpoints/session/ping-the-server); Checked: 18 Sep 2026
- API: [eToro](https://openbrokerapi.com/brokers/etoro); Transport: WebSocket topics such as instrument:\<id> and candle:\<id>; authenticate for private updates; Max streams or subscriptions: None published. The WebSocket overview page states no connection or subscription limit; the REST limits beside it are 60 requests a minute for reads and 20 for trading, per user key; Heartbeat: None documented. No heartbeat, reconnection or replay behaviour appears on any eToro page we could open, so treat a silent socket as dead and re-snapshot; Source: [api-portal.etoro.com](https://api-portal.etoro.com/core/websocket/overview.md) Rate limits: [api-portal.etoro.com](https://api-portal.etoro.com/getting-started/rate-limits); Checked: 19 Sep 2026
- API: [cTrader Open API](https://openbrokerapi.com/platforms/ctrader); Transport: TCP or WebSocket on ports 5035 (Protobuf) and 5036 (JSON); spots and depth subscriptions; Max streams or subscriptions: 50 requests a second per connection; 5 a second for historical data; Heartbeat: A ProtoHeartbeatEvent (payloadType 51) at least every 10 seconds; drop it and the server drops the connection; Source: [help.ctrader.com](https://help.ctrader.com/open-api/) Limits: [help.ctrader.com](https://help.ctrader.com/open-api/); Checked: 18 Sep 2026
- API: [TradeLocker API](https://openbrokerapi.com/platforms/tradelocker); Transport: Socket.IO Streams API for account, position and order updates; Max streams or subscriptions: Not published; Heartbeat: Not stated on the Streams API page we opened; Source: [api-dev.tradelocker.com](https://api-dev.tradelocker.com/streams-api/socket/docs/index.html); Checked: 18 Sep 2026
- API: [Match-Trader Platform API](https://openbrokerapi.com/platforms/match-trader); Transport: WebSocket with STOMP; Max streams or subscriptions: Not published; Heartbeat: Not stated on the platform API page we opened; Source: [match-trader.com](https://match-trader.com/platform-api/); Checked: 18 Sep 2026
- API: [DXtrade APIs](https://openbrokerapi.com/platforms/dxtrade); Transport: Push API over WebSockets; Max streams or subscriptions: Not published; Heartbeat: Not stated on the page we opened; Source: [devexperts.com](https://devexperts.com/blog/dxtrade-api-for-seamless-integration-with-brokerage-infrastructure/); Checked: 18 Sep 2026
- API: [FOREX.com / StoneX Trading (City Index)](https://openbrokerapi.com/brokers/forex-com-city-index); Transport: Streaming host push.cityindex.com (vendor unconfirmed); Max streams or subscriptions: Not published; Heartbeat: Not stated on the page we opened; Source: [docs.labs.gaincapital.com](https://docs.labs.gaincapital.com/Content/Getting%20Started/Getting%20Started.htm); Checked: 18 Sep 2026
- API: [FXCM](https://openbrokerapi.com/brokers/fxcm); Transport: ForexConnect price streams; legacy REST over a socket.io connection; Max streams or subscriptions: Not published; Heartbeat: Not stated on the page we opened; Source: [fxcm-rest.readthedocs.io](https://fxcm-rest.readthedocs.io/en/latest/socketrestapispecs.html); Checked: 18 Sep 2026
- API: [MetaTrader 5 (Python package and MQL5)](https://openbrokerapi.com/platforms/metatrader-5); Transport: No push API in Python: poll ticks and bars; Max streams or subscriptions: Not stated; Heartbeat: Not applicable; Source: [mql5.com](https://www.mql5.com/en/docs/python_metatrader5); Checked: 18 Sep 2026
- API: [MetaTrader 4 (MQL4)](https://openbrokerapi.com/platforms/metatrader-4); Transport: In-terminal events only; no external streaming API; Max streams or subscriptions: Not applicable; Heartbeat: Not applicable; Source: [docs.mql4.com](https://docs.mql4.com/); Checked: 18 Sep 2026

Each row comes from the linked page, opened on the date shown. Not published means we found no figure on the pages we opened. [Full comparison table](https://openbrokerapi.com/compare).

Deeper references: [Streaming limits for every API in the compare table](https://openbrokerapi.com/compare), IBKR Web API websocket topics, cTrader Open API subscribe messages and payloadType numbers

## What to do with these numbers

- Treat a missing heartbeat as a dead connection and reconnect, rather than waiting for data that will not arrive.
- Stay under the subscription cap: IG and Capital.com both stop at 40, Saxo's old 200 instruments across 4 connections, withdrawn on 20 Sep 2026 and now unverified, and IBKR at the account's market data lines, 100 by default.
- OANDA counts streams per IP address, so several bots on one server share the 20.
- Three heartbeats, three intervals: cTrader every 10 seconds, IBKR every 10 seconds on the socket and 60 on the REST session, Capital.com every 10 minutes. A cell that says not stated means we found no figure on the page we opened, not that there is none.

## Related pages

- [Getting started with API trading](https://openbrokerapi.com/guides/getting-started-with-api-trading): What an API is, what you need and how to make a first call safely.
- [All guides](https://openbrokerapi.com/guides): Step by step guides, each step with the page it was read on.
- [Brokers](https://openbrokerapi.com/brokers): The record for each broker: access, limits, endpoints and error codes.
- [Platform APIs](https://openbrokerapi.com/platforms): APIs that belong to trading software offered by many brokers.
- [Error codes](https://openbrokerapi.com/errors): What each error means, and the fix where the source gives one.
- [Compare two APIs](https://openbrokerapi.com/compare): The same fields from two records, side by side.
- [Learn to code](https://openbrokerapi.com/learn): A learning track from a first script to a demo account call.

## Licence and how to cite

The records behind this page are all rights reserved. This file is the page itself, at its own address, in another format. It is not part of the CC BY 4.0 downloads listed at https://openbrokerapi.com/data. Quote from it with a link to the page.

Cite as: Broker streaming APIs compared. Broker API Hub, https://openbrokerapi.com/guides/streaming-compared, newest check 2026-09-18.

Where you rely on a single figure, cite the source and the checked date printed beside it as well. Where this page and a broker's own documentation differ, the documentation wins.
