REST Clients

The RestClient facade composes nine specialized sub-clients, one per API domain.

RestClient

class etoropy.RestClient(config, http=None)[source]

Bases: object

Facade that composes all eToro REST sub-clients.

Variables:
  • market_data – Instruments, rates, candles, exchanges (8 endpoints).

  • execution – Open/close/cancel orders (7 endpoints, demo/real routing).

  • info – Portfolio, PnL, order status, trade history (4 endpoints).

  • watchlists – CRUD for watchlists (14 endpoints).

  • feeds – Social feed posts per instrument/user (3 endpoints).

  • reactions – Comment on posts (1 endpoint).

  • discovery – Curated lists and recommendations (2 endpoints).

  • pi_data – Copier public info (1 endpoint).

  • users_info – User profiles, portfolios, performance (6 endpoints).

Parameters:
async aclose()[source]
Return type:

None

MarketDataClient

class etoropy.MarketDataClient(http)[source]

Bases: BaseRestClient

REST client for market data endpoints (instruments, rates, candles, exchanges).

Note: the get_rates() and get_instruments() methods fan out one request per instrument ID using asyncio.gather(), because the eToro API returns 500 when multiple IDs are comma-separated.

Parameters:

http (HttpClient)

async search_instruments(fields=None, *, search_text=None, internal_symbol_full=None, page_size=None, page_number=None, sort=None)[source]

Search for instruments by text or exact symbol.

This endpoint is designed for instrument ID resolution — it reliably returns instrumentId and internalSymbolFull but does not populate display metadata such as displayname, exchangeID, or symbol. For those fields use get_instruments() instead.

Parameters:
  • fields (str | None (default: None)) – Optional projection (comma-separated field names).

  • search_text (str | None (default: None)) – Free-text search query.

  • internal_symbol_full (str | None (default: None)) – Exact ticker symbol filter (e.g. "AAPL").

  • page_size (int | None (default: None)) – Number of results per page.

  • page_number (int | None (default: None)) – Page number (0-based).

  • sort (str | None (default: None)) – Sort expression.

Return type:

InstrumentSearchResponse

async get_instruments(*, instrument_ids=None, exchange_ids=None, stocks_industry_ids=None, instrument_type_ids=None)[source]
Parameters:
Return type:

InstrumentsResponse

async get_rates(instrument_ids=None)[source]
Parameters:

instrument_ids (list[int] | None (default: None))

Return type:

LiveRatesResponse

async get_candles(instrument_id, direction, interval, candles_count)[source]
Parameters:
Return type:

CandlesResponse

async get_instrument_types()[source]
Return type:

InstrumentTypesResponse

async get_closing_prices()[source]
Return type:

ClosingPricesResponse

async get_stocks_industries()[source]
Return type:

StocksIndustriesResponse

async get_exchanges()[source]
Return type:

ExchangesResponse

TradingExecutionClient

class etoropy.TradingExecutionClient(http, mode)[source]

Bases: BaseRestClient

REST client for order execution (open, close, cancel).

URL routing is mode-aware: demo orders go to /trading/execution/demo/..., real orders to /trading/execution/....

Parameters:
async open_market_order_by_amount(params)[source]
Parameters:

params (MarketOrderByAmountRequest)

Return type:

OrderForOpenResponse

async open_market_order_by_units(params)[source]
Parameters:

params (MarketOrderByUnitsRequest)

Return type:

OrderForOpenResponse

async cancel_market_open_order(order_id)[source]
Parameters:

order_id (int)

Return type:

TokenResponse

async open_limit_order(params)[source]
Parameters:

params (LimitOrderRequest)

Return type:

TokenResponse

async cancel_limit_order(order_id)[source]
Parameters:

order_id (int)

Return type:

TokenResponse

async close_position(position_id, params=None)[source]
Parameters:
Return type:

OrderForCloseResponse

async cancel_close_order(order_id)[source]
Parameters:

order_id (int)

Return type:

TokenResponse

TradingInfoClient

class etoropy.TradingInfoClient(http, mode)[source]

Bases: BaseRestClient

REST client for trading information (portfolio, PnL, order status, history).

URL routing is mode-aware with asymmetric paths: demo portfolio is at /trading/info/demo/portfolio, real portfolio at /trading/info/portfolio (no real segment).

Parameters:
async get_portfolio()[source]
Return type:

PortfolioResponse

async get_pnl()[source]
Return type:

PnlResponse

async get_order(order_id)[source]
Parameters:

order_id (int)

Return type:

OrderForOpenInfoResponse

