Place Order
Place an order.
Available to: All authenticated users
Environments: Demo, Live
Rate Limit: 1,500 requests per hour, 1-second back-off, counts all requests
Places an order on one of your accounts. Identify the account with either accountSpec (the account name) or accountId (the integer ID) — one is required — and set the action (Buy or Sell), the symbol, the orderQty, and the orderType. The price fields you must supply depend on the order type: a Limit or Stop order needs a price, and a StopLimit needs both price and stopPrice. On success, the response includes the new orderId.
// Demo environment; for Live use https://live.tradovateapi.com/v1
const URL = 'https://demo.tradovateapi.com/v1'
const body = {
accountSpec: yourUserName,
accountId: yourAccountId,
action: "Buy",
symbol: "MYMM1",
orderQty: 1,
orderType: "Market",
isAutomated: true
}
const result = await fetch(`${URL}/order/placeorder`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${myAccessToken}`
},
body: JSON.stringify(body)
}).then(res => res.json()) // { orderId } on success
<Warning>
Set `isAutomated` to `true` for any order placed by code or an automated process, and `false` only for an order a human places directly. Misreporting this can violate exchange policies.
</Warning>
Order placement is subject to market, exchange, and risk-management rules, so a successful HTTP response doesn't guarantee acceptance. When an order is rejected, the response carries a failureReason and failureText explaining why; otherwise you receive an orderId.
Common Failure Scenarios
- A risk limit blocks the order (for example, MaxPosLimitReached or MaxOrderQtyLimitReached).
- The contract or price is invalid (InvalidContract, InvalidPrice).
- The trading session is closed or trading is locked (SessionClosed, TradingLocked).
- The market has no quote or insufficient liquidity (NoQuote, NotEnoughLiquidity).
Error Messages
| failureReason | Trigger |
|---|---|
| MaxPosLimitReached | The order would exceed the account's position limit. |
| MaxOrderQtyLimitReached | The order quantity exceeds the account's maximum order size. |
| InvalidContract | The symbol doesn't resolve to a tradable contract. |
| InvalidPrice | The price is missing or invalid for the order type. |
| SessionClosed | The trading session is closed. |
| Unauthorized | The user isn't permitted to trade this account or contract. |
See the failureReason enum in the response schema for the complete list of values.
Request
- Base URL: https://demo.tradovateapi.com/v1
- URL: https://demo.tradovateapi.com/v1/order/placeorder
- Auth: HTTP bearer
Request body
Response
PlaceOrderResult
Changes
No recorded changes to this operation across all 1 revision of this API.