> ## Documentation Index
> Fetch the complete documentation index at: https://api-portal.etoro.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit an order for asynchronous processing

> **Rate limit:** 20 requests per 60 seconds. This is a **shared quota** — the same budget is consumed by a group of related endpoints, so calling any of them reduces what is left for the others (you cannot call each at the full rate independently). Endpoints sharing this quota:
- `DELETE /api/v1/trading/execution/limit-orders/{orderId}`
- `DELETE /api/v1/trading/execution/market-close-orders/{orderId}`
- `DELETE /api/v1/trading/execution/market-open-orders/{orderId}`
- `DELETE /api/v2/trading/execution/orders/{orderId}`
- `DELETE /api/v3/trading/execution/orders/{orderId}`
- `POST /api/v1/trading/execution/limit-orders`
- `POST /api/v1/trading/execution/market-close-orders/positions/{positionId}`
- `POST /api/v1/trading/execution/market-open-orders/by-amount`
- `POST /api/v1/trading/execution/market-open-orders/by-units`
- `POST /api/v2/trading/execution/orders`

---

This endpoint allows traders to place an order. Leverage, stop-loss, and take-profit settings can be applied. Order size must use exactly one of amount, units, or contracts. For open orders the instrument must be identified by exactly one of symbol or instrumentId - providing both is rejected. A stopLossRate is required when leverage is greater than 1, when transaction is sellShort, when settlementType is realFutures, or when stopLossType is trailing. Only the buy and sellShort transactions are currently supported. A unique X-Request-Id header (GUID) is required for idempotency. Currently only orders to open a position are supported. On this v3 create path, settlementType is mandatory for non-MIT orders and must be omitted for MIT orders. A 202 response means the order was accepted for processing, not that it was executed. Confirm the outcome with GET /api/v2/trading/info/orders:lookup, passing the returned orderId - or referenceId, which echoes your X-Request-Id and is the only handle you have if this response is lost. In that response, status.id 3 (Filled) and 5 (PartiallyFilled) mean the order executed; 4 (Rejected) and 10 (RejectedPartiallyFilled) carry the reason in status.errorCode and status.errorMessage; 1 (Received), 2 (Placed), 11 (WaitingForMarket) and 12 (PendingTriggeredRate) are still in flight and should be polled again. positionExecutions lists the positionId values the order produced.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v3/trading/execution/orders
openapi: 3.0.1
info:
  title: eToro Api
  version: v1.375.0
  description: >-
    eToro’s public API provides access to real-time financial data, trading
    insights, and account management features, allowing developers to integrate
    eToro’s services into their applications. With access to market prices,
    historical data, and social trading information, the API empowers users to
    enhance their trading strategies. Designed for security and scalability, the
    eToro API ensures smooth and reliable integration for a variety of financial
    applications.


    For more details on integrating with eToro's public WebSocket service,
    please refer to the dedicated [WebSocket
    documentation](./websocket/websocket-doc.html).


    ## Authentication


    Every request must be authenticated with exactly one of two options: an
    OAuth 2.0 access token (`Authorization: Bearer <token>`), or the
    non-interactive credential pair (`x-api-key` + `x-user-key` headers). The
    two options are mutually exclusive — a request carrying both is rejected.
    Each operation lists the OAuth scopes that grant access as alternative
    security requirements: a bearer token needs only ONE of them, and the same
    permissions govern the credential pair.
servers:
  - url: https://public-api.etoro.com
    description: eToro Public API
security:
  - apiKeyAuth: []
    userKeyAuth: []
  - oauth2: []
tags:
  - name: Agent Portfolios
  - name: Social Feeds
  - name: Balances
  - name: Clubs
  - name: Watchlists
  - name: Data
  - name: Top Assets
  - name: App Data
  - name: Market Data
  - name: Identity
  - name: Cash Accounts
  - name: Transfer
  - name: Notifications
  - name: PI Data
  - name: PortfolioSearch
  - name: Price Alerts
  - name: SSO - Applications
  - name: SSO - Scopes
  - name: Sub-Accounts - eToro Trading
  - name: Sub-Accounts
  - name: Trading - Demo
  - name: Trading - Real
  - name: Users Info
  - name: Rankings
  - name: User Stats
  - name: Copy Trading
  - name: Copy Trading - Demo
