Broker API HubMenu

Broker API rate limits compared

Every published broker and platform API rate limit we track, with its scope, the page it came from and the date we checked it. Where a broker publishes nothing, we say so.

Independent and unofficialLast reviewed

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.

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.

Rate limits by API

APILimitScopeSourceChecked
OANDA120 req/s, 7,200 req/min 120/s per IP address, HTTP 429 above itIP addressdeveloper.oanda.com3 Oct 2026
cTrader Open API50 req/s, 3,000 req/min 50/s per connectionconnectionhelp.ctrader.com18 Sep 2026
Bitget20 req/s, 1,200 req/min 20/s per UID, Get Open Orders (UTA)UID, per endpointbitget.com22 Sep 2026
Dukascopy16 req/s, 960 req/min 16 orders/s (FIX API)FIX session, ordersdukascopy.com22 Sep 2026
Interactive Brokers10 req/s, 600 req/min 10/s global (Web API)usernameibkrcampus.com18 Sep 2026
Capital.com10 req/s, 600 req/min 10/s per useruseropen-api.capital.com18 Sep 2026
Saxo OpenAPI2 req/s, 120 req/min 120/min per session, per service groupsessiondeveloper.saxo18 Sep 2026
DerivNot published. Deriv does not publish fixed request limits for simultaneous or per minute API calls, so there is no figure to normalise.not publisheddevelopers.deriv.com, API overview, 23 Sep 202623 Sep 2026
IG1 req/s, 60 req/min 60/min per application (API key), non trading only. Per account: 100 trading a minute, 30 non trading a minute, 10,000 historical price points a week. Streaming: 40 concurrent subscriptions. IG's own how to use the IG API page states around 40 trade requests a minute, which this site labels as a conflict rather than resolving, and paces dealing against 40. Full record in IG allowances, one row each.per application (API key), and per account split into trading only, non trading and historical data only; streaming per connectionlabs.ig.com/faq5 Oct 2026
eToro1 req/s, 60 req/min 60/min reads per keyuserapi-portal.etoro.com20 Sep 2026
Trading 2120.2 req/s, 12 req/min 1 req/5s, account summary (example)accountdocs.trading212.com22 Sep 2026
TradeLocker APINo single figure Per route limits only, served at runtime by /trade/config/. No fixed figures are published. A tl-developer-api-key header gets looser limits.Not statedpublic-api.tradelocker.com24 Sep 2026
ExnessNo single figure Not published. Exness tells clients to read them at runtime from getRateLimits rather than hardcoding any figure.Not statedget.exness.help23 Sep 2026
MetaTrader 5 (Python package and MQL5)Not published The Python page states none, carries no version and no date, and gives no consolidated error list beyond last_error() (read 22 Sep 2026).Not statedmql5.com23 Sep 2026
FXCMNot published No REST API is listed, so there is nothing to publish limits for.Not statedfxcm-rest.readthedocs.io21 Sep 2026
Match-Trader Platform APINot publishedNot stateddocs.match-trade.com21 Sep 2026
MetaTrader 4 (MQL4)Not publishedNot stateddocs.mql4.com20 Sep 2026
FOREX.com / StoneX Trading (City Index) UnverifiedNot confirmed Unverified: no rate limit published. FOREX.com's API page states none, and the technical documentation at docs.labs.gaincapital.com is behind a registration form (re-checked 22 Sep 2026).Not statedforex.com22 Sep 2026
Pepperstone UnverifiedNot confirmed Not published for either tier. Last looked for 25 Sep 2026.Not statedpepperstone.com21 Sep 2026
MetaApi UnverifiedNot confirmed Unverified: no rate limits were sourced on 20 Sep 2026.Not statedmetaapi.cloud21 Sep 2026
MetaCopier UnverifiedNot confirmed Unverified: no rate limits were sourced on 20 Sep 2026.Not statedmetacopier.io21 Sep 2026
DXtrade APIs UnverifiedNot checked Re-tried on 22 Sep 2026: Devexperts' blog on the DXtrade API and a Finance Magnates piece opened but give no rate limit figures, and describe the API as a broker integration suite; the developer portal at demo.dx.trade/developers is a JavaScript shell with no readable content.Not statedNot reachable, page tried: devexperts.com22 Sep 2026
Swissquote UnverifiedNot checked Re-tried on 22 Sep 2026: the OpenWealth professional trading API page opened but gives no rate limit figures, and the FIX API specification is closed to automated reading by robots.txt, so an absence could not be confirmed.Not statedNot reachable, page tried: bankingapi.swissquote.ch22 Sep 2026
CMC MarketsNo retail API No retail API; CMC Connect offers market data and execution through FIX API for institutional partners and states no rate limit (read 22 Sep 2026).Not statedcmcmarkets.com22 Sep 2026
AxiNo retail API No native API; the help page lists only Autochartist and Trading Central for MT4 and MT5, with no API and no limit (read 22 Sep 2026).Not statedhelp.axi.com22 Sep 2026
ThinkMarketsNo retail API Institutional page offers API solutions through vendors with no protocol, documentation or limit stated (read 22 Sep 2026).Not statedthinkmarkets.com22 Sep 2026
FxProNo retail API FxPro Prime offers FIX via PrimeXM XCore, MT5 bridge via Ultency and cTrader FIX via cBroker, for institutions; no limit stated (read 22 Sep 2026).Not statedfxpro.com22 Sep 2026
TickmillNo retail API FIX API offered to large private and institutional clients (minimum balance 500,000, minimum monthly commission 5,000, no demo); no limit stated (read 22 Sep 2026).Not statedtickmill.com22 Sep 2026

