Tradovate API

Tradovate API: isAutomated Must Be True for Bots

Leave isAutomated at its default of false and every algorithmic order you send gets quietly mislabeled to CME as a human click. Here's what the flag does, why it exists, and how to set it correctly.

Reviewed by the PickMyTrade Trading Systems Team Last updated
· 7 min read
Tradovate placeOrder JSON request body in the API Explorer with the isAutomated field omitted, defaulting to false

Route orders to Tradovate from a bot, a webhook bridge, or a script, and one small field decides whether the exchange treats your fill as a clean automated order or an audit-trail violation: isAutomated. Leave it at its default of false and every algorithmic order you send gets quietly mislabeled to CME as a human click. Send it as the wrong data type and your request can bounce before it ever reaches the matching engine. In 2026, with CME's Manual/Automated indicator enforced on every single order, getting this one boolean right isn't optional, and it's one of the most common reasons developers watch their automated orders behave strangely or get flagged. Here's exactly what the flag does, why it exists, and how to set it so your bot trades rejection-free.

Quick Checklist for the isAutomated Flag

  • Bot, script, or webhook sending the order? Set isAutomated: true on every /order/placeOrder call.
  • Human clicking a button in your own UI? isAutomated stays false (the default).
  • Sending the value as the right type? The schema defines it as a boolean true, not the string "true", match what your HTTP client actually serializes.
  • Using a bracket/OSO strategy? Apply the flag to the parent order in placeOSO/placeOrderStrategy too, not just single orders.
  • Seeing odd rejections or "access denied"? Confirm the flag and its type before you blame auth, symbol, or risk settings.
  • Not sure who "owns" the order? If no human physically triggered it in real time, it's automated. Flag it.

What the isAutomated Flag Actually Means

isAutomated is a boolean field in Tradovate's placeOrder request body. It tells Tradovate, and, through Tradovate, the CME Globex matching engine, whether a live person physically initiated the order or whether software generated it. Omit the field and Tradovate treats it as false, which is correct only for an order a human placed by clicking in a front-end.

The moment an algorithm, a trading bot, a TradingView webhook, or any impersonal process generates the order, that default is wrong. The flag must be set for orders placed by an automated algorithm, as opposed to ones manually initiated by click. Setting isAutomated: true is how your request maps to the correct exchange designation.

This isn't a Tradovate preference, it's an exchange rule. Since June 5, 2011, CME Group has required every order entered into Globex to identify whether it was entered by manual or automated means, carried in FIX Tag 1028 (Manual Order Indicator). On October 8, 2012, that requirement was codified into each exchange's Rule 536.B. The allowed values are strict: manual orders submit Y, automated orders submit N, and no other values are permitted. Your isAutomated: true is what makes Tradovate stamp your order as automated (N) on the wire. Inaccurate submission of that indicator is an audit-trail violation that can result in disciplinary action under CME Rule 512.

Top Causes of a Missing or Wrong isAutomated Flag

1. The Field Is Simply Omitted

The most common cause is leaving isAutomated out of the payload entirely. Tradovate defaults it to false, so the request still succeeds, which is exactly why it's dangerous. Your bot's orders route to the exchange tagged as manual (Y), even though software generated them. Nothing errors, but every automated fill is now mislabeled in CME's audit trail.

2. The Value Is Sent as the Wrong Type

The Tradovate order schema documents isAutomated as a boolean. Some HTTP clients, form-encoded requests, or third-party wrappers serialize it as the string "true" instead of the JSON boolean true. Depending on how your stack builds the request body, a value the API can't parse as a boolean may be ignored (falling back to false) or cause the request to fail. Send the type your library actually serializes to JSON, a real boolean, unless your bridge documents otherwise.

3. The Flag Is Missing on Bracket / Strategy Orders

Developers often add isAutomated to single placeOrder calls but forget it on placeOSO and placeOrderStrategy (OSO/OCO bracket) requests. The parent order in a strategy is still an automated order and needs the flag. A bracket entry sent without it is the same violation as an unflagged single order.

4. A Human-vs-Bot Mix-Up in the Code Path

If the same code path handles both manual UI actions and automated signals, it's easy to hard-code one value for both. The flag has to reflect the true origin of each order at send time: true when a signal or algorithm fired it, false only when a person clicked.

Corrected Tradovate placeOrder JSON body with isAutomated set to the boolean true, highlighted in green, for a bot order

How to Fix the isAutomated Flag: Step-by-Step

1

Fixing the missing flag