paths:
  /api/v3/trading/execution/orders:
    post:
      tags:
        - Trading - Real
      summary: Submit an order for asynchronous processing
      description: >-
        **Rate limit:** 20 requests per 60 seconds. This is a **shared quota** —
        the same budget is consumed by a group of related endpoints, so calling
        any of them reduces what is left for the others (you cannot call each at
        the full rate independently). Endpoints sharing this quota:

        - `DELETE /api/v1/trading/execution/limit-orders/{orderId}`

        - `DELETE /api/v1/trading/execution/market-close-orders/{orderId}`

        - `DELETE /api/v1/trading/execution/market-open-orders/{orderId}`

        - `DELETE /api/v2/trading/execution/orders/{orderId}`

        - `DELETE /api/v3/trading/execution/orders/{orderId}`

        - `POST /api/v1/trading/execution/limit-orders`

        - `POST
        /api/v1/trading/execution/market-close-orders/positions/{positionId}`

        - `POST /api/v1/trading/execution/market-open-orders/by-amount`

        - `POST /api/v1/trading/execution/market-open-orders/by-units`

        - `POST /api/v2/trading/execution/orders`


        ---


        This endpoint allows traders to place an order. Leverage, stop-loss, and
        take-profit settings can be applied. Order size must use exactly one of
        amount, units, or contracts. For open orders the instrument must be
        identified by exactly one of symbol or instrumentId - providing both is
        rejected. A stopLossRate is required when leverage is greater than 1,
        when transaction is sellShort, when settlementType is realFutures, or
        when stopLossType is trailing. Only the buy and sellShort transactions
        are currently supported. A unique X-Request-Id header (GUID) is required
        for idempotency. Currently only orders to open a position are supported.
        On this v3 create path, settlementType is mandatory for non-MIT orders
        and must be omitted for MIT orders. A 202 response means the order was
        accepted for processing, not that it was executed. Confirm the outcome
        with GET /api/v2/trading/info/orders:lookup, passing the returned
        orderId - or referenceId, which echoes your X-Request-Id and is the only
        handle you have if this response is lost. In that response, status.id 3
        (Filled) and 5 (PartiallyFilled) mean the order executed; 4 (Rejected)
        and 10 (RejectedPartiallyFilled) carry the reason in status.errorCode
        and status.errorMessage; 1 (Received), 2 (Placed), 11 (WaitingForMarket)
        and 12 (PendingTriggeredRate) are still in flight and should be polled
        again. positionExecutions lists the positionId values the order
        produced.
      operationId: createTradingExecutionOrdersV3
      parameters:
        - name: x-request-id
          in: header
          required: true
          schema:
            type: string
            format: uuid
            example: f13b11e7-a75d-4633-9b58-9e999a616508
          description: A unique request identifier.
          example: f13b11e7-a75d-4633-9b58-9e999a616508
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TradingRealAdminApi_UnifiedOrderRequest'
            example:
              action: open
              transaction: buy
              symbol: null
              instrumentId: 101
              settlementType: cfd
              orderType: mkt
              triggerRate: null
              leverage: 2
              amount: 1000
              orderCurrency: usd
              units: null
              contracts: null
              stopLossRate: 1.2
              takeProfitRate: 1.5
              stopLossType: fixed
              additionalMargin: null
              positionIds: null
      responses:
        '202':
          description: >-
            Order accepted and queued for asynchronous processing. Returns the
            created order details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnifiedOrderResponse'
              example:
                token: 066faaee-e1e9-49d2-a568-c6e1cc336ad8
                orderId: 13902598
                referenceId: 1c94300c-90aa-4303-9d00-dec376d74efb
          headers:
            RateLimit-Limit:
              description: >-
                Maximum number of requests allowed per window. This budget is
                SHARED across 11 endpoints (it is NOT per-endpoint): a request
                to any endpoint in the group spends the same budget. See this
                operation's description for the full list of endpoints sharing
                it.
              schema:
                type: integer
              example: 20
            RateLimit-Remaining:
              description: Requests remaining in the current window for this quota.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the current window resets.
              schema:
                type: integer
            RateLimit-Policy:
              description: Quota policy in the form `<limit>;w=<window-seconds>`.
              schema:
                type: string
              example: 20;w=60
        '400':
          description: Invalid request. Validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized. Invalid or missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden. Authenticated caller does not have a permitted scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '429':
          description: >-
            Too Many Requests — the shared rate limit (20 requests / 60s) was
            exceeded.
          headers:
            RateLimit-Limit:
              description: >-
                Maximum number of requests allowed per window. This budget is
                SHARED across 11 endpoints (it is NOT per-endpoint): a request
                to any endpoint in the group spends the same budget. See this
                operation's description for the full list of endpoints sharing
                it.
              schema:
                type: integer
              example: 20
            RateLimit-Remaining:
              description: Requests remaining in the current window for this quota.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the current window resets.
              schema:
                type: integer
            RateLimit-Policy:
              description: Quota policy in the form `<limit>;w=<window-seconds>`.
              schema:
                type: string
              example: 20;w=60
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
              example: 60
        '500':
          description: Internal server error.
      security:
        - apiKeyAuth: []
          userKeyAuth: []
        - oauth2:
            - etoro-public:real:write
        - oauth2:
            - etoro-public:trade.real:write