Deeper references: IBKR Web API websocket topics and pacing, endpoint by endpoint, cTrader Open API limits and every payloadType

What to do with these numbers

The backoff loop itself

One helper for any API in the table above that signals a rate limit with HTTP 429. It waits for the seconds in Retry-After when the reply carries one, doubles its own wait when it does not, and gives up after six tries rather than hammering the broker. Nothing is sent from this page.

# Back off on 429 and double the wait, which is what the list above asks for.
# Use the seconds in Retry-After when the reply carries one, and our own 1, 2, 4 up to 60
# seconds when it does not. Not every API in the table sends Retry-After.
import time

import requests


def call(method, url, tries=6, **kw):
    delay = 1
    for attempt in range(tries):
        resp = requests.request(method, url, timeout=10, **kw)
        if resp.status_code != 429:
            resp.raise_for_status()
            return resp
        header = resp.headers.get("Retry-After", "")
        wait = min(int(header) if header.strip().isdigit() else delay, 60)
        print("429 on", url, "- waiting", wait, "seconds before try", attempt + 2)
        time.sleep(wait)
        delay = min(delay * 2, 60)
    raise SystemExit("Still rate limited after " + str(tries) + " tries. Lower your request rate.")

IG is the exception on this site: it signals an exhausted allowance with an errorCode on HTTP 403 rather than a 429, and publishes no Retry-After, so this loop will never fire against it. The IG version of this helper branches on the errorCode instead.

IG allowances, one row each

IG splits its limits into allowances and returns an errorCode in the body rather than HTTP 429. This table is the full record of IG's limits on this site: one row per limit, with its scope, its source and the date that source was last checked. All five allowances were read on IG's developer FAQ at labs.ig.com/faq on 5 Oct 2026, and the same five values are what every other IG route here states. The record behind them is the ig-published-limits row of the fact register at /facts, which sources all five to the IG Labs FAQ. The three per account figures were withdrawn for the window of record 23 to 30 Sep 2026, while labs.ig.com/faq returned HTTP 500 on robots.txt, and were reinstated by the reading of 30 Sep 2026; that withdrawal is history, not the live reading. IG's own how to use the IG API page states a lower trading figure of around 40 a minute, also checked 5 Oct 2026. That conflict is labelled here and not resolved: pace dealing against 40 and treat 100 as the reference ceiling.

