Broker API
eToro API: limits, auth and errors
Public REST API and WebSocket for verified eToro users, with demo trading endpoints.
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.
Quickstart: key to first call51 endpoints6 messages16 error codes
eToro API rate limits and allowances
One record per limit. The scope is part of the limit: a figure without its scope is not a figure you can pace against.
| Limit | Value | Scope | Source |
|---|---|---|---|
| Headline limit | 60/min reads per key | user | api-portal.etoro.comchecked |
eToro API rate limits in full, with pacing advice and the related error codes.
Access, authentication and streaming
API types listed in the record: REST, WebSocket, OAuth 2.0 SSO (partners).
- How you get a key
Settings > Trading > API Key Management > Create New Key; choose Read or Write, optional IP whitelist and expiry.
- Who can use it
Verified eToro account required. Regional availability not published on pages opened.
eToro API Portalchecked
- Demo
Yes: the environment is bound to the key when it is created, Demo or Real, and each key supports one environment only.
eToro Builders FAQchecked
- Authentication
Headers x-api-key, x-user-key and x-request-id on every request, or an OAuth 2.0 bearer token instead of the key headers. eToro now states the exclusivity itself rather than leaving it to be inferred: a request presenting both is rejected.
eToro API portal: authenticationchecked SSO and OAuth, eToro API portalchecked
- Streaming
WebSocket at wss://ws.etoro.com/ws, described by an AsyncAPI 3.0 document that eToro publishes. Instrument topics need no authentication; the private topic needs an Authenticate message first, which carries the user key and API key inside its data object over the open socket, never as a header. A Subscribe message lists topics such as instrument:<instrumentId> or private, with an optional snapshot flag. The AsyncAPI document, the Topics page and the example code agree on that shape. The server sends a single binary frame from time to time as a heartbeat. No connection or subscription limit is given and no reconnection or replay behaviour is described.
eToro WebSocket API, AsyncAPI documentchecked eToro API portal: WebSocket authenticationchecked eToro API portal: WebSocket topicschecked
- History depth
Candles: max 1,000 per request, one minute to one week. Trading history: lookback under 1 year per request; split longer ranges.
- Rate limits, as worded
60 requests a minute for most GET calls and 20 a minute for trading and writes, tracked per user key over a one minute rolling window, with 429 on excess. The rate limits page read on 20 Sep 2026 states no response headers at all, so the 120 per 60 seconds market data quota and the RateLimit response headers carried from earlier readings are now unverified.
eToro API endpoints
51 documented endpoints. Grouped by what they do
- GET/api/v1/balancesBalances across every account type you hold with eToro, with a total in a display currency. eToro warns that the totals are portfolio value, not cash you can spend.
- GET/api/v1/market-data/exchangesThe exchanges eToro lists instruments from, optionally narrowed to a set of exchange IDs.
- GET/api/v1/market-data/instrument-typesThe instrument types eToro uses, optionally narrowed to a set of type IDs.
- GET/api/v1/market-data/instrumentsReturns display metadata for instruments, such as name, type, exchange, full symbol and logo images. Filter by instrument, exchange, industry or instrument type IDs.
- GET/api/v1/market-data/instruments/{instrumentId}/history/candles/{direction}/{interval}/{candlesCount}Returns open, high, low, close and volume candles for one instrument, from one minute to one week per candle.
- GET/api/v1/market-data/instruments/history/closing-priceReturns the latest official closing price for instruments plus the previous day, week and month closes.
- GET/api/v1/market-data/instruments/ratesReturns the current bid, ask and last execution price for up to 100 instruments, with conversion rates to USD.
- GET/api/v1/market-data/searchReturns a paginated list of instruments. You choose which instrument fields come back with the required fields parameter, and any field can also be used as a filter.
- GET/api/v1/market-data/stocks-industriesThe industries eToro sorts stocks into, optionally narrowed to a set of industry IDs.
- GET/api/v1/meReturns the profile behind your key or token: global and account IDs for real and demo, username, player level and the scopes granted.
- DELETE/api/v1/trading/execution/demo/market-close-orders/{orderId}Asks for a pending close order on the demo account to be cancelled before it executes. A 200 reply means the request was received, not that the order was cancelled.
- POST/api/v1/trading/execution/demo/market-close-orders/positions/{positionId}Closes a whole demo position, or part of it if you pass UnitsToDeduct, at the market rate. A 200 means the close order was submitted, not that it has completed.
- DELETE/api/v1/trading/execution/market-close-orders/{orderId}Asks for a pending close order on the real account to be cancelled before it executes. A 200 reply means the request was received, not that the order was cancelled.
- POST/api/v1/trading/execution/market-close-orders/positions/{positionId}Closes a real account position at the market rate, in full or by a number of units. A 200 reply means the close order was submitted, not that the position has closed.
- GET/api/v1/trading/info/aggregate-portfolioA snapshot of the real account portfolio grouped by asset: account totals, directly held positions per instrument and active copy trading relationships.
- POST/api/v1/trading/info/aggregate-portfolioThe same real account portfolio snapshot as the GET form, with the level of detail and the filters sent in a request body. It reads data and changes nothing.
- GET/api/v1/trading/info/demo/aggregate-portfolioA snapshot of the demo account portfolio grouped by asset: account totals, directly held positions per instrument and active copy trading relationships.
- POST/api/v1/trading/info/demo/aggregate-portfolioThe same demo account portfolio snapshot as the GET form, with the level of detail and the filters sent in a request body. It reads data and changes nothing.
- GET/api/v1/trading/info/demo/close-orders/{orderId}Looks up one close order on the demo account: its status and the positions it closed. This is the call that confirms a close.
- GET/api/v1/trading/info/demo/pnlReturns the demo account's credit, unrealised profit or loss, open positions, pending orders and copy relationships.
- GET/api/v1/trading/info/demo/portfolioThe demo account portfolio in detail: open positions, pending orders, copy trading details and balances, all under one clientPortfolio object.
- GET/api/v1/trading/info/portfolioThe real account portfolio in detail: open positions, pending orders, copy trading details and balances, all under one clientPortfolio object.
- GET/api/v1/trading/info/real/close-orders/{orderId}Looks up one close order on the real account: its status and the positions it closed. This is the call that confirms a close.
- GET/api/v1/trading/info/real/pnlReturns the real account's credit, unrealised profit or loss, open positions, pending orders and copy relationships.
- GET/api/v1/trading/info/trade/demo/historyReturns closed demo trades from a start date to now, with pagination.
- GET/api/v1/trading/info/trade/historyReturns closed trades on the real account from a start date to now. eToro advises keeping each request's lookback under one year and paging through longer periods.
- GET/api/v1/user-info/peopleReturns public profile details for eToro users you name by username or customer ID, such as verification level and avatars.
- POST/api/v1/watchlistsCreates a new watchlist with the name you give. The name and type go in the query string, not the body.
- GET/api/v1/watchlistsReturns all of your watchlists and their items, with optional paging of items and related assets.
- POST/api/v1/watchlists/{watchlistId}/itemsAdds instruments or people to an existing watchlist. The body is a JSON array of items.
- GET/api/v2/market-data/instrumentsInstrument reference data, filtered by instrument IDs or by symbols, with cursor paging. With neither filter it pages through every instrument.
- GET/api/v2/market-data/instruments/searchFree text search of instruments by name or symbol, returned in order of relevance.
- GET/api/v2/market-data/ratesCurrent bid and ask rates for up to 1000 instruments, each marked as real time or delayed. A 206 reply means only some of the instruments were found.
- PATCH/api/v2/trading/demo/positions/{positionId}Sends an asynchronous request to change or clear the stop loss or take profit on an open demo position.
- POST/api/v2/trading/execution/demo/ordersPlaces an order on the demo account, by amount or units, with optional leverage, stop loss and take profit. The real account version is POST /api/v2/trading/execution/orders.
- DELETE/api/v2/trading/execution/demo/orders/{orderId}Asks eToro to cancel a demo order that is waiting for the market to open or for its trigger rate. A 200 means the request was accepted; the order may already have executed.
- POST/api/v2/trading/execution/ordersPlaces an order on the real account, by amount, units or contracts, with optional leverage, stop loss and take profit. A 200 reply means the order was accepted, not that it was executed.
- DELETE/api/v2/trading/execution/orders/{orderId}Asks for an order on the real account to be cancelled before it executes. A 200 reply means the request was accepted, not that the order was cancelled.
- POST/api/v2/trading/info/costsWorks out the costs a proposed real account order would carry if it were executed now: markup, spread, transaction fee, overnight and weekend fees and tax. Nothing is traded.
- POST/api/v2/trading/info/demo/costsWorks out the costs a proposed demo account order would carry if it were executed now: markup, spread, transaction fee, overnight and weekend fees and tax. Nothing is traded.
- POST/api/v2/trading/info/demo/eligibilityThe trading rules that apply to a list of instruments on the demo account: position limits, order types allowed, stop loss and take profit bounds and the leverage on offer.
- GET/api/v2/trading/info/demo/instrument-breakdownThe demo account portfolio grouped by instrument, with the positions, pending orders and profit or loss under each.
- GET/api/v2/trading/info/demo/orders:lookupReturns the status of one demo order and every position it opened or closed. Look it up by orderId or by the referenceId you sent as x-request-id.
- POST/api/v2/trading/info/eligibilityThe trading rules that apply to a list of instruments on the real account: position limits, order types allowed, stop loss and take profit bounds and the leverage on offer.
- GET/api/v2/trading/info/instrument-breakdownThe real account portfolio grouped by instrument, with the positions, pending orders and profit or loss under each.
- GET/api/v2/trading/info/orders:lookupLooks up one real account order by its ID or by the request ID it was sent with, and returns its status and the positions it opened or closed.
- PATCH/api/v2/trading/positions/{positionId}Changes or clears the stop loss and take profit on an open real account position. The request is queued: a 202 reply means it was accepted, not applied.
- POST/api/v3/trading/execution/demo/ordersSubmits an order on the demo account for processing in the background. The version 3 form of the order call: a 202 reply means it was queued, not executed.
- DELETE/api/v3/trading/execution/demo/orders/{orderId}Asks for a pending order on the demo account to be cancelled. The version 3 form: a 202 reply means the request was queued, not that the order was cancelled.
- POST/api/v3/trading/execution/ordersSubmits an order on the real account for processing in the background. The version 3 form of the order call: a 202 reply means it was queued, not executed.
- DELETE/api/v3/trading/execution/orders/{orderId}Asks for a pending order on the real account to be cancelled. The version 3 form: a 202 reply means the request was queued, not that the order was cancelled.
eToro messages
6 documented messages and subscriptions of the eToro WebSocket API. They are not HTTP endpoints: none has a method or a path, and each travels over a connection that stays open. Grouped by what they do, each with its summary
eToro API error codes
16 decoded error codes. All eToro errors
ApiKeyRequiredThe Authenticate message was sent without the API key.DataRequiredThe Authenticate message was sent without its data.ForbiddenAccess to the resource is forbidden.HTTP 400Validation failed on the request as sent, for example a missing or malformed minDate or too many instrument IDs in one call.HTTP 401Authentication is missing or invalid: the key pair or the bearer token did not identify a caller eToro accepts.HTTP 403The key or token is recognised but lacks the permission this call needs.HTTP 404The order, position or username in the request was not found.HTTP 409The position is closed and cannot be edited, so the change was refused.HTTP 500An internal error on eToro's side.InvalidKeyA key in the Authenticate message is not valid.Rate limit exceededThe rate limits page lists 60 requests a minute for reads and 20 for writes, per user key on a rolling minute.SessionAlreadyAuthenticatedThe WebSocket session is already authenticated.TooManyRequestsToo many requests were sent.UnauthorizedThe session is not authorised.UnhandledExceptionA global error.UserKeyRequiredThe Authenticate message was sent without the user key.
Platform APIs an account here can reach
| Platform API | Offered | Note | Source |
|---|---|---|---|
| MetaTrader 4 (MQL4) | No | Third-party review (updated 17 Sep 2026): 'No, eToro does not offer MetaTrader 4.' eToro's own help pages failed to load (JS error / 404), so not confirmed from eToro. | UnverifiedDoes eToro support MetaTrader? (BrokerChooser, third party)checked |
| MetaTrader 5 (Python package and MQL5) | No | Same third-party page has a MT5 heading but no visible answer; eToro uses its own platform. Unconfirmed from eToro. | UnverifiedDoes eToro support MetaTrader? (BrokerChooser, third party)checked |
| cTrader Open API | No | cTrader not listed on the broker's UK platforms page; absence from an overview page is not proof, so unverified. | UnverifiedDoes eToro support MetaTrader? (BrokerChooser, third party)checked |
| TradeLocker API | No | TradeLocker not listed on the broker's UK platforms page; absence from an overview page is not proof, so unverified. | UnverifiedDoes eToro support MetaTrader? (BrokerChooser, third party)checked |
| Match-Trader Platform API | No | Match-Trader not listed on the broker's UK platforms page; absence from an overview page is not proof, so unverified. | UnverifiedDoes eToro support MetaTrader? (BrokerChooser, third party)checked |
| DXtrade APIs | No | DXtrade not listed on the broker's UK platforms page; absence from an overview page is not proof, so unverified. | UnverifiedDoes eToro support MetaTrader? (BrokerChooser, third party)checked |
eToro API: questions and answers
Each answer is read from the record on this page, not written separately. Where the record is unverified, the answer says so.
Does eToro have an API?
Yes. This register records eToro as having its own API (REST, WebSocket and OAuth 2.0 SSO (partners)), with availability marked as active. Public REST API and WebSocket for verified eToro users, with demo trading endpoints.
eToro API portalchecked
eToro API key: how do I get one?
Settings > Trading > API Key Management > Create New Key; choose Read or Write, optional IP whitelist and expiry.
Who can use the eToro API?
Verified eToro account required. Regional availability not published on pages opened.
eToro API Portalchecked
eToro API demo: is there a demo or sandbox?
Yes: the environment is bound to the key when it is created, Demo or Real, and each key supports one environment only.
eToro Builders FAQchecked
What are the eToro API rate limits?
Headline limit: 60/min reads per key. Scope: user. As the record words it: 60 requests a minute for most GET calls and 20 a minute for trading and writes, tracked per user key over a one minute rolling window, with 429 on excess.
api-portal.etoro.comchecked eToro API portal: rate limitschecked
How does eToro API authentication work?
Headers x-api-key, x-user-key and x-request-id on every request, or an OAuth 2.0 bearer token instead of the key headers. eToro now states the exclusivity itself rather than leaving it to be inferred: a request presenting both is rejected.
eToro API portal: authenticationchecked SSO and OAuth, eToro API portalchecked
Does the eToro API support streaming?
WebSocket at wss://ws.etoro.com/ws, described by an AsyncAPI 3.0 document that eToro publishes.
eToro WebSocket API, AsyncAPI documentchecked eToro API portal: WebSocket authenticationchecked eToro API portal: WebSocket topicschecked
How much history does the eToro API return?
Candles: max 1,000 per request, one minute to one week. Trading history: lookback under 1 year per request; split longer ranges.
Which platform APIs work with an account at eToro?
Unverified. Not verified either way: MetaTrader 4, MetaTrader 5, cTrader, TradeLocker, Match-Trader and DXtrade. No platform link on this record has a verified source.
Unverifiedno source opened
eToro API questions, each answered in a sentence or two.
The capability tables read one feature at a time across every broker and platform record, eToro included.
Everything this site records for eToro, as one JSON file. Each section of the file states its own licence. About the files. This page as Markdown.
eToro API guides and reference
- eToro API quickstart: key to first call
- eToro API endpoints, grouped by what they do
- eToro API error codes
- Get your eToro trade history into a spreadsheetDownload eToro's account statement from Portfolio, My Portfolio, History, and save it as Excel or PDF. The Excel file has five sheets, including Closed Positions and Dividends. Every step is checked against eToro's own help page.
eToro API compared
The same fields from two records, side by side. No winner is picked.
What changed recently for the eToro API
Documentation
eToro's reference pages, read on 12 Oct 2026, list one server, https://public-api.etoro.com, and print every path with its own /api/v1 or /api/v2 prefix. This site had recorded the base as https://public-api.etoro.com/api/v1, which doubles the prefix when a documented path is joined to it and is wrong for the version 2 calls. The base is now recorded as the bare host.
Documentation
eToro's AsyncAPI document for its WebSocket API now opens and says the user key and API key travel inside the Authenticate message over the open socket, never as a header; this site's streaming entry said authentication was by headers and that the document could not be opened. The document, the Topics page and the example code agree on one Subscribe shape, so the earlier note of three differing subscribe grammars is withdrawn.
Documentation
eToro's API portal moved its authentication page under /core/getting-started; the old address no longer opens. The page still states the key creation route and the three request headers. The rule that the key pair and a bearer token are mutually exclusive is stated on the SSO with OAuth 2.0 page, which is now cited beside it.
The newest entries are shown. Every dated change, all brokers and platforms. Follow eToro changes by RSS
Partner programme
No published figure. The eToro partner programme record. The programme register holds every record. This site carries no affiliate links.
How to cite this
eToro API: limits, auth and errors. Broker API Hub, https://openbrokerapi.com/brokers/etoro, newest check .
Where you rely on a single figure, cite the source and the checked date printed beside it as well.