components:
  schemas:
    TradingRealAdminApi_UnifiedOrderRequest:
      type: object
      description: Request payload for creating an order to open or close a position.
      required:
        - action
        - transaction
      properties:
        action:
          type: string
          description: >-
            The order action whether to open or close a position. Currently only
            `open` is supported in this endpoint.
          enum:
            - open
            - close
          example: open
        transaction:
          type: string
          description: >-
            The transaction direction: `buy` opens a long position, `sell`
            closes a long position, `sellShort` opens a short position, and
            `buyToCover` closes a short position. Currently only `buy` and
            `sellShort` are supported; `sell` and `buyToCover` are rejected and
            will be enabled in a future release alongside the `close` action.
          enum:
            - buy
            - sell
            - sellShort
            - buyToCover
          example: buy
        symbol:
          type: string
          description: >-
            The asset ticker symbol. For open orders provide exactly one of
            symbol or instrumentId - providing both is rejected.
          nullable: true
          example: AAPL
        instrumentId:
          type: integer
          format: int32
          description: >-
            The eToro instrument identifier. For open orders provide exactly one
            of symbol or instrumentId - providing both is rejected.
          nullable: true
          example: 101
        settlementType:
          type: string
          description: >-
            The settlement type. Possible values: cfd, real, realFutures,
            marginTrade. Version rules: on Public API v2 create (`POST
            /api/v2/trading/execution/orders`, Admin v1) settlementType remains
            optional. On Public API v3 create (`POST
            /api/v3/trading/execution/orders`, Admin v2) it must NOT be set for
            MIT orders (the platform resolves it), and for all other order types
            it must be set to an eligible settlement type. A mismatch is
            rejected during execution after the order has already been accepted
            with an order id. The valid values differ per instrument, direction
            and leverage - call `POST /api/v2/trading/info/eligibility` and read
            `leverageConfigs[].settlementType` for the relevant combinations of
            `direction`, `leverage` and `settlementType` before supplying them;
            that configuration changes rarely, so one call can be cached and
            reused for the whole session. `real` - the real instrument held in
            full value. `realFutures` - the real future contract, which is a
            derivative of an underlying instrument. Each future contract usually
            maintains a different number of underlying instrument units than 1.
            The number of units held in a single future contract is called the
            multiplier, which can be bigger, lower, or equal to 1. `marginTrade`
            - the real instrument held with only a portion of its value called
            margin (leveraged asset). `cfd` - contract for difference, which is
            a derivative following the underlying instrument.
          nullable: true
          enum:
            - cfd
            - real
            - realFutures
            - marginTrade
        orderType:
          type: string
          description: >-
            The order execution type. Possible values: mkt (market), mit (market
            if touched), limitIOC. `mkt` - a market order that executes at the
            available market price. `mit` - a market-if-touched order that waits
            until the triggerRate or better is published in the market feed and
            then executes at the market price at that time. `limitIOC` - an
            immediate limit order that executes now at the limitRate or better
            if such a rate is available at the market, or gets cancelled
            immediately if no such rate is available now. `mit` is not supported
            when settlementType is realFutures.
          enum:
            - mkt
            - mit
            - limitIOC
          example: mkt
        triggerRate:
          type: number
          format: double
          nullable: true
          description: >-
            The trigger rate for mit orders. Required for mit orders, and must
            be greater than zero. Must not be provided for mkt or limitIOC
            orders - supplying it is rejected.
        leverage:
          type: integer
          format: int32
          description: >-
            The leverage multiplier to apply. Optional - defaults to 1 (no
            leverage) when omitted, and must be 1 or greater. Any value greater
            than 1 requires stopLossRate.
          nullable: true
          example: 2
        amount:
          type: number
          format: double
          nullable: true
          description: >-
            The monetary amount to invest in the order currency. Mutually
            exclusive with units and contracts. Must be greater than 0.
          example: 1000
        orderCurrency:
          type: string
          description: >-
            The currency for the order amount. Typically usd. Only USD is
            currently supported.
          nullable: true
          example: usd
        units:
          type: number
          format: double
          nullable: true
          description: >-
            The number of units to trade. Mutually exclusive with amount and
            contracts. Must be greater than 0.
        contracts:
          type: number
          format: double
          nullable: true
          description: >-
            The number of contracts to trade, used for real futures instead of
            units. Mutually exclusive with amount and units. Only accepted when
            settlementType is realFutures, and must be a whole number greater
            than 0.
        stopLossRate:
          type: number
          format: double
          nullable: true
          description: >-
            The stop-loss rate at which the position will automatically close.
            Required when leverage is greater than 1, when transaction is
            sellShort, when settlementType is realFutures, or when stopLossType
            is trailing. Optional otherwise, and must be 0 or greater.
          example: 1.2
        takeProfitRate:
          type: number
          format: double
          nullable: true
          description: >-
            The take-profit rate at which the position will automatically close.
            Must be 0 or greater.
          example: 1.5
        stopLossType:
          type: string
          nullable: true
          description: >-
            The stop-loss type. Possible values: fixed, trailing. The default is
            `fixed`. `fixed` - the stop-loss rate does not change. `trailing` -
            the stop-loss rate moves up whenever the instrument rate goes up
            such that the stop loss is triggered from the same distance from the
            last peak rate as the distance of the stop-loss rate from the rate
            at the open. Setting `trailing` requires stopLossRate.
          enum:
            - fixed
            - trailing
          example: fixed
        additionalMargin:
          type: number
          format: double
          nullable: true
          description: >-
            Additional funds in the order currency added to the invested amount
            (margin), if the desire is for the stop-loss rate to be set lower
            than normally permitted. Only accepted when settlementType is
            realFutures - supplying it for any other settlement type is
            rejected. Must be greater than 0.
        limitRate:
          type: number
          format: double
          nullable: true
          description: >-
            LimitRate should be set for LimitIOC orders only, where it is
            required and must be greater than zero; supplying it for any other
            order type is rejected. it is the client submitted price which will
            be routed to the exchange for execution. Please note that a client
            submitted price cannot exceed a 10% deviation from current market
            price otherwise it will be rejected on pre trade
          example: 1.5
        positionIds:
          type: array
          items:
            type: integer
            format: int64
          nullable: true
          description: >-
            List of position IDs to close. Reserved for the close action, which
            is not supported yet - supplying any value is currently rejected.
    UnifiedOrderResponse:
      type: object
      description: Response payload after successfully submitting an order.
      properties:
        token:
          type: string
          format: uuid
          description: >-
            A tracking token for the order request, used for correlation and
            debugging.
          example: 066faaee-e1e9-49d2-a568-c6e1cc336ad8
        orderId:
          type: integer
          format: int64
          description: The unique identifier of the created order.
          example: 13902598
        referenceId:
          type: string
          format: uuid
          description: >-
            The client reference identifier for the order, matching the
            X-Request-Id header if provided.
          example: 1c94300c-90aa-4303-9d00-dec376d74efb
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key of the application. Only valid together with the x-user-key
        header — the pair is an alternative to OAuth bearer authentication,
        never sent alongside it. The pair is granted the same permissions the
        operation's OAuth scopes describe.


        Demo credential for trying the API from these docs:
        `lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663`
      x-default: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
    userKeyAuth:
      type: apiKey
      in: header
      name: x-user-key
      description: >-
        User-specific authentication key. Only valid together with the x-api-key
        header — the pair is an alternative to OAuth bearer authentication,
        never sent alongside it.


        Demo credential for trying the API from these docs:
        `eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_`
      x-default: >-
        eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
    oauth2:
      type: oauth2
      description: >-
        eToro OAuth2 — send the access token as `Authorization: Bearer <token>`.
        Each operation lists the scopes that grant access as separate `security`
        requirements (OpenAPI OR semantics): the caller's token only needs ONE
        of them — you do NOT need all of them. Mutually exclusive with the
        x-api-key/x-user-key credential pair: never send both.
      flows:
        authorizationCode:
          authorizationUrl: https://www.etoro.com/sso
          tokenUrl: https://www.etoro.com/api/sso/v1/token
          scopes:
            etoro-public:agent-portfolio:read: Grants access to the 'etoro-public:agent-portfolio:read' scope.
            etoro-public:agent-portfolio:write: Grants access to the 'etoro-public:agent-portfolio:write' scope.
            etoro-public:club:read: Grants access to the 'etoro-public:club:read' scope.
            etoro-public:demo:read: Grants access to the 'etoro-public:demo:read' scope.
            etoro-public:demo:write: Grants access to the 'etoro-public:demo:write' scope.
            etoro-public:feed:read: Grants access to the 'etoro-public:feed:read' scope.
            etoro-public:feed:write: Grants access to the 'etoro-public:feed:write' scope.
            etoro-public:market-data:read: Grants access to the 'etoro-public:market-data:read' scope.
            etoro-public:money.balance:read: Grants access to the 'etoro-public:money.balance:read' scope.
            etoro-public:money.cash-transactions:read: >-
              Grants access to the 'etoro-public:money.cash-transactions:read'
              scope.
            etoro-public:money.transfer:read: Grants access to the 'etoro-public:money.transfer:read' scope.
            etoro-public:money.transfer:write: Grants access to the 'etoro-public:money.transfer:write' scope.
            etoro-public:money:transfer: Grants access to the 'etoro-public:money:transfer' scope.
            etoro-public:notifications:read: Grants access to the 'etoro-public:notifications:read' scope.
            etoro-public:notifications:write: Grants access to the 'etoro-public:notifications:write' scope.
            etoro-public:pi-data:read: Grants access to the 'etoro-public:pi-data:read' scope.
            etoro-public:price-alerts:read: Grants access to the 'etoro-public:price-alerts:read' scope.
            etoro-public:price-alerts:write: Grants access to the 'etoro-public:price-alerts:write' scope.
            etoro-public:real:read: Grants access to the 'etoro-public:real:read' scope.
            etoro-public:real:write: Grants access to the 'etoro-public:real:write' scope.
            etoro-public:sso-applications:read: Grants access to the 'etoro-public:sso-applications:read' scope.
            etoro-public:sso-applications:write: Grants access to the 'etoro-public:sso-applications:write' scope.
            etoro-public:sso-scopes:read: Grants access to the 'etoro-public:sso-scopes:read' scope.
            etoro-public:sso-scopes:write: Grants access to the 'etoro-public:sso-scopes:write' scope.
            etoro-public:sub-accounts:read: Grants access to the 'etoro-public:sub-accounts:read' scope.
            etoro-public:sub-accounts:write: Grants access to the 'etoro-public:sub-accounts:write' scope.
            etoro-public:trade.demo:read: Grants access to the 'etoro-public:trade.demo:read' scope.
            etoro-public:trade.demo:write: Grants access to the 'etoro-public:trade.demo:write' scope.
            etoro-public:trade.real:read: Grants access to the 'etoro-public:trade.real:read' scope.
            etoro-public:trade.real:write: Grants access to the 'etoro-public:trade.real:write' scope.
            etoro-public:user-info:read: Grants access to the 'etoro-public:user-info:read' scope.
            etoro-public:watchlist:read: Grants access to the 'etoro-public:watchlist:read' scope.
            etoro-public:watchlist:write: Grants access to the 'etoro-public:watchlist:write' scope.

````