async get_trade_history(min_date, *, page=None, page_size=None)[source]
Parameters:
  • min_date (str)

  • page (int | None (default: None))

  • page_size (int | None (default: None))

Return type:

list[TradeHistoryEntry]

WatchlistsClient

class etoropy.WatchlistsClient(http)[source]

Bases: BaseRestClient

Parameters:

http (HttpClient)

async get_user_watchlists()[source]
Return type:

list[Any]

async get_watchlist(watchlist_id)[source]
Parameters:

watchlist_id (int)

Return type:

Any

async get_default_watchlist_items()[source]
Return type:

list[Any]

async create_watchlist(name, items=None)[source]
Parameters:
Return type:

Any

async create_default_watchlist(name, items=None)[source]
Parameters:
Return type:

Any

async delete_watchlist(watchlist_id)[source]
Parameters:

watchlist_id (int)

Return type:

None

async rename_watchlist(watchlist_id, name)[source]
Parameters:
  • watchlist_id (int)

  • name (str)

Return type:

None

async set_default_watchlist(watchlist_id)[source]
Parameters:

watchlist_id (int)

Return type:

None

async add_items(watchlist_id, instrument_ids)[source]
Parameters:
Return type:

None

async remove_items(watchlist_id, instrument_ids)[source]
Parameters:
Return type:

None

async update_items(watchlist_id, instrument_ids)[source]
Parameters:
Return type:

None

async change_rank(watchlist_id, rank)[source]
Parameters:
  • watchlist_id (int)

  • rank (int)

Return type:

None

async get_public_watchlists(user_id)[source]
Parameters:

user_id (int)

Return type:

list[Any]

async get_public_watchlist(watchlist_id)[source]
Parameters:

watchlist_id (int)

Return type:

Any

FeedsClient

class etoropy.FeedsClient(http)[source]

Bases: BaseRestClient

Parameters:

http (HttpClient)

async create_post(content, instrument_id=None)[source]
Parameters:
  • content (str)

  • instrument_id (int | None (default: None))

Return type:

Any

async get_instrument_feed(instrument_id, *, take=None, offset=None)[source]
Parameters:
  • instrument_id (int)

  • take (int | None (default: None))

  • offset (int | None (default: None))

Return type:

Any

async get_user_feed(user_id, *, requester_user_id=None, take=None, offset=None)[source]
Parameters:
  • user_id (int)

  • requester_user_id (int | str | None (default: None))

  • take (int | None (default: None))

  • offset (int | None (default: None))

Return type:

Any

ReactionsClient

class etoropy.ReactionsClient(http)[source]

Bases: BaseRestClient

Parameters:

http (HttpClient)

async create_comment(post_id, content)[source]
Parameters:
Return type:

Comment

DiscoveryClient

class etoropy.DiscoveryClient(http)[source]

Bases: BaseRestClient

Parameters:

http (HttpClient)

async get_curated_lists()[source]
Return type:

list[Any]

async get_market_recommendations()[source]
Return type:

list[Any]

UsersInfoClient

class etoropy.UsersInfoClient(http)[source]

Bases: BaseRestClient

Parameters:

http (HttpClient)

async search_users(*, search_text=None, period='LastYear', page=None, page_size=None)[source]
Parameters:
  • search_text (str | None (default: None))

  • period (str (default: 'LastYear'))

  • page (int | None (default: None))

  • page_size (int | None (default: None))

Return type:

Any

async get_user_profile(cid)[source]

Retrieve user profile by customer ID (cidList).

Parameters:

cid (int)

Return type:

Any

async get_user_profile_by_username(username)[source]

Retrieve user profile by username.

Parameters:

username (str)

Return type:

Any

async get_user_portfolio(username)[source]

Retrieve a user’s live public portfolio.

Parameters:

username (str)

Return type:

Any

async get_user_trade_info(username)[source]
Parameters:

username (str)

Return type:

Any

async get_user_performance(username)[source]

Retrieve a user’s monthly/yearly gain.

Parameters:

username (str)

Return type:

Any

async get_user_performance_by_period(username, *, min_date, max_date, period_type='Daily')[source]

Retrieve granular performance data (daily or period).

Parameters:
  • username (str)

  • min_date (str)

  • max_date (str)

  • period_type (str (default: 'Daily'))

Return type:

Any

PiDataClient

class etoropy.PiDataClient(http)[source]

Bases: BaseRestClient

Parameters:

http (HttpClient)

async get_copiers_public_info()[source]

Get copier info for the authenticated user.

Return type:

Any