{
  "openapi": "3.1.0",
  "info": {
    "title": "eToro API (independent, unofficial description by Broker API Hub)",
    "version": "2026-10-12",
    "description": "An independent, unofficial description of the eToro API, built by Broker API Hub from eToro's public documentation. It is not eToro's own specification, and Broker API Hub is not affiliated with or endorsed by eToro.\n\nIt is generated from 51 endpoint records. Every operation carries x-source, the page it was read on, and x-checked, the date that page was last checked. No operation here is recorded as conflicting or unverified. An operation this file does not list is not recorded here, which is not evidence that it does not exist.\n\nSecurity schemes are only the authentication headers the endpoint records list. How a credential is obtained and how long it lasts is on https://openbrokerapi.com/brokers/etoro.\n\nResponse schemas: 19 of the 51 operations carry a response block written by hand for an earlier file on this site, each schema with its own x-source. Those operations are marked x-carried.\n\n32 operations carry a mock reply as an example under the default response. Its values are invented.\n\nWhere this file and eToro's own documentation differ, the documentation wins. Educational only. Nothing here is advice.",
    "x-independent": true,
    "x-licence": "All rights reserved. Given for reference. Not part of the CC BY 4.0 downloads.",
    "x-cite": "Broker API Hub, eToro API OpenAPI description, openbrokerapi.com/specs/etoro.json, newest check 2026-10-12",
    "x-generated": "2026-10-12",
    "x-generated-basis": "The newest checked date among the endpoint records in this file. It is not the date the file was built.",
    "x-page": "https://openbrokerapi.com/brokers/etoro",
    "x-base-addresses": {
      "live": "https://public-api.etoro.com",
      "demo": "Same host; demo trading calls use /demo/ paths, for example POST /api/v2/trading/execution/demo/orders"
    },
    "x-base-addresses-note": "The base addresses exactly as the broker record words them. Only an entry that is a plain address is listed under servers."
  },
  "externalDocs": {
    "description": "eToro's own documentation",
    "url": "https://api-portal.etoro.com/"
  },
  "servers": [
    {
      "url": "https://public-api.etoro.com",
      "description": "Recorded on the eToro record as \"live\"."
    }
  ],
  "tags": [
    {
      "name": "Balances"
    },
    {
      "name": "Identity"
    },
    {
      "name": "Market Data"
    },
    {
      "name": "Trading (Demo)"
    },
    {
      "name": "Trading (Real)"
    },
    {
      "name": "Users Info"
    },
    {
      "name": "Watchlists"
    }
  ],
  "paths": {
    "/api/v1/balances": {
      "get": {
        "operationId": "balances",
        "summary": "Balances 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The fields of each entry in balances were not read, so the mock shows an empty list. The OAuth scope listed is etoro-public:money.balance:read. Documented rate limit: 60 requests per 60 seconds, the default quota shared by endpoints with no limit of their own.",
        "tags": [
          "Balances"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/balances/get-aggregated-balances.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountTypes",
            "in": "query",
            "required": false,
            "description": "Account types to include, separated by commas: Trading, Cash, Options, Crypto, MoneyFarm, Spaceship or Plaee.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "displayCurrency",
            "in": "query",
            "required": false,
            "description": "ISO 4217 currency for the totals. Default USD.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeZeroBalances",
            "in": "query",
            "required": false,
            "description": "True to include accounts with a zero balance. Default false.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeSubAccounts",
            "in": "query",
            "required": false,
            "description": "True to include the Trading balances of your sub accounts. Default false.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "description": "Optional sections to add to the reply. The one value listed is equityDetails.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "gcid": 1000001,
                  "totalBalance": 10250.5,
                  "displayCurrency": "USD",
                  "balances": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/balances/get-aggregated-balances.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/balances"
      }
    },
    "/api/v1/market-data/exchanges": {
      "get": {
        "operationId": "exchanges",
        "summary": "The exchanges eToro lists instruments from, optionally narrowed to a set of exchange IDs.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The fields of each entry were not read, so the mock shows an empty list. Documented rate limit: 120 requests per 60 seconds, shared across the market data endpoints.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/list-supported-exchanges.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exchangeIds",
            "in": "query",
            "required": false,
            "description": "Exchange IDs to return, separated by commas.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "exchangeInfo": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/list-supported-exchanges.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/exchanges"
      }
    },
    "/api/v1/market-data/instrument-types": {
      "get": {
        "operationId": "instrument-types",
        "summary": "The instrument types eToro uses, optionally narrowed to a set of type IDs.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The fields of each entry were not read, so the mock shows an empty list. Documented rate limit: 120 requests per 60 seconds, shared across the market data endpoints.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/list-instrument-types.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "instrumentTypeIds",
            "in": "query",
            "required": false,
            "description": "Instrument type IDs to return, separated by commas.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "instrumentTypes": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/list-instrument-types.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/instrument-types"
      }
    },
    "/api/v1/market-data/instruments": {
      "get": {
        "operationId": "instrument-display-data",
        "summary": "Returns display metadata for instruments, such as name, type, exchange, full symbol and logo images. Filter by instrument, exchange, industry or instrument type IDs.",
        "description": "OAuth scope etoro-public:market-data:read. Shared market data quota of 120 requests per 60 seconds; responses carry RateLimit headers and a Retry-After header on 429. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/get-instrument-display-data.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": false,
            "description": "Comma separated instrument IDs.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          },
          {
            "name": "exchangeIds",
            "in": "query",
            "required": false,
            "description": "Comma separated exchange IDs.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          },
          {
            "name": "stocksIndustryIds",
            "in": "query",
            "required": false,
            "description": "Comma separated stock industry IDs.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          },
          {
            "name": "instrumentTypeIds",
            "in": "query",
            "required": false,
            "description": "Comma separated instrument type IDs.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentDisplayDataResponse"
                },
                "example": {
                  "instrumentDisplayDatas": [
                    {
                      "instrumentID": 999001,
                      "instrumentDisplayName": "Mock Instrument",
                      "instrumentTypeID": 5,
                      "exchangeID": 1,
                      "symbolFull": "MOCK",
                      "stocksIndustryId": 1,
                      "priceSource": "Mock",
                      "hasExpirationDate": false,
                      "isInternalInstrument": false,
                      "images": [
                        {
                          "instrumentID": 999001,
                          "width": 50,
                          "height": 50,
                          "uri": "https://example.invalid/mock.png",
                          "backgroundColor": "#FFFFFF",
                          "textColor": "#000000"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/get-instrument-display-data.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/instrument-display-data"
      }
    },
    "/api/v1/market-data/instruments/{instrumentId}/history/candles/{direction}/{interval}/{candlesCount}": {
      "get": {
        "operationId": "candles",
        "summary": "Returns open, high, low, close and volume candles for one instrument, from one minute to one week per candle.",
        "description": "candlesCount is capped at 1000. OAuth scope etoro-public:market-data:read. Shared market data quota of 120 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/get-instrument-candle-history.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instrumentId",
            "in": "path",
            "required": true,
            "description": "eToro instrument ID.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "direction",
            "in": "path",
            "required": true,
            "description": "asc for oldest first, desc for newest first.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "interval",
            "in": "path",
            "required": true,
            "description": "OneMinute, FiveMinutes, TenMinutes, FifteenMinutes, ThirtyMinutes, OneHour, FourHours, OneDay or OneWeek.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "candlesCount",
            "in": "path",
            "required": true,
            "description": "Number of candles, up to 1000.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CandlesResponse"
                },
                "example": {
                  "interval": "OneDay",
                  "candles": [
                    {
                      "instrumentId": 999001,
                      "candles": [
                        {
                          "instrumentID": 999001,
                          "fromDate": "2000-01-01T00:00:00Z",
                          "open": 100,
                          "high": 101,
                          "low": 99,
                          "close": 100.5,
                          "volume": 0
                        }
                      ],
                      "rangeOpen": 100,
                      "rangeClose": 100.5,
                      "rangeHigh": 101,
                      "rangeLow": 99,
                      "volume": 0
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/get-instrument-candle-history.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/candles"
      }
    },
    "/api/v1/market-data/instruments/history/closing-price": {
      "get": {
        "operationId": "closing-prices",
        "summary": "Returns the latest official closing price for instruments plus the previous day, week and month closes.",
        "description": "The response is a JSON array; the mock wraps it in items only so it can carry the _mock flag. A monthly price of -1 means no data. eToro marks isMarketOpen as obsolete. The page lists no query parameters, only x-request-id. Shared market data quota of 120 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/get-historical-closing-prices.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClosingPricesResponse"
                },
                "example": {
                  "items": [
                    {
                      "instrumentId": 999001,
                      "officialClosingPrice": 100,
                      "closingPrices": {
                        "daily": {
                          "price": 100,
                          "date": "2000-01-01 00:00:00Z"
                        },
                        "weekly": {
                          "price": 100,
                          "date": "2000-01-01 00:00:00Z"
                        },
                        "monthly": {
                          "price": -1,
                          "date": "2000-01-01 00:00:00Z"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/get-historical-closing-prices.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/closing-prices"
      }
    },
    "/api/v1/market-data/instruments/rates": {
      "get": {
        "operationId": "instrument-rates",
        "summary": "Returns the current bid, ask and last execution price for up to 100 instruments, with conversion rates to USD.",
        "description": "eToro marks the unitMargin and Discounted fields as obsolete, so the mock leaves them out. 400 covers invalid IDs or more than 100 of them. Shared market data quota of 120 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/get-instrument-market-rates.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": true,
            "description": "Comma separated instrument IDs, up to 100.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentRatesResponse"
                },
                "example": {
                  "rates": [
                    {
                      "instrumentID": 999001,
                      "ask": 100.5,
                      "bid": 100,
                      "lastExecution": 100.25,
                      "conversionRateAsk": 1,
                      "conversionRateBid": 1,
                      "date": "2000-01-01T00:00:00Z",
                      "priceRateID": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/get-instrument-market-rates.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/instrument-rates"
      }
    },
    "/api/v1/market-data/search": {
      "get": {
        "operationId": "search-instruments",
        "summary": "Returns 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.",
        "description": "eToro's page gives this endpoint a shared quota of 120 requests per 60 seconds across 11 market data endpoints, higher than the 60 a minute on the general rate limits page. A malformed sort value returns 404, not 400. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/search-for-instruments.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": true,
            "description": "Comma separated list of instrument fields to return.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "description": "Number of results per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageNumber",
            "in": "query",
            "required": false,
            "description": "Page number to return.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Field to sort by; prefix with a minus sign for descending. No asc or desc keyword and no spaces.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchInstrumentsResponse"
                },
                "example": {
                  "page": 1,
                  "pageSize": 10,
                  "totalItems": 1,
                  "items": [
                    {
                      "instrumentId": 999001,
                      "displayname": "Mock Instrument",
                      "popularityUniques7Day": 100,
                      "instrumentTypeID": 5,
                      "instrumentType": "Mock",
                      "exchangeID": 1,
                      "isOpen": true,
                      "currentRate": 100
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/search-for-instruments.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/search-instruments"
      }
    },
    "/api/v1/market-data/stocks-industries": {
      "get": {
        "operationId": "stocks-industries",
        "summary": "The industries eToro sorts stocks into, optionally narrowed to a set of industry IDs.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The fields of each entry were not read, so the mock shows an empty list. Documented rate limit: 120 requests per 60 seconds, shared across the market data endpoints.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/get-stocks-industries.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stocksIndustryIds",
            "in": "query",
            "required": false,
            "description": "Stock industry IDs to return, separated by commas.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "stocksIndustries": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/get-stocks-industries.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/stocks-industries"
      }
    },
    "/api/v1/me": {
      "get": {
        "operationId": "me",
        "summary": "Returns the profile behind your key or token: global and account IDs for real and demo, username, player level and the scopes granted.",
        "description": "A handy first call to check your keys work. One of the few pages that lists 403 for insufficient permissions. Default shared quota of 60 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Identity"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/identity/get-authenticated-user-profile.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeResponse"
                },
                "example": {
                  "gcid": 1000002,
                  "realCid": 1000001,
                  "demoCid": 1000003,
                  "username": "mock_user",
                  "firstName": null,
                  "middleName": null,
                  "lastName": null,
                  "playerLevel": 1,
                  "gender": 0,
                  "language": 1,
                  "dateOfBirth": "2000-01-01",
                  "avatarUrl": null,
                  "scopes": [
                    "etoro-public:demo:read"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/identity/get-authenticated-user-profile.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/me"
      }
    },
    "/api/v1/trading/execution/demo/market-close-orders/{orderId}": {
      "delete": {
        "operationId": "demo-cancel-close-order",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:demo:write or etoro-public:trade.demo:write). Confirm with the close order lookup for the same orderId. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/cancel-pending-demo-close-order.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the close order to cancel.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "token": "00000000-0000-4000-8000-000000000001"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/cancel-pending-demo-close-order.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-cancel-close-order"
      }
    },
    "/api/v1/trading/execution/demo/market-close-orders/positions/{positionId}": {
      "post": {
        "operationId": "demo-close-position",
        "summary": "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.",
        "description": "eToro says to confirm the outcome with GET /api/v1/trading/info/demo/close-orders/{orderId} using the returned orderID. The real version per eToro's market orders guide is /api/v1/trading/execution/market-close-orders/positions/{positionId}. Shared quota of 20 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/close-demo-position-by-units.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "positionId",
            "in": "path",
            "required": true,
            "description": "ID of the position to close.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "InstrumentID": {
                    "type": "integer",
                    "description": "Instrument ID of the position."
                  },
                  "UnitsToDeduct": {
                    "type": "number",
                    "description": "Units to close; omit or send null to close the whole position."
                  }
                },
                "required": [
                  "InstrumentID"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoClosePositionResponse"
                },
                "example": {
                  "orderForClose": {
                    "positionID": 900100,
                    "instrumentID": 999001,
                    "unitsToDeduct": 1,
                    "orderID": 900002,
                    "orderType": 19,
                    "statusID": 1,
                    "CID": 1000001,
                    "openDateTime": "2000-01-01T00:00:00Z",
                    "lastUpdate": "2000-01-01T00:00:00Z"
                  },
                  "token": "00000000-0000-4000-8000-000000000003"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/close-demo-position-by-units.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-close-position"
      }
    },
    "/api/v1/trading/execution/market-close-orders/{orderId}": {
      "delete": {
        "operationId": "real-cancel-close-order",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). Confirm with the close order lookup for the same orderId. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/cancel-pending-close-order.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the close order to cancel.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "token": "00000000-0000-4000-8000-000000000001"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/cancel-pending-close-order.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-cancel-close-order"
      }
    },
    "/api/v1/trading/execution/market-close-orders/positions/{positionId}": {
      "post": {
        "operationId": "real-close-position",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). Confirm the outcome with the close order lookup, using the orderID returned under orderForClose. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/close-position-by-units.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "positionId",
            "in": "path",
            "required": true,
            "description": "ID of the position to close.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "InstrumentId": {
                    "type": "integer",
                    "description": "ID of the instrument the position is in."
                  },
                  "UnitsToDeduct": {
                    "type": "number",
                    "description": "Units to close. Leave it out or send null to close the whole position."
                  }
                },
                "required": [
                  "InstrumentId"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderForClose": {
                    "orderID": 900003
                  },
                  "token": "00000000-0000-4000-8000-000000000001"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/close-position-by-units.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-close-position"
      }
    },
    "/api/v1/trading/info/aggregate-portfolio": {
      "get": {
        "operationId": "real-aggregate-portfolio",
        "summary": "A snapshot of the real account portfolio grouped by asset: account totals, directly held positions per instrument and active copy trading relationships.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The OAuth scope listed is etoro-public:trade.real:read. The inner fields of accountTotals, instrumentAggregates and mirrors are not shown in the mock. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-aggregated-portfolio-snapshot.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": false,
            "description": "Limit the reply to these instrument IDs. Account totals are not affected.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mirrorIds",
            "in": "query",
            "required": false,
            "description": "Limit copy trading data to these mirror IDs. 0 means positions held directly.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pnlLevel",
            "in": "query",
            "required": false,
            "description": "None, Pnl or DailyPnl. Default Pnl.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dailyCutoffUtc",
            "in": "query",
            "required": false,
            "description": "Start of your local day as a UTC timestamp. Required when pnlLevel is DailyPnl.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "conversionMode",
            "in": "query",
            "required": false,
            "description": "eToroApp or Realtime: which conversion rate to use for assets not in USD while the market is closed. Default eToroApp.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "cid": 1000001,
                  "timestamp": "2026-09-18T08:00:00Z",
                  "accountCurrency": "USD",
                  "accountTotals": {},
                  "instrumentAggregates": [],
                  "mirrors": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-aggregated-portfolio-snapshot.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-aggregate-portfolio"
      },
      "post": {
        "operationId": "real-aggregate-portfolio-filtered",
        "summary": "The 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The OAuth scope listed is etoro-public:trade.real:read. The page marks no body field as required. Account totals are worked out on the whole portfolio whatever the filters. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-a-filtered-aggregated-portfolio-snapshot.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountLevel": {
                    "type": "string",
                    "description": "none, totals or details. none leaves accountTotals out."
                  },
                  "instrumentLevel": {
                    "type": "string",
                    "description": "none, totals or details: how much per instrument data to return."
                  },
                  "mirrorLevel": {
                    "type": "string",
                    "description": "none, totals or details: how much copy trading data to return."
                  },
                  "pnlLevel": {
                    "type": "string",
                    "description": "none, pnl or dailyPnl."
                  },
                  "conversionMode": {
                    "type": "string",
                    "description": "eToroApp or realtime."
                  },
                  "instrumentIds": {
                    "type": "array",
                    "description": "Limit the reply to these instrument IDs."
                  },
                  "mirrorFilters": {
                    "type": "array",
                    "description": "Which copy trading relationships to include, by mirror ID. 0 is the directly held part of the portfolio."
                  },
                  "dailyCutoffUtc": {
                    "type": "string",
                    "description": "Start of your local day as a UTC timestamp, used for the daily figures."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "cid": 1000001,
                  "timestamp": "2026-09-18T08:00:00Z",
                  "accountCurrency": "USD",
                  "accountTotals": {},
                  "instrumentAggregates": [],
                  "mirrors": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-a-filtered-aggregated-portfolio-snapshot.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-aggregate-portfolio-filtered"
      }
    },
    "/api/v1/trading/info/demo/aggregate-portfolio": {
      "get": {
        "operationId": "demo-aggregate-portfolio",
        "summary": "A snapshot of the demo account portfolio grouped by asset: account totals, directly held positions per instrument and active copy trading relationships.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The OAuth scope listed is etoro-public:trade.demo:read. The inner fields of accountTotals, instrumentAggregates and mirrors are not shown in the mock. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-aggregated-portfolio-snapshot.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": false,
            "description": "Limit the reply to these instrument IDs. Account totals are not affected.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mirrorIds",
            "in": "query",
            "required": false,
            "description": "Limit copy trading data to these mirror IDs. 0 means positions held directly.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pnlLevel",
            "in": "query",
            "required": false,
            "description": "None, Pnl or DailyPnl. Default Pnl.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dailyCutoffUtc",
            "in": "query",
            "required": false,
            "description": "Start of your local day as a UTC timestamp. Required when pnlLevel is DailyPnl.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "conversionMode",
            "in": "query",
            "required": false,
            "description": "eToroApp or Realtime: which conversion rate to use for assets not in USD while the market is closed. Default eToroApp.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "cid": 1000001,
                  "timestamp": "2026-09-18T08:00:00Z",
                  "accountCurrency": "USD",
                  "accountTotals": {},
                  "instrumentAggregates": [],
                  "mirrors": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-aggregated-portfolio-snapshot.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-aggregate-portfolio"
      },
      "post": {
        "operationId": "demo-aggregate-portfolio-filtered",
        "summary": "The 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The OAuth scope listed is etoro-public:trade.demo:read. The page marks no body field as required. Account totals are worked out on the whole portfolio whatever the filters. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-a-filtered-aggregated-portfolio-snapshot.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountLevel": {
                    "type": "string",
                    "description": "none, totals or details. none leaves accountTotals out."
                  },
                  "instrumentLevel": {
                    "type": "string",
                    "description": "none, totals or details: how much per instrument data to return."
                  },
                  "mirrorLevel": {
                    "type": "string",
                    "description": "none, totals or details: how much copy trading data to return."
                  },
                  "pnlLevel": {
                    "type": "string",
                    "description": "none, pnl or dailyPnl."
                  },
                  "conversionMode": {
                    "type": "string",
                    "description": "eToroApp or realtime."
                  },
                  "instrumentIds": {
                    "type": "array",
                    "description": "Limit the reply to these instrument IDs."
                  },
                  "mirrorFilters": {
                    "type": "array",
                    "description": "Which copy trading relationships to include, by mirror ID. 0 is the directly held part of the portfolio."
                  },
                  "dailyCutoffUtc": {
                    "type": "string",
                    "description": "Start of your local day as a UTC timestamp, used for the daily figures."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "cid": 1000001,
                  "timestamp": "2026-09-18T08:00:00Z",
                  "accountCurrency": "USD",
                  "accountTotals": {},
                  "instrumentAggregates": [],
                  "mirrors": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-a-filtered-aggregated-portfolio-snapshot.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-aggregate-portfolio-filtered"
      }
    },
    "/api/v1/trading/info/demo/close-orders/{orderId}": {
      "get": {
        "operationId": "demo-close-order-info",
        "summary": "Looks up one close order on the demo account: its status and the positions it closed. This is the call that confirms a close.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:demo:read or etoro-public:trade.demo:read, or their write forms). The identifier values in the mock are placeholders: the meanings of statusID, orderType and operationType were not read. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-close-order-information-and-closed-position-details.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the close order.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderID": 900003,
                  "CID": 1000001,
                  "statusID": 1,
                  "orderType": 1,
                  "operationType": 1,
                  "instrumentID": 999001,
                  "assetCurrencyID": 1,
                  "accountCurrencyID": 1,
                  "requestOccurred": "2026-09-18T08:10:00Z",
                  "proceeds": 101.2,
                  "externalOperationType": 0,
                  "positions": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-close-order-information-and-closed-position-details.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-close-order-info"
      }
    },
    "/api/v1/trading/info/demo/pnl": {
      "get": {
        "operationId": "demo-pnl",
        "summary": "Returns the demo account's credit, unrealised profit or loss, open positions, pending orders and copy relationships.",
        "description": "Read or Write demo scope. accountCurrencyId 1 means USD. Shared quota of 60 requests per 60 seconds with the demo portfolio and instrument breakdown calls. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-account-pnl-and-portfolio-details.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoPnlResponse"
                },
                "example": {
                  "clientPortfolio": {
                    "credit": 10000,
                    "unrealizedPnL": 0,
                    "bonusCredit": 0,
                    "accountCurrencyId": 1,
                    "positions": [
                      {
                        "positionId": 900100,
                        "cid": 1000001,
                        "openDateTime": "2000-01-01T00:00:00Z",
                        "openRate": 100,
                        "instrumentId": 999001,
                        "isBuy": true,
                        "amount": 100,
                        "leverage": 1,
                        "units": 1,
                        "totalFees": 0,
                        "isTslEnabled": false
                      }
                    ],
                    "mirrors": [],
                    "orders": [],
                    "ordersForOpen": [],
                    "ordersForClose": [],
                    "ordersForCloseMultiple": []
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-account-pnl-and-portfolio-details.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-pnl"
      }
    },
    "/api/v1/trading/info/demo/portfolio": {
      "get": {
        "operationId": "demo-portfolio",
        "summary": "The demo account portfolio in detail: open positions, pending orders, copy trading details and balances, all under one clientPortfolio object.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:demo:read or etoro-public:trade.demo:read, or their write forms). The fields inside clientPortfolio were not read, so the mock leaves it empty. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-demo-portfolio-breakdown.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "clientPortfolio": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-demo-portfolio-breakdown.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-portfolio"
      }
    },
    "/api/v1/trading/info/portfolio": {
      "get": {
        "operationId": "real-portfolio",
        "summary": "The real account portfolio in detail: open positions, pending orders, copy trading details and balances, all under one clientPortfolio object.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:real:read or etoro-public:trade.real:read, or their write forms). The fields inside clientPortfolio were not read, so the mock leaves it empty. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-portfolio-breakdown.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "clientPortfolio": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-portfolio-breakdown.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-portfolio"
      }
    },
    "/api/v1/trading/info/real/close-orders/{orderId}": {
      "get": {
        "operationId": "real-close-order-info",
        "summary": "Looks up one close order on the real account: its status and the positions it closed. This is the call that confirms a close.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:real:read or etoro-public:trade.real:read, or their write forms). The identifier values in the mock are placeholders: the meanings of statusID, orderType and operationType were not read. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-close-order-information-and-closed-position-details.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the close order.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderID": 900003,
                  "CID": 1000001,
                  "statusID": 1,
                  "orderType": 1,
                  "operationType": 1,
                  "instrumentID": 999001,
                  "assetCurrencyID": 1,
                  "accountCurrencyID": 1,
                  "requestOccurred": "2026-09-18T08:10:00Z",
                  "proceeds": 101.2,
                  "externalOperationType": 0,
                  "positions": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-close-order-information-and-closed-position-details.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-close-order-info"
      }
    },
    "/api/v1/trading/info/real/pnl": {
      "get": {
        "operationId": "real-pnl",
        "summary": "Returns the real account's credit, unrealised profit or loss, open positions, pending orders and copy relationships.",
        "description": "Needs a key for the Real environment (Read or Write) or a real OAuth scope. Shared quota of 60 requests per 60 seconds with GET /api/v1/trading/info/portfolio and GET /api/v2/trading/info/instrument-breakdown, which have no real segment. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-account-pnl-and-portfolio-details.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RealPnlResponse"
                },
                "example": {
                  "clientPortfolio": {
                    "credit": 1000,
                    "unrealizedPnL": 0,
                    "bonusCredit": 0,
                    "accountCurrencyId": 1,
                    "positions": [],
                    "mirrors": [],
                    "orders": [],
                    "ordersForOpen": [],
                    "ordersForClose": [],
                    "ordersForCloseMultiple": []
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-account-pnl-and-portfolio-details.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-pnl"
      }
    },
    "/api/v1/trading/info/trade/demo/history": {
      "get": {
        "operationId": "demo-trade-history",
        "summary": "Returns closed demo trades from a start date to now, with pagination.",
        "description": "The response is a JSON array of trades; the mock nests it under items only to carry the _mock flag. Here demo comes after trade, not after info. Default shared quota of 60 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/list-trading-history.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "minDate",
            "in": "query",
            "required": true,
            "description": "Start date of the period.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "description": "Trades per page.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoTradeHistoryResponse"
                },
                "example": {
                  "items": [
                    {
                      "netProfit": 1,
                      "closeRate": 101,
                      "closeTimestamp": "2000-01-02T00:00:00Z",
                      "positionId": 900100,
                      "instrumentId": 999001,
                      "isBuy": true,
                      "leverage": 1,
                      "openRate": 100,
                      "openTimestamp": "2000-01-01T00:00:00Z",
                      "stopLossRate": 0,
                      "takeProfitRate": 0,
                      "trailingStopLoss": false,
                      "orderId": 900001,
                      "socialTradeId": 0,
                      "parentPositionId": 0,
                      "investment": 100,
                      "initialInvestment": 100,
                      "fees": 0,
                      "units": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/list-trading-history.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-trade-history"
      }
    },
    "/api/v1/trading/info/trade/history": {
      "get": {
        "operationId": "real-trade-history",
        "summary": "Returns 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.",
        "description": "The real path has no real segment; only the demo version adds demo. The response is a JSON array; the mock nests it under items only to carry the _mock flag. 400 usually means minDate is missing or malformed. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/list-trading-history.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "minDate",
            "in": "query",
            "required": true,
            "description": "Start date of the period.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "description": "Trades per page.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RealTradeHistoryResponse"
                },
                "example": {
                  "items": [
                    {
                      "netProfit": 1,
                      "closeRate": 101,
                      "closeTimestamp": "2000-01-02T00:00:00Z",
                      "positionId": 900200,
                      "instrumentId": 999001,
                      "isBuy": true,
                      "leverage": 1,
                      "openRate": 100,
                      "openTimestamp": "2000-01-01T00:00:00Z",
                      "stopLossRate": 0,
                      "takeProfitRate": 0,
                      "trailingStopLoss": false,
                      "orderId": 900003,
                      "socialTradeId": 0,
                      "parentPositionId": 0,
                      "investment": 100,
                      "initialInvestment": 100,
                      "fees": 0,
                      "units": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/list-trading-history.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-trade-history"
      }
    },
    "/api/v1/user-info/people": {
      "get": {
        "operationId": "user-info-people",
        "summary": "Returns public profile details for eToro users you name by username or customer ID, such as verification level and avatars.",
        "description": "OAuth scope etoro-public:user-info:read. 400 usually means too many usernames or a bad username format; 404 means a username was not found. Default shared quota of 60 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Users Info"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/users-info/get-user-profile-and-account-summary.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "usernames",
            "in": "query",
            "required": false,
            "description": "Usernames to look up.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "cidList",
            "in": "query",
            "required": false,
            "description": "Customer IDs to look up.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserInfoPeopleResponse"
                },
                "example": {
                  "users": [
                    {
                      "gcid": 1000002,
                      "realCID": 1000001,
                      "demoCID": 1000003,
                      "username": "mock_user",
                      "language": 1,
                      "languageIsoCode": "en-GB",
                      "country": 0,
                      "allowDisplayFullName": false,
                      "isVerified": false,
                      "verificationLevel": 1,
                      "accountStatus": 1,
                      "isPi": false,
                      "optOut": true,
                      "avatars": []
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/users-info/get-user-profile-and-account-summary.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/user-info-people"
      }
    },
    "/api/v1/watchlists": {
      "get": {
        "operationId": "get-watchlists",
        "summary": "Returns all of your watchlists and their items, with optional paging of items and related assets.",
        "description": "Also the example call on eToro's authentication page. The documented meta shows limits of 10 watchlists and 1000 items per watchlist. Shared read quota of 60 requests per 60 seconds across the watchlist read calls. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Watchlists"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/watchlists/get-user-watchlists.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "itemsPerPageForSingle",
            "in": "query",
            "required": false,
            "description": "Items per watchlist; default 100.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "ensureBuiltinWatchlists",
            "in": "query",
            "required": false,
            "description": "Include built in watchlists; default true.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "addRelatedAssets",
            "in": "query",
            "required": false,
            "description": "Include related assets; default false.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWatchlistsResponse"
                },
                "example": {
                  "status": 200,
                  "watchlists": [
                    {
                      "watchlistId": "MOCK-WL-1",
                      "name": "Mock Watchlist",
                      "Gcid": 1000002,
                      "watchlistType": "Static",
                      "totalItems": 1,
                      "isDefault": true,
                      "isUserSelectedDefault": true,
                      "watchlistRank": 1,
                      "dynamicUrl": null,
                      "items": [
                        {
                          "itemId": 999001,
                          "itemType": "Instrument",
                          "itemRank": 1,
                          "itemAddedReason": "Manual",
                          "itemAddedDate": "2000-01-01T00:00:00Z"
                        }
                      ]
                    }
                  ],
                  "meta": {
                    "pageNumber": 0,
                    "itemsPerPage": 100,
                    "maxItemsInWatchlistLimit": 1000,
                    "maxWatchlistsLimit": 10
                  },
                  "isSucceeded": true
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/watchlists/get-user-watchlists.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/get-watchlists"
      },
      "post": {
        "operationId": "create-watchlist",
        "summary": "Creates a new watchlist with the name you give. The name and type go in the query string, not the body.",
        "description": "Returns 201. Write scope needed (demo, real or watchlist write). Shared write quota of 20 requests per 60 seconds across the watchlist write calls. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Watchlists"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/watchlists/create-a-new-watchlist.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "Display name, up to 100 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Static or Dynamic; default Static.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dynamicQuery",
            "in": "query",
            "required": false,
            "description": "Query URL for a dynamic watchlist.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateWatchlistResponse"
                },
                "example": {
                  "status": 201,
                  "watchlists": [
                    {
                      "watchlistId": "MOCK-WL-2",
                      "name": "Mock Watchlist",
                      "watchlistType": "Static",
                      "totalItems": 0,
                      "isDefault": false,
                      "isUserSelectedDefault": false,
                      "watchlistRank": 2,
                      "items": []
                    }
                  ],
                  "isSucceeded": true
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/watchlists/create-a-new-watchlist.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/create-watchlist"
      }
    },
    "/api/v1/watchlists/{watchlistId}/items": {
      "post": {
        "operationId": "add-watchlist-items",
        "summary": "Adds instruments or people to an existing watchlist. The body is a JSON array of items.",
        "description": "The page documents a 201 with rate limit headers but no response body schema, so the mock shows only a status. Shared write quota of 20 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Watchlists"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/watchlists/add-items-to-watchlist.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "watchlistId",
            "in": "path",
            "required": true,
            "description": "ID of the watchlist.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "itemId": {
                    "type": "integer",
                    "description": "Instrument ID (or person ID), one per array element."
                  },
                  "itemType": {
                    "type": "string",
                    "description": "For example Instrument or Person."
                  },
                  "itemRank": {
                    "type": "integer",
                    "description": "Position in the list; default 0."
                  }
                },
                "required": [
                  "itemId",
                  "itemType"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddWatchlistItemsResponse"
                },
                "example": {
                  "status": 201
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/watchlists/add-items-to-watchlist.md",
        "x-checked": "2026-10-12",
        "x-version": "v1",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/add-watchlist-items"
      }
    },
    "/api/v2/market-data/instruments": {
      "get": {
        "operationId": "instruments-v2",
        "summary": "Instrument reference data, filtered by instrument IDs or by symbols, with cursor paging. With neither filter it pages through every instrument.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The fields inside results and pagination were not read beyond pagination.nextPageToken, so the mock leaves them empty. Documented rate limit: 120 requests per 60 seconds, shared across the market data endpoints.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/search-for-securities-instruments-by-id-or-symbol.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "instrumentsIds",
            "in": "query",
            "required": false,
            "description": "Instrument IDs to return. Mutually exclusive with symbols.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "symbols",
            "in": "query",
            "required": false,
            "description": "Trading symbols to return, for example AAPL. Mutually exclusive with instrumentsIds.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exchangeId",
            "in": "query",
            "required": false,
            "description": "Filter by exchange ID.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Filter by type: Forex, Commodity, CFD, Indices, Stocks, ETF, Bonds, TrustFunds, Options or Crypto.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "description": "Most results per page. Default 100.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageToken",
            "in": "query",
            "required": false,
            "description": "Cursor for the next page, from pagination.nextPageToken in the previous reply. This is a paging cursor, not a credential.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "results": [],
                  "pagination": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/search-for-securities-instruments-by-id-or-symbol.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/instruments-v2"
      }
    },
    "/api/v2/market-data/instruments/search": {
      "get": {
        "operationId": "instruments-search-v2",
        "summary": "Free text search of instruments by name or symbol, returned in order of relevance.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The fields of each entry were not read, so the mock shows an empty list. eToro says instruments that are not public are left out. Documented rate limit: 120 requests per 60 seconds, shared across the market data endpoints.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/search-instruments-by-free-text-query.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Text to match against names and symbols, 1 to 100 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Most results to return, 1 to 50. Default 10.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "results": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/search-instruments-by-free-text-query.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/instruments-search-v2"
      }
    },
    "/api/v2/market-data/rates": {
      "get": {
        "operationId": "rates-v2",
        "summary": "Current 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Each rate carries a quoteType of realtime or delayed. The other fields of each entry were not read, so the mock shows an empty list. Documented rate limit: 120 requests per 60 seconds, shared across the market data endpoints.",
        "tags": [
          "Market Data"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/market-data/retrieve-bidask-rates-for-one-or-more-instruments.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": true,
            "description": "Instrument IDs to fetch rates for, up to 1000.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "results": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/market-data/retrieve-bidask-rates-for-one-or-more-instruments.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/rates-v2"
      }
    },
    "/api/v2/trading/demo/positions/{positionId}": {
      "patch": {
        "operationId": "demo-edit-sl-tp",
        "summary": "Sends an asynchronous request to change or clear the stop loss or take profit on an open demo position.",
        "description": "Success is 202 Accepted, not 200. 409 means the position is already closed. Unlike most demo paths, demo sits after trading here rather than after execution or info. Falls under the default shared quota of 60 requests per 60 seconds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/modify-stop-loss-and-take-profit-settings-on-an-open-position.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "positionId",
            "in": "path",
            "required": true,
            "description": "ID of the open position.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "stopLossRate": {
                    "type": "number",
                    "description": "New stop loss rate."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "New take profit rate."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing."
                  },
                  "clearStopLoss": {
                    "type": "boolean",
                    "description": "Remove the stop loss where the system allows it."
                  },
                  "clearTakeProfit": {
                    "type": "boolean",
                    "description": "Remove the take profit."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoEditSlTpResponse"
                },
                "example": {
                  "operationId": "00000000-0000-4000-8000-000000000005",
                  "positionId": 900100,
                  "referenceId": "00000000-0000-4000-8000-000000000006"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/modify-stop-loss-and-take-profit-settings-on-an-open-position.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-edit-sl-tp"
      }
    },
    "/api/v2/trading/execution/demo/orders": {
      "post": {
        "operationId": "demo-create-order",
        "summary": "Places 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.",
        "description": "Needs a Write key (OAuth scope etoro-public:demo:write or etoro-public:trade.demo:write). referenceId echoes your x-request-id, which you can later pass to the orders lookup. Shared quota of 20 requests per 60 seconds across the order execution endpoints. Also documented on the page: triggerRate, limitRate, contracts, additionalMargin and positionIds. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/create-an-order.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "description": "open or close; eToro says only open is currently supported here."
                  },
                  "transaction": {
                    "type": "string",
                    "description": "buy, sell, sellShort or buyToCover; eToro says buy and sellShort are currently supported."
                  },
                  "instrumentId": {
                    "type": "integer",
                    "description": "eToro instrument ID. For open orders give exactly one of instrumentId or symbol."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Ticker symbol, as the alternative to instrumentId."
                  },
                  "orderType": {
                    "type": "string",
                    "description": "mkt (market), mit (market if touched, needs triggerRate) or limitIOC (needs limitRate)."
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount to invest in the order currency. Mutually exclusive with units and contracts."
                  },
                  "units": {
                    "type": "number",
                    "description": "Number of units. Mutually exclusive with amount and contracts."
                  },
                  "orderCurrency": {
                    "type": "string",
                    "description": "Currency of the amount; eToro says only USD is currently supported."
                  },
                  "leverage": {
                    "type": "integer",
                    "description": "Leverage multiplier; defaults to 1."
                  },
                  "stopLossRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to limit a loss."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to take profit."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing."
                  },
                  "settlementType": {
                    "type": "string",
                    "description": "cfd, real, realFutures or marginTrade; optional on v2."
                  }
                },
                "required": [
                  "action",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoCreateOrderResponse"
                },
                "example": {
                  "token": "00000000-0000-4000-8000-000000000001",
                  "orderId": 900001,
                  "referenceId": "00000000-0000-4000-8000-000000000002"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/create-an-order.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-create-order"
      }
    },
    "/api/v2/trading/execution/demo/orders/{orderId}": {
      "delete": {
        "operationId": "demo-cancel-order",
        "summary": "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.",
        "description": "Write scope needed. Shared quota of 20 requests per 60 seconds across the order execution endpoints. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/cancels-an-order-before-it-is-executed.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the order to cancel.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoCancelOrderResponse"
                },
                "example": {
                  "token": "00000000-0000-4000-8000-000000000004"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/cancels-an-order-before-it-is-executed.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-cancel-order"
      }
    },
    "/api/v2/trading/execution/orders": {
      "post": {
        "operationId": "real-create-order",
        "summary": "Places 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). referenceId echoes your x-request-id, which you can pass to the orders lookup to confirm the outcome. eToro says only the buy and sellShort transactions are currently supported. Also documented on the page: additionalMargin and positionIds. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/create-an-order.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "description": "open or close. eToro says only open is currently supported here."
                  },
                  "transaction": {
                    "type": "string",
                    "description": "buy, sell, sellShort or buyToCover. buy opens a long position and sellShort opens a short one."
                  },
                  "instrumentId": {
                    "type": "integer",
                    "description": "eToro instrument ID. For an open give exactly one of instrumentId or symbol."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Ticker symbol, as the alternative to instrumentId."
                  },
                  "orderType": {
                    "type": "string",
                    "description": "mkt (market), mit (market if touched, needs triggerRate) or limitIOC (needs limitRate)."
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount to invest in the order currency. Mutually exclusive with units and contracts."
                  },
                  "units": {
                    "type": "number",
                    "description": "Number of units. Mutually exclusive with amount and contracts."
                  },
                  "contracts": {
                    "type": "number",
                    "description": "Number of contracts, for real futures. Mutually exclusive with amount and units."
                  },
                  "orderCurrency": {
                    "type": "string",
                    "description": "Currency of the amount. eToro says only USD is currently supported."
                  },
                  "leverage": {
                    "type": "integer",
                    "description": "Leverage multiplier. Defaults to 1. Anything above 1 needs a stopLossRate."
                  },
                  "stopLossRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to limit a loss."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to take profit."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing. Default fixed."
                  },
                  "settlementType": {
                    "type": "string",
                    "description": "cfd, real, realFutures or marginTrade."
                  },
                  "triggerRate": {
                    "type": "number",
                    "description": "Trigger rate. Required for mit orders and rejected for the other types."
                  },
                  "limitRate": {
                    "type": "number",
                    "description": "Limit rate. Required for limitIOC orders and rejected for the other types."
                  }
                },
                "required": [
                  "action",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "token": "00000000-0000-4000-8000-000000000001",
                  "orderId": 900001,
                  "referenceId": "00000000-0000-4000-8000-000000000002"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/create-an-order.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-create-order"
      }
    },
    "/api/v2/trading/execution/orders/{orderId}": {
      "delete": {
        "operationId": "real-cancel-order",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). eToro says an order can be cancelled while it waits for the market to open or for its trigger rate. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/cancels-an-order-before-it-is-executed.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the order to cancel.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "token": "00000000-0000-4000-8000-000000000001"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/cancels-an-order-before-it-is-executed.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-cancel-order"
      }
    },
    "/api/v2/trading/info/costs": {
      "post": {
        "operationId": "real-costs",
        "summary": "Works 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:real:read or etoro-public:trade.real:read, or their write forms). The body is the same order description the order calls take. Also documented on the page: additionalMargin and positionIds. The fields of each entry in costs were not read. Documented rate limit: 20 requests per 60 seconds.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-what-if-trading-cost-breakdown.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "description": "open or close. For open, give exactly one of symbol or instrumentId. For close, positionIds must not be empty."
                  },
                  "transaction": {
                    "type": "string",
                    "description": "buy, sell, sellShort or buyToCover. buy opens a long position and sellShort opens a short one."
                  },
                  "instrumentId": {
                    "type": "integer",
                    "description": "eToro instrument ID. For an open give exactly one of instrumentId or symbol."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Ticker symbol, as the alternative to instrumentId."
                  },
                  "orderType": {
                    "type": "string",
                    "description": "mkt (market), mit (market if touched, needs triggerRate) or limitIOC (needs limitRate)."
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount to invest in the order currency. Mutually exclusive with units and contracts."
                  },
                  "units": {
                    "type": "number",
                    "description": "Number of units. Mutually exclusive with amount and contracts."
                  },
                  "contracts": {
                    "type": "number",
                    "description": "Number of contracts, for real futures. Mutually exclusive with amount and units."
                  },
                  "orderCurrency": {
                    "type": "string",
                    "description": "Currency of the amount. eToro says only USD is currently supported."
                  },
                  "leverage": {
                    "type": "integer",
                    "description": "Leverage multiplier. Defaults to 1. Anything above 1 needs a stopLossRate."
                  },
                  "stopLossRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to limit a loss."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to take profit."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing. Default fixed."
                  },
                  "settlementType": {
                    "type": "string",
                    "description": "cfd, real, realFutures or marginTrade."
                  },
                  "triggerRate": {
                    "type": "number",
                    "description": "Trigger rate. Required for mit orders and rejected for the other types."
                  },
                  "limitRate": {
                    "type": "number",
                    "description": "Limit rate. Required for limitIOC orders and rejected for the other types."
                  }
                },
                "required": [
                  "action",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "instrumentId": 999001,
                  "symbol": "MOCK",
                  "costs": [],
                  "lastUpdated": "2026-09-18T08:00:00Z"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-what-if-trading-cost-breakdown.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-costs"
      }
    },
    "/api/v2/trading/info/demo/costs": {
      "post": {
        "operationId": "demo-costs",
        "summary": "Works 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:demo:read or etoro-public:trade.demo:read, or their write forms). The body is the same order description the order calls take. Also documented on the page: additionalMargin and positionIds. The fields of each entry in costs were not read. Documented rate limit: 20 requests per 60 seconds.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-what-if-trading-cost-breakdown.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "description": "open or close. For open, give exactly one of symbol or instrumentId. For close, positionIds must not be empty."
                  },
                  "transaction": {
                    "type": "string",
                    "description": "buy, sell, sellShort or buyToCover. buy opens a long position and sellShort opens a short one."
                  },
                  "instrumentId": {
                    "type": "integer",
                    "description": "eToro instrument ID. For an open give exactly one of instrumentId or symbol."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Ticker symbol, as the alternative to instrumentId."
                  },
                  "orderType": {
                    "type": "string",
                    "description": "mkt (market), mit (market if touched, needs triggerRate) or limitIOC (needs limitRate)."
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount to invest in the order currency. Mutually exclusive with units and contracts."
                  },
                  "units": {
                    "type": "number",
                    "description": "Number of units. Mutually exclusive with amount and contracts."
                  },
                  "contracts": {
                    "type": "number",
                    "description": "Number of contracts, for real futures. Mutually exclusive with amount and units."
                  },
                  "orderCurrency": {
                    "type": "string",
                    "description": "Currency of the amount. eToro says only USD is currently supported."
                  },
                  "leverage": {
                    "type": "integer",
                    "description": "Leverage multiplier. Defaults to 1. Anything above 1 needs a stopLossRate."
                  },
                  "stopLossRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to limit a loss."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to take profit."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing. Default fixed."
                  },
                  "settlementType": {
                    "type": "string",
                    "description": "cfd, real, realFutures or marginTrade."
                  },
                  "triggerRate": {
                    "type": "number",
                    "description": "Trigger rate. Required for mit orders and rejected for the other types."
                  },
                  "limitRate": {
                    "type": "number",
                    "description": "Limit rate. Required for limitIOC orders and rejected for the other types."
                  }
                },
                "required": [
                  "action",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "instrumentId": 999001,
                  "symbol": "MOCK",
                  "costs": [],
                  "lastUpdated": "2026-09-18T08:00:00Z"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-what-if-trading-cost-breakdown.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-costs"
      }
    },
    "/api/v2/trading/info/demo/eligibility": {
      "post": {
        "operationId": "demo-eligibility",
        "summary": "The 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:demo:read or etoro-public:trade.demo:read, or their write forms). eToro says these rules change rarely, so the result can be fetched once and reused. The fields of each entry in eligibilities were not read. Documented rate limit: 20 requests per 60 seconds.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/check-instrument-trading-eligibility.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "instrumentIds": {
                    "type": "array",
                    "description": "Instrument IDs to check. Give at least one of instrumentIds or symbols, 100 instruments at most in total."
                  },
                  "symbols": {
                    "type": "array",
                    "description": "Instrument symbols to check."
                  },
                  "currency": {
                    "type": "string",
                    "description": "Currency for the amounts in the reply. eToro says only USD is currently supported."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "currency": "USD",
                  "eligibilities": [],
                  "notFoundInstrumentIds": [],
                  "notFoundSymbols": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/check-instrument-trading-eligibility.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-eligibility"
      }
    },
    "/api/v2/trading/info/demo/instrument-breakdown": {
      "get": {
        "operationId": "demo-instrument-breakdown",
        "summary": "The demo account portfolio grouped by instrument, with the positions, pending orders and profit or loss under each.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The OAuth scope listed is etoro-public:trade.demo:read. The inner fields of instruments and mirrors are not shown in the mock. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-instrument-breakdown-demo.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "CID",
            "in": "header",
            "required": true,
            "description": "Client identifier. The page lists it as a required header and says nothing more about it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": false,
            "description": "Limit the reply to these instrument IDs, up to 100. Default: all.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mirrorIds",
            "in": "query",
            "required": false,
            "description": "Limit the reply to these mirror IDs. 0 is the directly held part of the portfolio.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "positionLevel",
            "in": "query",
            "required": false,
            "description": "None or Normal: whether to return each position. Default Normal.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderLevel",
            "in": "query",
            "required": false,
            "description": "None or Normal: whether to return each order. Default Normal.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mirrorLevel",
            "in": "query",
            "required": false,
            "description": "None or Details: whether to include copy trading mirrors. Default None.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "conversionMode",
            "in": "query",
            "required": false,
            "description": "eToroApp or Realtime. Default eToroApp.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "accountCurrency": "USD",
                  "timestamp": "2026-09-18T08:00:00Z",
                  "instruments": [],
                  "mirrors": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-instrument-breakdown-demo.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-instrument-breakdown"
      }
    },
    "/api/v2/trading/info/demo/orders:lookup": {
      "get": {
        "operationId": "demo-order-lookup",
        "summary": "Returns 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.",
        "description": "The colon in orders:lookup is part of the path as eToro writes it. status.id runs from 1 Received to 12 PendingTriggeredRate. Shared quota of 60 requests per 60 seconds with the older demo order and close order info calls. Method, path and parameters, with their required flags, were re-read on eToro's reference page for this call on 12 Oct 2026 and agree with this record; the mock reply was not compared field by field.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/get-order-information-and-position-details.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "required": false,
            "description": "Numeric order ID. Mutually exclusive with referenceId.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "referenceId",
            "in": "query",
            "required": false,
            "description": "The x-request-id you sent with the order. Mutually exclusive with orderId.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Example is mock data, not real account data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DemoOrderLookupResponse"
                },
                "example": {
                  "accountId": 1000001,
                  "gcid": 1000002,
                  "portfolioId": 1,
                  "orderId": 900001,
                  "action": "open",
                  "transaction": "buy",
                  "type": "mkt",
                  "etoroOrderTypeId": 17,
                  "status": {
                    "id": 3,
                    "name": "Filled",
                    "errorCode": 0,
                    "errorMessage": null
                  },
                  "asset": {
                    "symbol": "MOCK",
                    "instrumentId": 999001,
                    "currency": "USD",
                    "settlementType": "cfd",
                    "leverage": 1,
                    "side": "long"
                  },
                  "orderCurrency": "usd",
                  "requestedAmount": 100,
                  "requestedUnits": null,
                  "totalCosts": 0,
                  "positionExecutions": [
                    {
                      "positionId": 900100,
                      "state": "open",
                      "investedAmountCurrency": 100,
                      "remainingUnits": 1,
                      "openingData": {
                        "openTime": "2000-01-01T00:00:00Z",
                        "orderId": 900001,
                        "executionTime": "2000-01-01T00:00:01Z",
                        "units": 1,
                        "avgPrice": 100,
                        "fees": 0,
                        "taxes": 0
                      }
                    }
                  ],
                  "requestTime": "2000-01-01T00:00:00Z",
                  "lastUpdate": "2000-01-01T00:00:01Z",
                  "requestType": "byAmount"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/get-order-information-and-position-details.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-carried": "responses",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-order-lookup"
      }
    },
    "/api/v2/trading/info/eligibility": {
      "post": {
        "operationId": "real-eligibility",
        "summary": "The 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:real:read or etoro-public:trade.real:read, or their write forms). eToro says these rules change rarely, so the result can be fetched once and reused. The fields of each entry in eligibilities were not read. Documented rate limit: 20 requests per 60 seconds.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/check-instrument-trading-eligibility.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "instrumentIds": {
                    "type": "array",
                    "description": "Instrument IDs to check. Give at least one of instrumentIds or symbols, 100 instruments at most in total."
                  },
                  "symbols": {
                    "type": "array",
                    "description": "Instrument symbols to check."
                  },
                  "currency": {
                    "type": "string",
                    "description": "Currency for the amounts in the reply. eToro says only USD is currently supported."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "currency": "USD",
                  "eligibilities": [],
                  "notFoundInstrumentIds": [],
                  "notFoundSymbols": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/check-instrument-trading-eligibility.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-eligibility"
      }
    },
    "/api/v2/trading/info/instrument-breakdown": {
      "get": {
        "operationId": "real-instrument-breakdown",
        "summary": "The real account portfolio grouped by instrument, with the positions, pending orders and profit or loss under each.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. The OAuth scope listed is etoro-public:trade.real:read. The inner fields of instruments and mirrors are not shown in the mock. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-instrument-breakdown.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "CID",
            "in": "header",
            "required": true,
            "description": "Client identifier. The page lists it as a required header and says nothing more about it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "instrumentIds",
            "in": "query",
            "required": false,
            "description": "Limit the reply to these instrument IDs, up to 100. Default: all.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mirrorIds",
            "in": "query",
            "required": false,
            "description": "Limit the reply to these mirror IDs. 0 is the directly held part of the portfolio.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "positionLevel",
            "in": "query",
            "required": false,
            "description": "None or Normal: whether to return each position. Default Normal.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderLevel",
            "in": "query",
            "required": false,
            "description": "None or Normal: whether to return each order. Default Normal.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mirrorLevel",
            "in": "query",
            "required": false,
            "description": "None or Details: whether to include copy trading mirrors. Default None.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "conversionMode",
            "in": "query",
            "required": false,
            "description": "eToroApp or Realtime. Default eToroApp.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "accountCurrency": "USD",
                  "timestamp": "2026-09-18T08:00:00Z",
                  "instruments": [],
                  "mirrors": []
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-instrument-breakdown.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-instrument-breakdown"
      }
    },
    "/api/v2/trading/info/orders:lookup": {
      "get": {
        "operationId": "real-order-lookup",
        "summary": "Looks 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. A Read key is enough (OAuth scopes etoro-public:real:read or etoro-public:trade.real:read, or their write forms). The inner fields of status and positionExecutions are not shown in the mock. Documented rate limit: 60 requests per 60 seconds, shared with related endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/get-order-information-and-position-details.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "required": false,
            "description": "Numeric order ID. Give exactly one of orderId or referenceId.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "referenceId",
            "in": "query",
            "required": false,
            "description": "The x-request-id sent when the order was submitted.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderId": 900001,
                  "action": "open",
                  "transaction": "buy",
                  "type": "mkt",
                  "status": {},
                  "orderCurrency": "USD",
                  "requestedAmount": 100,
                  "positionExecutions": [],
                  "requestTime": "2026-09-18T08:00:00Z",
                  "lastUpdate": "2026-09-18T08:00:01Z"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/get-order-information-and-position-details.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-order-lookup"
      }
    },
    "/api/v2/trading/positions/{positionId}": {
      "patch": {
        "operationId": "real-edit-sl-tp",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). At least one of the body fields is required. Success is HTTP 202. Documented rate limit: 60 requests per 60 seconds, the default quota shared by endpoints with no limit of their own.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/modify-stop-loss-and-take-profit-settings-on-an-open-position.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "positionId",
            "in": "path",
            "required": true,
            "description": "ID of the open position.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "stopLossRate": {
                    "type": "number",
                    "description": "New stop loss rate."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "New take profit rate."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing."
                  },
                  "clearStopLoss": {
                    "type": "boolean",
                    "description": "True to remove the stop loss, where eToro allows the position to have none."
                  },
                  "clearTakeProfit": {
                    "type": "boolean",
                    "description": "True to remove the take profit."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "operationId": "00000000-0000-4000-8000-000000000003",
                  "positionId": 800001,
                  "referenceId": "00000000-0000-4000-8000-000000000002"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/modify-stop-loss-and-take-profit-settings-on-an-open-position.md",
        "x-checked": "2026-10-12",
        "x-version": "v2",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-edit-sl-tp"
      }
    },
    "/api/v3/trading/execution/demo/orders": {
      "post": {
        "operationId": "demo-submit-order-v3",
        "summary": "Submits 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:demo:write or etoro-public:trade.demo:write). Success is HTTP 202. The page says stricter settlementType rules apply on version 3 than on version 2: they were not read in full. Also documented on the page: additionalMargin and positionIds. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/submit-an-order-for-asynchronous-processing.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "description": "open or close. eToro says only open is currently supported here."
                  },
                  "transaction": {
                    "type": "string",
                    "description": "buy, sell, sellShort or buyToCover. buy opens a long position and sellShort opens a short one."
                  },
                  "instrumentId": {
                    "type": "integer",
                    "description": "eToro instrument ID. For an open give exactly one of instrumentId or symbol."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Ticker symbol, as the alternative to instrumentId."
                  },
                  "orderType": {
                    "type": "string",
                    "description": "mkt (market), mit (market if touched, needs triggerRate) or limitIOC (needs limitRate)."
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount to invest in the order currency. Mutually exclusive with units and contracts."
                  },
                  "units": {
                    "type": "number",
                    "description": "Number of units. Mutually exclusive with amount and contracts."
                  },
                  "contracts": {
                    "type": "number",
                    "description": "Number of contracts, for real futures. Mutually exclusive with amount and units."
                  },
                  "orderCurrency": {
                    "type": "string",
                    "description": "Currency of the amount. eToro says only USD is currently supported."
                  },
                  "leverage": {
                    "type": "integer",
                    "description": "Leverage multiplier. Defaults to 1. Anything above 1 needs a stopLossRate."
                  },
                  "stopLossRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to limit a loss."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to take profit."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing. Default fixed."
                  },
                  "settlementType": {
                    "type": "string",
                    "description": "cfd, real, realFutures or marginTrade."
                  },
                  "triggerRate": {
                    "type": "number",
                    "description": "Trigger rate. Required for mit orders and rejected for the other types."
                  },
                  "limitRate": {
                    "type": "number",
                    "description": "Limit rate. Required for limitIOC orders and rejected for the other types."
                  }
                },
                "required": [
                  "action",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "token": "00000000-0000-4000-8000-000000000001",
                  "orderId": 900001,
                  "referenceId": "00000000-0000-4000-8000-000000000002"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/submit-an-order-for-asynchronous-processing.md",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-submit-order-v3"
      }
    },
    "/api/v3/trading/execution/demo/orders/{orderId}": {
      "delete": {
        "operationId": "demo-cancel-order-v3",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:demo:write or etoro-public:trade.demo:write). Success is HTTP 202. eToro says referenceId is currently always returned as an empty string on this call. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Demo)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--demo/request-cancellation-of-a-pending-order.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the order to cancel.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderId": 900001,
                  "referenceId": ""
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--demo/request-cancellation-of-a-pending-order.md",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/demo-cancel-order-v3"
      }
    },
    "/api/v3/trading/execution/orders": {
      "post": {
        "operationId": "real-submit-order-v3",
        "summary": "Submits 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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). Success is HTTP 202. The page says stricter settlementType rules apply on version 3 than on version 2: they were not read in full. Also documented on the page: additionalMargin and positionIds. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/submit-an-order-for-asynchronous-processing.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "description": "Send application/json on a request with a body.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "description": "open or close. eToro says only open is currently supported here."
                  },
                  "transaction": {
                    "type": "string",
                    "description": "buy, sell, sellShort or buyToCover. buy opens a long position and sellShort opens a short one."
                  },
                  "instrumentId": {
                    "type": "integer",
                    "description": "eToro instrument ID. For an open give exactly one of instrumentId or symbol."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Ticker symbol, as the alternative to instrumentId."
                  },
                  "orderType": {
                    "type": "string",
                    "description": "mkt (market), mit (market if touched, needs triggerRate) or limitIOC (needs limitRate)."
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount to invest in the order currency. Mutually exclusive with units and contracts."
                  },
                  "units": {
                    "type": "number",
                    "description": "Number of units. Mutually exclusive with amount and contracts."
                  },
                  "contracts": {
                    "type": "number",
                    "description": "Number of contracts, for real futures. Mutually exclusive with amount and units."
                  },
                  "orderCurrency": {
                    "type": "string",
                    "description": "Currency of the amount. eToro says only USD is currently supported."
                  },
                  "leverage": {
                    "type": "integer",
                    "description": "Leverage multiplier. Defaults to 1. Anything above 1 needs a stopLossRate."
                  },
                  "stopLossRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to limit a loss."
                  },
                  "takeProfitRate": {
                    "type": "number",
                    "description": "Rate at which the position closes to take profit."
                  },
                  "stopLossType": {
                    "type": "string",
                    "description": "fixed or trailing. Default fixed."
                  },
                  "settlementType": {
                    "type": "string",
                    "description": "cfd, real, realFutures or marginTrade."
                  },
                  "triggerRate": {
                    "type": "number",
                    "description": "Trigger rate. Required for mit orders and rejected for the other types."
                  },
                  "limitRate": {
                    "type": "number",
                    "description": "Limit rate. Required for limitIOC orders and rejected for the other types."
                  }
                },
                "required": [
                  "action",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "token": "00000000-0000-4000-8000-000000000001",
                  "orderId": 900001,
                  "referenceId": "00000000-0000-4000-8000-000000000002"
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/submit-an-order-for-asynchronous-processing.md",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-submit-order-v3"
      }
    },
    "/api/v3/trading/execution/orders/{orderId}": {
      "delete": {
        "operationId": "real-cancel-order-v3",
        "summary": "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.",
        "description": "Read on eToro's own reference page on 12 Oct 2026: method, path, parameters and the top level response fields. Needs a Write key (OAuth scope etoro-public:real:write or etoro-public:trade.real:write). Success is HTTP 202. eToro says referenceId is currently always returned as an empty string on this call. Documented rate limit: 20 requests per 60 seconds, a quota shared across the order execution endpoints.",
        "tags": [
          "Trading (Real)"
        ],
        "externalDocs": {
          "description": "eToro's own reference for this operation",
          "url": "https://api-portal.etoro.com/api-reference/trading--real/request-cancellation-of-a-pending-order.md"
        },
        "parameters": [
          {
            "name": "x-request-id",
            "in": "header",
            "required": true,
            "description": "A fresh UUID for every request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "ID of the order to cancel.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "A mock reply held on this site's record. The values are invented and the record holds no status code for it.",
            "content": {
              "application/json": {
                "example": {
                  "_mock": true,
                  "orderId": 900001,
                  "referenceId": ""
                }
              }
            }
          }
        },
        "security": [
          {
            "x-api-key": [],
            "x-user-key": []
          }
        ],
        "x-source": "https://api-portal.etoro.com/api-reference/trading--real/request-cancellation-of-a-pending-order.md",
        "x-checked": "2026-10-12",
        "x-version": "v3",
        "x-page": "https://openbrokerapi.com/brokers/etoro/endpoints/real-cancel-order-v3"
      }
    }
  },
  "components": {
    "schemas": {
      "InstrumentDisplayDataResponse": {
        "type": "object",
        "properties": {
          "instrumentDisplayDatas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "instrumentID": {
                  "type": "integer"
                },
                "instrumentDisplayName": {
                  "type": "string"
                },
                "instrumentTypeID": {
                  "type": "integer"
                },
                "exchangeID": {
                  "type": "integer"
                },
                "symbolFull": {
                  "type": "string"
                },
                "stocksIndustryId": {
                  "type": "integer"
                },
                "priceSource": {
                  "type": "string"
                },
                "hasExpirationDate": {
                  "type": "boolean"
                },
                "isInternalInstrument": {
                  "type": "boolean"
                },
                "images": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "instrumentID": {
                        "type": "integer"
                      },
                      "width": {
                        "type": "integer"
                      },
                      "height": {
                        "type": "integer"
                      },
                      "uri": {
                        "type": "string"
                      },
                      "backgroundColor": {
                        "type": "string"
                      },
                      "textColor": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "Error body. Shape varies by endpoint; check the linked reference page.",
        "properties": {
          "errorCode": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "CandlesResponse": {
        "type": "object",
        "properties": {
          "interval": {
            "type": "string"
          },
          "candles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "instrumentId": {
                  "type": "integer"
                },
                "candles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "instrumentID": {
                        "type": "integer"
                      },
                      "fromDate": {
                        "type": "string"
                      },
                      "open": {
                        "type": "number"
                      },
                      "high": {
                        "type": "number"
                      },
                      "low": {
                        "type": "number"
                      },
                      "close": {
                        "type": "number"
                      },
                      "volume": {
                        "type": "integer"
                      }
                    }
                  }
                },
                "rangeOpen": {
                  "type": "number"
                },
                "rangeClose": {
                  "type": "number"
                },
                "rangeHigh": {
                  "type": "number"
                },
                "rangeLow": {
                  "type": "number"
                },
                "volume": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "ClosingPricesResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "instrumentId": {
                  "type": "integer"
                },
                "officialClosingPrice": {
                  "type": "number"
                },
                "closingPrices": {
                  "type": "object",
                  "properties": {
                    "daily": {
                      "type": "object",
                      "properties": {
                        "price": {
                          "type": "number"
                        },
                        "date": {
                          "type": "string"
                        }
                      }
                    },
                    "weekly": {
                      "type": "object",
                      "properties": {
                        "price": {
                          "type": "number"
                        },
                        "date": {
                          "type": "string"
                        }
                      }
                    },
                    "monthly": {
                      "type": "object",
                      "properties": {
                        "price": {
                          "type": "integer"
                        },
                        "date": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "InstrumentRatesResponse": {
        "type": "object",
        "properties": {
          "rates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "instrumentID": {
                  "type": "integer"
                },
                "ask": {
                  "type": "number"
                },
                "bid": {
                  "type": "number"
                },
                "lastExecution": {
                  "type": "number"
                },
                "conversionRateAsk": {
                  "type": "number"
                },
                "conversionRateBid": {
                  "type": "number"
                },
                "date": {
                  "type": "string"
                },
                "priceRateID": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "SearchInstrumentsResponse": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer"
          },
          "pageSize": {
            "type": "integer"
          },
          "totalItems": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "instrumentId": {
                  "type": "integer"
                },
                "displayname": {
                  "type": "string"
                },
                "popularityUniques7Day": {
                  "type": "integer"
                },
                "instrumentTypeID": {
                  "type": "integer"
                },
                "instrumentType": {
                  "type": "string"
                },
                "exchangeID": {
                  "type": "integer"
                },
                "isOpen": {
                  "type": "boolean"
                },
                "currentRate": {
                  "type": "number"
                }
              }
            }
          }
        }
      },
      "MeResponse": {
        "type": "object",
        "properties": {
          "gcid": {
            "type": "integer"
          },
          "realCid": {
            "type": "integer"
          },
          "demoCid": {
            "type": "integer"
          },
          "username": {
            "type": "string"
          },
          "firstName": {
            "type": [
              "string",
              "null"
            ]
          },
          "middleName": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastName": {
            "type": [
              "string",
              "null"
            ]
          },
          "playerLevel": {
            "type": "integer"
          },
          "gender": {
            "type": "integer"
          },
          "language": {
            "type": "integer"
          },
          "dateOfBirth": {
            "type": "string"
          },
          "avatarUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "DemoClosePositionResponse": {
        "type": "object",
        "properties": {
          "orderForClose": {
            "type": "object",
            "properties": {
              "positionID": {
                "type": "integer"
              },
              "instrumentID": {
                "type": "integer"
              },
              "unitsToDeduct": {
                "type": "integer"
              },
              "orderID": {
                "type": "integer"
              },
              "orderType": {
                "type": "integer"
              },
              "statusID": {
                "type": "integer"
              },
              "CID": {
                "type": "integer"
              },
              "openDateTime": {
                "type": "string"
              },
              "lastUpdate": {
                "type": "string"
              }
            }
          },
          "token": {
            "type": "string"
          }
        }
      },
      "DemoPnlResponse": {
        "type": "object",
        "properties": {
          "clientPortfolio": {
            "type": "object",
            "properties": {
              "credit": {
                "type": "number"
              },
              "unrealizedPnL": {
                "type": "number"
              },
              "bonusCredit": {
                "type": "number"
              },
              "accountCurrencyId": {
                "type": "integer"
              },
              "positions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "positionId": {
                      "type": "integer"
                    },
                    "cid": {
                      "type": "integer"
                    },
                    "openDateTime": {
                      "type": "string"
                    },
                    "openRate": {
                      "type": "number"
                    },
                    "instrumentId": {
                      "type": "integer"
                    },
                    "isBuy": {
                      "type": "boolean"
                    },
                    "amount": {
                      "type": "integer"
                    },
                    "leverage": {
                      "type": "integer"
                    },
                    "units": {
                      "type": "integer"
                    },
                    "totalFees": {
                      "type": "integer"
                    },
                    "isTslEnabled": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "mirrors": {
                "type": "array",
                "items": {}
              },
              "orders": {
                "type": "array",
                "items": {}
              },
              "ordersForOpen": {
                "type": "array",
                "items": {}
              },
              "ordersForClose": {
                "type": "array",
                "items": {}
              },
              "ordersForCloseMultiple": {
                "type": "array",
                "items": {}
              }
            }
          }
        }
      },
      "RealPnlResponse": {
        "type": "object",
        "properties": {
          "clientPortfolio": {
            "type": "object",
            "properties": {
              "credit": {
                "type": "number"
              },
              "unrealizedPnL": {
                "type": "number"
              },
              "bonusCredit": {
                "type": "number"
              },
              "accountCurrencyId": {
                "type": "integer"
              },
              "positions": {
                "type": "array",
                "items": {}
              },
              "mirrors": {
                "type": "array",
                "items": {}
              },
              "orders": {
                "type": "array",
                "items": {}
              },
              "ordersForOpen": {
                "type": "array",
                "items": {}
              },
              "ordersForClose": {
                "type": "array",
                "items": {}
              },
              "ordersForCloseMultiple": {
                "type": "array",
                "items": {}
              }
            }
          }
        }
      },
      "DemoTradeHistoryResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "netProfit": {
                  "type": "number"
                },
                "closeRate": {
                  "type": "number"
                },
                "closeTimestamp": {
                  "type": "string"
                },
                "positionId": {
                  "type": "integer"
                },
                "instrumentId": {
                  "type": "integer"
                },
                "isBuy": {
                  "type": "boolean"
                },
                "leverage": {
                  "type": "integer"
                },
                "openRate": {
                  "type": "number"
                },
                "openTimestamp": {
                  "type": "string"
                },
                "stopLossRate": {
                  "type": "integer"
                },
                "takeProfitRate": {
                  "type": "integer"
                },
                "trailingStopLoss": {
                  "type": "boolean"
                },
                "orderId": {
                  "type": "integer"
                },
                "socialTradeId": {
                  "type": "integer"
                },
                "parentPositionId": {
                  "type": "integer"
                },
                "investment": {
                  "type": "integer"
                },
                "initialInvestment": {
                  "type": "integer"
                },
                "fees": {
                  "type": "integer"
                },
                "units": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "RealTradeHistoryResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "netProfit": {
                  "type": "number"
                },
                "closeRate": {
                  "type": "number"
                },
                "closeTimestamp": {
                  "type": "string"
                },
                "positionId": {
                  "type": "integer"
                },
                "instrumentId": {
                  "type": "integer"
                },
                "isBuy": {
                  "type": "boolean"
                },
                "leverage": {
                  "type": "integer"
                },
                "openRate": {
                  "type": "number"
                },
                "openTimestamp": {
                  "type": "string"
                },
                "stopLossRate": {
                  "type": "integer"
                },
                "takeProfitRate": {
                  "type": "integer"
                },
                "trailingStopLoss": {
                  "type": "boolean"
                },
                "orderId": {
                  "type": "integer"
                },
                "socialTradeId": {
                  "type": "integer"
                },
                "parentPositionId": {
                  "type": "integer"
                },
                "investment": {
                  "type": "integer"
                },
                "initialInvestment": {
                  "type": "integer"
                },
                "fees": {
                  "type": "integer"
                },
                "units": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "UserInfoPeopleResponse": {
        "type": "object",
        "properties": {
          "users": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "gcid": {
                  "type": "integer"
                },
                "realCID": {
                  "type": "integer"
                },
                "demoCID": {
                  "type": "integer"
                },
                "username": {
                  "type": "string"
                },
                "language": {
                  "type": "integer"
                },
                "languageIsoCode": {
                  "type": "string"
                },
                "country": {
                  "type": "integer"
                },
                "allowDisplayFullName": {
                  "type": "boolean"
                },
                "isVerified": {
                  "type": "boolean"
                },
                "verificationLevel": {
                  "type": "integer"
                },
                "accountStatus": {
                  "type": "integer"
                },
                "isPi": {
                  "type": "boolean"
                },
                "optOut": {
                  "type": "boolean"
                },
                "avatars": {
                  "type": "array",
                  "items": {}
                }
              }
            }
          }
        }
      },
      "GetWatchlistsResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer"
          },
          "watchlists": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "watchlistId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "Gcid": {
                  "type": "integer"
                },
                "watchlistType": {
                  "type": "string"
                },
                "totalItems": {
                  "type": "integer"
                },
                "isDefault": {
                  "type": "boolean"
                },
                "isUserSelectedDefault": {
                  "type": "boolean"
                },
                "watchlistRank": {
                  "type": "integer"
                },
                "dynamicUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "itemId": {
                        "type": "integer"
                      },
                      "itemType": {
                        "type": "string"
                      },
                      "itemRank": {
                        "type": "integer"
                      },
                      "itemAddedReason": {
                        "type": "string"
                      },
                      "itemAddedDate": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "meta": {
            "type": "object",
            "properties": {
              "pageNumber": {
                "type": "integer"
              },
              "itemsPerPage": {
                "type": "integer"
              },
              "maxItemsInWatchlistLimit": {
                "type": "integer"
              },
              "maxWatchlistsLimit": {
                "type": "integer"
              }
            }
          },
          "isSucceeded": {
            "type": "boolean"
          }
        }
      },
      "CreateWatchlistResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer"
          },
          "watchlists": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "watchlistId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "watchlistType": {
                  "type": "string"
                },
                "totalItems": {
                  "type": "integer"
                },
                "isDefault": {
                  "type": "boolean"
                },
                "isUserSelectedDefault": {
                  "type": "boolean"
                },
                "watchlistRank": {
                  "type": "integer"
                },
                "items": {
                  "type": "array",
                  "items": {}
                }
              }
            }
          },
          "isSucceeded": {
            "type": "boolean"
          }
        }
      },
      "AddWatchlistItemsResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer"
          }
        }
      },
      "DemoEditSlTpResponse": {
        "type": "object",
        "properties": {
          "operationId": {
            "type": "string"
          },
          "positionId": {
            "type": "integer"
          },
          "referenceId": {
            "type": "string"
          }
        }
      },
      "DemoCreateOrderResponse": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "orderId": {
            "type": "integer"
          },
          "referenceId": {
            "type": "string"
          }
        }
      },
      "DemoCancelOrderResponse": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          }
        }
      },
      "DemoOrderLookupResponse": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "integer"
          },
          "gcid": {
            "type": "integer"
          },
          "portfolioId": {
            "type": "integer"
          },
          "orderId": {
            "type": "integer"
          },
          "action": {
            "type": "string"
          },
          "transaction": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "etoroOrderTypeId": {
            "type": "integer"
          },
          "status": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "errorCode": {
                "type": "integer"
              },
              "errorMessage": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "asset": {
            "type": "object",
            "properties": {
              "symbol": {
                "type": "string"
              },
              "instrumentId": {
                "type": "integer"
              },
              "currency": {
                "type": "string"
              },
              "settlementType": {
                "type": "string"
              },
              "leverage": {
                "type": "integer"
              },
              "side": {
                "type": "string"
              }
            }
          },
          "orderCurrency": {
            "type": "string"
          },
          "requestedAmount": {
            "type": "integer"
          },
          "requestedUnits": {
            "type": [
              "string",
              "null"
            ]
          },
          "totalCosts": {
            "type": "integer"
          },
          "positionExecutions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "positionId": {
                  "type": "integer"
                },
                "state": {
                  "type": "string"
                },
                "investedAmountCurrency": {
                  "type": "integer"
                },
                "remainingUnits": {
                  "type": "integer"
                },
                "openingData": {
                  "type": "object",
                  "properties": {
                    "openTime": {
                      "type": "string"
                    },
                    "orderId": {
                      "type": "integer"
                    },
                    "executionTime": {
                      "type": "string"
                    },
                    "units": {
                      "type": "integer"
                    },
                    "avgPrice": {
                      "type": "number"
                    },
                    "fees": {
                      "type": "integer"
                    },
                    "taxes": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "requestTime": {
            "type": "string"
          },
          "lastUpdate": {
            "type": "string"
          },
          "requestType": {
            "type": "string"
          }
        }
      }
    },
    "responses": {
      "TooManyRequests": {
        "description": "429 Too many requests. The shared rate limit for this endpoint group was exceeded; wait for the seconds in Retry-After.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying. Source: https://api-portal.etoro.com/getting-started/rate-limits (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          },
          "RateLimit-Limit": {
            "description": "Quota for this endpoint group. Source: https://api-portal.etoro.com/getting-started/rate-limits (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          },
          "RateLimit-Remaining": {
            "description": "Requests left in the window; read it and slow down before the quota runs out. Source: https://api-portal.etoro.com/getting-started/rate-limits (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          },
          "RateLimit-Reset": {
            "description": "When the window resets. Source: https://api-portal.etoro.com/getting-started/rate-limits (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          },
          "RateLimit-Policy": {
            "description": "The policy the quota comes from. Source: https://api-portal.etoro.com/getting-started/rate-limits (checked 2026-09-18).",
            "schema": {
              "type": "string"
            }
          }
        }
      },
      "BadRequest": {
        "description": "400 Bad request. Validation failed, for example a missing or malformed minDate or too many instrument IDs.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotFound": {
        "description": "404 Not found. The order, position or username was not found; eToro also uses it for some upstream or validation failures.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unauthorised": {
        "description": "401 Unauthorised. Authentication is missing or invalid.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "403 Forbidden. The key or token lacks the permission this call needs.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Conflict": {
        "description": "409 Conflict. The position is closed and cannot be edited.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "ServerError": {
        "description": "500 Server error. An internal error on eToro's side.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "x-api-key": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "A header the eToro endpoint records list on requests. Read its value from your own environment. Never paste it into a web page or a chat."
      },
      "x-user-key": {
        "type": "apiKey",
        "in": "header",
        "name": "x-user-key",
        "description": "A header the eToro endpoint records list on requests. Read its value from your own environment. Never paste it into a web page or a chat."
      }
    }
  }
}