Open the code that builds your /order/placeOrder request body. Add isAutomated alongside the other required fields, accountSpec, accountId, action, symbol, orderQty, and orderType. Set the value to true for any order your bot, script, or webhook generates. Leave it false only on orders a human triggers directly. Re-send a test order in the demo environment and confirm the response is a valid order id, not an error. A minimal automated placeOrder body looks like: { "accountSpec": "YourUserName", "accountId": 0, "action": "Buy", "symbol": "MESU6", "orderQty": 1, "orderType": "Market", "isAutomated": true }

2

Fixing the wrong data type

Inspect the raw JSON your client sends (log the request body or use your library's debug output). Confirm isAutomated appears as a bare boolean, "isAutomated": true, and not as a quoted string "isAutomated": "true". If your framework auto-quotes booleans, cast the value explicitly to a real boolean before serializing, or use the type your API wrapper documents. Re-test and verify the order is accepted. If you're using a bridge or third party, check their docs for the exact expected type, a few form-encoded integrations expect a string form, so confirm against your specific tooling before assuming.

3

Fixing bracket and strategy orders

Locate your placeOSO or placeOrderStrategy request builder. Add isAutomated: true to the entry/parent order of the strategy, exactly as you would for a single order. The attached stop and target legs inherit the strategy context, but the flag belongs on the order you submit. Send a test bracket in demo and confirm all legs appear in the Orders report as expected.

4

Confirming the order was accepted and correctly tagged

After sending, check the placeOrder response for a numeric orderId (success) rather than a failureReason. Open the Orders module or query /order/list and confirm the order shows as accepted/working, not rejected. For live accounts, watch the first few automated orders closely to make sure they route cleanly now that the flag is set.

Tradovate API Explorer schema reference for the placeOrder model showing isAutomated typed as a boolean fieldTradovate web platform Orders report showing an accepted, working automated order after isAutomated was set to true

Troubleshooting Table

Symptom What It Means Fix
isAutomated omitted from payloadDefaults to false; bot orders tagged manual (Tag 1028 = Y)Add isAutomated: true to every automated placeOrder
"isAutomated": "true" (string)Value may not parse as boolean; can be ignored or rejectedSend the JSON boolean true, not a quoted string
Flag missing on OSO/OCO parentBracket entry routes as an unflagged automated orderSet isAutomated: true on the strategy's parent order
Same code path for UI and botWrong origin reported per orderSet the flag per order based on true origin at send time
Order flagged / audit-trail concernCME Tag 1028 designation is inaccurateEnsure automated orders always report as automated (N)
Intermittent "access is denied" on placeOrderUsually auth/account/symbol, not the flag itselfFix auth and use the numeric account id; keep the flag correct too

Where PickMyTrade Fits

If maintaining the raw API contract by hand feels fragile, PickMyTrade links TradingView alerts straight to your Tradovate account and handles the order plumbing for you:

  • Correct Automation Tagging, orders generated from your alerts are submitted through the proper automated pathway, so the exchange designation is handled without hand-coding the flag.
  • Payload Validation, symbol, quantity, and order-type fields are validated before the order is sent, catching the mistakes that sit right next to isAutomated in the body.
  • Rate-Limit-Safe Routing, order flow is spaced out so bursts don't trip Tradovate's request limits.
  • Multi-Account Sync, the same validated order mirrors across your connected accounts instead of you re-implementing the payload for each one.

Trade Rejection-Free

Start your free 5-day trial, link alerts today and trade rejection-free.

Start Your Free 5-Day Trial

Frequently Asked Questions

It's a boolean in the placeOrder request body that reports whether a human or software generated the order. It maps to CME's FIX Tag 1028 Manual Order Indicator, so the exchange knows the order was automated.

The field defaults to false, so your automated order is tagged to CME as manually entered. That's an inaccurate audit-trail designation, which under CME Rule 536.B and Rule 512 can lead to disciplinary action.

Use true for any order a bot, algorithm, script, or webhook generates. Use false only for orders a person physically triggers in real time.

The Tradovate order schema defines it as a boolean, so send true (not "true"). If you use a third-party bridge or form-encoded client, confirm the exact type it expects, since serialization can differ between tools.

Yes. Set the flag on the parent/entry order of your placeOSO or placeOrderStrategy request, just as you would for a single order.

Not always. Because it defaults to false, many requests succeed but are mistagged. The bigger risk is a compliance and audit-trail violation. Sending the value as a type the API can't parse, however, can cause the request itself to fail.

Since 2011, CME has required every Globex order to identify manual (Y) versus automated (N) entry for surveillance and audit-trail purposes. It was codified into Rule 536.B in 2012, and only Y or N are valid.

That error is usually about authentication, the account id, or the symbol rather than isAutomated. Keep the flag correct, but troubleshoot auth and account access separately.

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. 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.