AllowanceFigureScopeState on 5 Oct 2026Source and checked
Per application, non trading60 non trading requests a minute per applicationPer API key (per application), non trading calls onlyOn IG's developer FAQ 60 non trading requests a minute for each application, which means for each API key. Read again in a browser on 12 Oct 2026.labs.ig.com/faq · 12 Oct 2026
Streaming subscriptions40 concurrent streaming subscriptionsPer streaming connectionOn IG's developer FAQ 40 concurrent streaming subscriptions, which the FAQ says to manage by unsubscribing and subscribing as needed; IG's Streaming API Guide gives up to 40 per connection by default and asks you to contact IG to raise it. Both read in a browser on 12 Oct 2026.labs.ig.com/faq · streaming guide · 12 Oct 2026
Per account, trading100 trading requests a minute per account, with IG's own how to use page stating a lower figure of around 40Per account, trading calls only: creating or amending a position or a working orderSources conflict Two IG pages give two numbers. The FAQ is the developer reference and states 100 a minute per account; IG's own how to use the IG API page on ig.com is a marketing page and states around 40 a minute. Both were checked on 5 Oct 2026 and neither is withdrawn, so the conflict is labelled rather than resolved and the lower figure is what a limiter should be sized to. This site paces dealing against 40 and treats 100 as the reference ceiling.labs.ig.com/faq · 5 Oct 2026 ig.com, how to use the IG API · 5 Oct 2026
Per account, non trading30 non trading requests a minute per accountPer account, non trading calls onlyOn IG's developer FAQ 30 non trading requests a minute for each account. Withdrawn for the window of record 23 to 30 Sep 2026 while labs.ig.com/faq would not open, reinstated by the reading of 30 Sep 2026 and still published when the page was checked again on 5 Oct 2026.labs.ig.com/faq · 5 Oct 2026
Historical price data10,000 historical price data points a weekPer account, historical data only: the price history endpointsOn IG's developer FAQ 10,000 historical price data points a week, which IG applies to the price history endpoints. Withdrawn for the window of record 23 to 30 Sep 2026 while labs.ig.com/faq would not open, reinstated by the reading of 30 Sep 2026 and still published when the page was checked again on 5 Oct 2026. IG's how to use the IG API page names only "a finite weekly limit of datapoints" with no number, checked 5 Oct 2026, so it neither confirms nor contradicts the 10,000.labs.ig.com/faq · 5 Oct 2026

This table is the one canonical record of IG's limits on this site, last checked 5 Oct 2026. Every other IG route here states these same five values, with these scopes and this checked date, and shows fewer rows only where a shorter form is wanted. The matching error strings are error.public-api.exceeded-api-key-allowance, exceeded-account-allowance, exceeded-account-trading-allowance and exceeded-account-historical-data-allowance. Each one has its own page in the error dictionary. The block cleared. On 30 Sep 2026 labs.ig.com/faq opened and published all four allowances, so the per account figures have a page behind them again, and it opened again on 5 Oct 2026 with the same five figures. The labs.ig.com REST reference, the streaming reference and faq.html all failed on robots.txt with HTTP 500 on each attempt made on them, on 22, 23, 24 and 25 Sep 2026, and no workaround was attempted. That is why the figures were withdrawn. The withdrawal window of record, carried by the fact register, is 23 Sep 2026 to 30 Sep 2026, and the earlier description of it as five days is superseded.

Rate limits, with the denominator named, read 4 Oct 2026

