Place Orders via the Tradovate API
Want to fire an order into Tradovate straight from your own code? Here's how to build the /order/placeOrder request end to end, including the isAutomated flag that trips up a lot of people the first time.
Want to fire an order into Tradovate straight from your own code? Maybe you're building a trading bot, scripting a strategy, or wiring up automation like PickMyTrade. Either way, it comes down to one REST call: /order/placeOrder. Here's how to build that request end to end, including the isAutomated flag that trips up a lot of people the first time.
What Is the Tradovate placeOrder Endpoint?
/order/placeOrder is the Tradovate REST endpoint that submits a new order to the exchange from your code instead of the platform UI. You hand it a small JSON payload, the account, the contract, the side, the quantity, and the order type, over an authenticated HTTPS request, and Tradovate hands back the resulting order ID or a failure reason. Every API-driven entry, exit, and bracket is built on this one call.
Placing an Order via the Tradovate API: Step by Step
Authenticate and Get an Access Token
You can't place anything without a bearer token first. POST your credentials and app details to /auth/accessTokenRequest, and the response hands you an accessToken that you'll attach to every call after this. Tokens expire after a set window, so renew yours through /auth/renewAccessToken before it lapses, that's faster and cleaner than re-authenticating from scratch.
Find Your accountId and accountSpec
Every order needs two account identifiers: the numeric accountId and the string accountSpec (your account's name/spec). Call GET /account/list with your bearer token and pull both fields off the account you want to trade. Get either one wrong and Tradovate throws an "Access is denied" error instead of a fill.
Build the placeOrder Payload
Now assemble the JSON body. A basic market order needs six fields plus the compliance flag:
Set isAutomated Correctly, Then Send
The isAutomated boolean tells the exchange who actually pulled the trigger. If a human clicks a button in your UI, it's false (the default). If a bot, an algorithm, or any impersonal process fires the order, you must set isAutomated: true. This is a hard CME compliance requirement, not an optional nicety. Once the payload is right, POST it to /order/placeOrder on the correct host, demo.tradovateapi.com/v1 for simulation or live.tradovateapi.com/v1 for real money, with your token in the Authorization: Bearer header.
Confirm the Order or Read the Failure Reason
Here's the part people miss: a 200 OK means the request was accepted, not that the order filled. Margin, risk limits, or a closed market can still stop it cold. So read the response body, a success returns an orderId, while a rejection returns a failureReason and failureText you can log and act on. Then cross-check the fill in the Tradovate Orders panel so you're never trusting the status code alone.


{"accountSpec": "YOUR_ACCOUNT_NAME","accountId": 123456,"action": "Buy","symbol": "MESM6","orderQty": 1,"orderType": "Market","isAutomated": true}
-
actionisBuyorSell;orderTypeacceptsMarket,Limit,Stop, orStopLimit. - A
Limitorder also needs aprice; aStoporder needs astopPrice. Add an optionaltimeInForce(sayDay,GTC,IOC, orFOK) whenever you don't want the default. - Use the current front-month contract symbol, expired or continuous symbols get rejected.



Why You'd Need This
- Trading bots, turn a strategy's signals into live entries and exits with zero manual clicking.
- Custom risk tooling, flatten or hedge positions automatically the moment your own rules trip.
- Bridging platforms, route alerts from TradingView, Python, or a spreadsheet straight into Tradovate.
- Backtest-to-live handoff, reuse the exact order logic you tested, now firing real orders.
Automate This With PickMyTrade
Don't feel like managing tokens, account IDs, the isAutomated flag, and rate limits yourself? PickMyTrade links your TradingView alerts straight to your Tradovate account, so orders fire automatically, correctly formatted and compliance-flagged, without you writing a single line of API code.
Skip the Order Plumbing
Let PickMyTrade link your TradingView alerts straight to your Tradovate account, so orders fire automatically without you writing API code.
Start Your Free 5-Day TrialFrequently Asked Questions
If a bot or any automated process triggers the order, yes, the exchange treats it as a compliance requirement. Only human-clicked orders should send false (the default).
Usually a wrong or missing accountId/accountSpec, a token that lacks order permissions, or hitting the demo host with live credentials (or the reverse). Pull both account fields from /account/list and confirm you're on the right base URL.
No. 200 OK only means Tradovate accepted the request. Check the body for an orderId (accepted) versus a failureReason (rejected for margin, risk, or market-closed reasons).
This guide is for educational and informational purposes only and is not financial, investment, or trading advice. Trading futures and other leveraged products carries a substantial risk of loss and is not suitable for every investor. PickMyTrade is an independent third-party automation platform and is not affiliated with, endorsed by, or sponsored by Tradovate, Inc. "Tradovate" and all related names, logos, and trademarks are the property of their respective owners. Platform features and steps change over time, so always confirm the current process in the official Tradovate platform and documentation before acting.