---
title: "Create an order"
method: POST
path: "/api/v2/trading/execution/demo/orders"
tags: ["Trading - Demo"]
---

# Create an order

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

**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/demo/limit-orders/{orderId}`
- `DELETE /api/v1/trading/execution/demo/market-close-orders/{orderId}`
- `DELETE /api/v1/trading/execution/demo/market-open-orders/{orderId}`
- `DELETE /api/v2/trading/execution/demo/orders/{orderId}`
- `POST /api/v1/trading/execution/demo/limit-orders`
- `POST /api/v1/trading/execution/demo/market-close-orders/positions/{positionId}`
- `POST /api/v1/trading/execution/demo/market-open-orders/by-amount`
- `POST /api/v1/trading/execution/demo/market-open-orders/by-units`

---

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 unique X-Request-Id header (GUID) is required for idempotency. Currently only orders to open a position are supported.

## Headers

- `x-request-id` string, uuid, required
- `x-api-key` string, password, required
- `x-user-key` string, password, required

## Request body

- UnifiedOrderRequest — Request payload for creating an order to open or close a position.
  - `action` 'open' | 'close', required — The order action type. Possible values: open, close.
  - `transaction` 'buy' | 'sell' | 'sellShort' | 'buyToCover', required — The transaction direction. Possible values: buy, sell, sellShort, buyToCover.
  - `symbol` string, nullable — The asset ticker symbol. For open orders provide exactly one of symbol or instrumentId - providing both is rejected.
  - `instrumentId` integer, nullable — The eToro instrument identifier. For open orders provide exactly one of symbol or instrumentId - providing both is rejected.
  - `settlementType` 'cfd' | 'real' | 'realFutures' | 'marginTrade', nullable — The settlement type. Possible values: cfd, real, realFutures, marginTrade. Required for open orders.
  - `orderType` 'mkt' | 'mit' — The order execution type. Possible values: mkt (market), mit (market if touched).
  - `triggerRate` number, double, nullable — The trigger rate for mit orders. Required for mit orders.
  - `leverage` integer, nullable — The leverage multiplier to apply. Required for open orders.
  - `amount` number, double, nullable — The monetary amount to invest in the order currency. Mutually exclusive with units and contracts.
  - `orderCurrency` string, nullable — The currency for the order amount. Typically usd.
  - `units` number, double, nullable — The number of units to trade. Mutually exclusive with amount and contracts.
  - `contracts` number, double, nullable — The number of contracts to trade. Mutually exclusive with amount and units.
  - `stopLossRate` number, double, nullable — The stop-loss rate at which the position will automatically close.
  - `takeProfitRate` number, double, nullable — The take-profit rate at which the position will automatically close.
  - `stopLossType` 'fixed' | 'trailing', nullable — The stop-loss type. Possible values: fixed, trailing.
  - `additionalMargin` number, double, nullable — Additional margin to allocate to the position.
  - `positionIds` integer[], nullable — List of position IDs to close. Required for close orders.

## Response `200`

Order submitted successfully. Returns the created order details.

- UnifiedOrderResponse — Response payload after successfully submitting an order.
  - `token` string, uuid — A tracking token for the order request, used for correlation and debugging.
  - `orderId` integer — The unique identifier of the created order.
  - `referenceId` string, uuid — The client reference identifier for the order, matching the X-Request-Id header if provided.

## Other responses

- `400` — Invalid request. Validation failed.
- `401` — Unauthorized. Invalid or missing authentication.
- `404` — Resource not found.
- `429` — Too Many Requests — the shared rate limit (20 requests / 60s) was exceeded.
- `500` — Internal server error.

---

[API](https://skmtc.dev/etoro/apis/etoro-api.md) · [All operations](https://skmtc.dev/etoro/apis/etoro-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/etoro/etoro-api/revisions/69c1fb266c35/schema)