APIWhat the limit is counted againstPublished limits, as the vendor words themWhere the number actually lives
IGPer app, and separately per account60 non trading a minute per app, 100 trading a minute per account, 30 non trading a minute per account, 10,000 historical price points a week, 40 concurrent streaming subscriptions. IG's own how to use the IG API page on ig.com separately states around 40 trade requests a minute, which conflicts with the FAQ's 100; this site labels the conflict rather than resolving it and paces dealing against 40An undated FAQ at labs.ig.com/faq, not the reference. The full record of IG's limits is the table above on this page, last checked 5 Oct 2026
Capital.comPer user, and per API key on one endpoint10 requests a second per user, 1 per 0.1 seconds per user when opening positions or creating orders, 1 a second per API key on POST /session, 1000 an hour on demo for position and order creationPublished in the reference, version 1.0.0, newest changelog entry 28 Nov 2023
OANDAPer requesting IP address120 requests a second on REST with HTTP 429 above it, 20 active streams, and no more than 2 new connections a secondThe development guide, not the introduction and not the reference. Undated
Saxo BankPer application per day, and per session per service group10,000,000 a day per application across all users and sessions, 120 a minute per session per service group, 1 order a second per session, and identical operations rejected inside a rolling 15 second window with HTTP 409Published on its own rate limiting page, undated
cTrader Open APIPer connection50 requests a second per connection for non historical data, 5 a second for historical dataPublished in the Open API help, no version or date, copyright 2025
Interactive BrokersPer authenticated username10 requests a second globally, /iserver/scanner/params 1 request per 15 minutes, /iserver/marketdata/history capped at 10 a second or 50 a minute since the changelog entry of 9 Sep 2026, and a 10 minute penalty box for offending IP addressesPublished on the Campus Web API page and changelog
eToroPer user key60 reads a minute, 20 writes or executions a minute, measured over a rolling one minute window, 429 with Retry-AfterPublished at api-portal.etoro.com/getting-started/rate-limits, undated
Trading 212Per account, whatever the key or IPPer endpoint, for example 50 requests a minute, with all 50 allowed as a burst in the first 5 seconds, and a functional cap of 50 pending orders per ticker per accountPublished with headers x-ratelimit-limit, -period, -remaining, -reset, -used; API is in open ended beta
TradeLockerPer route, value not publishedNo numbers published anywhere. The documentation says rate limits vary by route and to call /trade/config/ for specifics; the Developer Program issues a tl-developer-api-key for less restrictive limitsDiscoverable only at runtime; docs v1.5, last updated 22 May 2025
Match-TraderNot publishedNo auth method, no rate limits, no version and no dates on the trader API page, which hands the substance to a third party documentation hostNo figures published
DerivNot published as fixed numbersDeriv publishes no fixed per minute limit. A client reads its own allowances at runtime from the website_status call, which returns api_call_limits. The rate limits page at developers.deriv.com/docs/rate-limits answered HTTP 404 on 4 Oct 2026Runtime only; the documented page is missing

Two readings follow from the right hand column rather than from the numbers. First, the limits that matter most are often not in the reference: IG’s five allowances exist only in an undated FAQ, OANDA’s three live on a development guide the introduction never points at, and TradeLocker’s and Deriv’s exist only at runtime behind a call to the API itself. Second, two of the eleven APIs here, Match-Trader and TradeLocker, publish no number at any address, which means a strategy built against them is pacing against something nobody has committed to in writing.

Sources: labs.ig.com FAQ · open-api.capital.com · OANDA development guide · Saxo rate limiting · cTrader Open API help · IBKR Campus Web API · IBKR Web API changelog · eToro rate limits · Trading 212 rate limiting · TradeLocker getting started · checked 4 Oct 2026

Independent and unofficial. Not affiliated with, endorsed by or operated by any firm named here.

OANDA rate limits: the numbers, and the page they are not on, 4 Oct 2026

OANDA does publish request rate limits, and they are not in the place a reader looks first. The v20 introduction and the REST reference carry none, which is the real gap; the numbers are on the development guide, and they were read again there on 4 Oct 2026.

What is limitedThe published limitCounted against
REST API requests120 requests per second. Excess requests will receive HTTP 429 errorThe requesting IP address
Streaming API connections20 active streams. Requests above this threshold will be rejectedThe requesting IP address
New connectionsNo more than 2 new connections per second. Excess connections will be rejectedThe client

One more OANDA figure exists and this site already labels it, so it is repeated here rather than left to be found: the best practices page states one hundred requests a second for established connections, against the development guide’s 120 a second per IP address. Both pages are OANDA’s and both are current. This site treats the development guide as the enforced reading because it names the denominator and the HTTP status, and it publishes the disagreement rather than choosing quietly.

What is worth criticising about OANDA’s documentation is therefore narrower and more useful than a missing number. The limits exist and are specific. They are simply not beside the endpoints they constrain, not mentioned in the introduction a reader starts from, and not dated. The introduction also still names a legacy API token with no deprecation date for the legacy API, under a copyright range ending in 2019.

Practical guidance, stated as guidance. Pace REST against 120 a second and remember the denominator is your IP address rather than your account, so a second process on the same host shares your allowance. Hold to 20 active streams and open new connections no faster than two a second. Back off on HTTP 429.

Sources: OANDA development guide, the page that carries the limits · OANDA v20 introduction, which does not · checked 4 Oct 2026

Independent and unofficial. Not affiliated with, endorsed by or operated by any firm named here.

Sections