{"success": true, "count": 75, "base_url": "https://app.crosstrade.io", "auth": {"type": "bearer", "header": "Authorization", "format": "Bearer <token>", "token_url": "https://app.crosstrade.io/user/my-account"}, "mcp": {"endpoint": "https://app.crosstrade.io/v1/api/mcp", "server_card": "https://app.crosstrade.io/.well-known/mcp/server-card.json", "oauth_metadata": "https://app.crosstrade.io/.well-known/oauth-protected-resource", "auth_server_metadata": "https://app.crosstrade.io/.well-known/oauth-authorization-server", "transport": "streamable-http", "scopes_supported": ["mcp:read", "mcp:trade"], "token_management": "https://app.crosstrade.io/user/my-account?tab=ai-clients"}, "discovery": {"openapi_json": "https://app.crosstrade.io/v1/api/openapi.json", "openapi_yaml": "https://app.crosstrade.io/v1/api/openapi.yaml", "llms_txt": "https://app.crosstrade.io/v1/api/llms.txt", "llms_full_txt": "https://app.crosstrade.io/v1/api/llms-full.txt", "mcp_endpoint": "https://app.crosstrade.io/v1/api/mcp", "mcp_server_card": "https://app.crosstrade.io/.well-known/mcp/server-card.json", "documentation": "https://crosstrade.io/docs/api/overview"}, "endpoints": [{"method": "GET", "path": "/v1/api/accounts", "tag": "Accounts", "summary": "Get Accounts", "description": "**RPC Function:** `ListAccounts`", "rpc": "ListAccounts", "operation_id": "accts", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/snapshot", "tag": "Accounts", "summary": "Get Accounts Summary", "description": "**RPC Function:** `GetAccountSummary`", "rpc": "GetAccountSummary", "operation_id": "summary", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}", "tag": "Accounts", "summary": "Get Account", "description": "**RPC Function:** `GetAccount`\n\n**Optional fields (from add-on):** `account`", "rpc": "GetAccount", "operation_id": "acct", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/position", "tag": "Accounts", "summary": "Get Position by Account + Instrument (instrument URL-encoded)", "description": "**RPC Function:** `GetPosition`\n\n**Optional fields (from add-on):** `account`, `instrument`", "rpc": "GetPosition", "operation_id": "get_position", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "instrument", "in": "query", "required": true, "description": ""}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/quote", "tag": "Accounts", "summary": "Get Quote", "description": "**RPC Function:** `GetQuote`\n\n**Optional fields (from add-on):** `instrument`, `root`, `showRollover`", "rpc": "GetQuote", "operation_id": "get_quote", "parameters": [{"name": "instrument", "in": "query", "required": true, "description": ""}, {"name": "root", "in": "query", "required": true, "description": ""}, {"name": "showRollover", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/watermarks", "tag": "Accounts", "summary": "Get Watermarks (per-account high/low water marks)", "description": "**RPC Function:** `GetWatermarks`", "rpc": "GetWatermarks", "operation_id": "handle_get_watermarks", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/executions", "tag": "Executions", "summary": "Get Executions by Account", "description": "**RPC Function:** `ListExecutions`", "rpc": "ListExecutions", "operation_id": "list_executions", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "lookbackTime", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/executions/{id}", "tag": "Executions", "summary": "Get Execution by ID", "description": "**RPC Function:** `GetExecution`", "rpc": "GetExecution", "operation_id": "get_execution", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/executions/order/{orderId}", "tag": "Executions", "summary": "Get Executions by Order ID (matches both current and original/initial order ID)", "description": "**RPC Function:** `GetExecutionsByOrderId`\n\n**Optional fields (from add-on):** `orderId`", "rpc": "GetExecutionsByOrderId", "operation_id": "get_executions_by_order_id", "parameters": [{"name": "orderId", "in": "path", "required": true, "description": "Order ID"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/atm-templates", "tag": "General", "summary": "Get All ATM Templates", "description": "**RPC Function:** `GetAtmTemplates`", "rpc": "GetAtmTemplates", "operation_id": "get_templates", "parameters": [], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/market/bars", "tag": "Market Data", "summary": "Get historical bars", "description": "**RPC Function:** `GetBars`\n\n**Optional fields (from add-on):** `periodType`, `period`, `daysBack`, `from`, `to`, `limit`, `timeoutMs`, `splitAdjust`, `dividendAdjust`, `mergePolicy`", "rpc": "GetBars", "operation_id": "bars", "parameters": [], "request_body_schema": {"type": "object", "properties": {"daysBack": {"type": "integer"}, "dividendAdjust": {"type": "boolean"}, "from": {"type": "string"}, "instrument": {"type": "string"}, "limit": {"type": "integer"}, "mergePolicy": {"type": "string"}, "period": {"type": "integer"}, "periodType": {"type": "string"}, "splitAdjust": {"type": "boolean"}, "timeoutMs": {"type": "integer"}, "to": {"type": "string"}}, "required": ["instrument"]}}, {"method": "GET", "path": "/v1/api/market/info", "tag": "Market Data", "summary": "Get Market Info", "description": "**RPC Function:** `MarketInfo`\n\n**Optional fields (from add-on):** `instrument`, `root`", "rpc": "MarketInfo", "operation_id": "get_market_info", "parameters": [{"name": "instrument", "in": "query", "required": true, "description": ""}, {"name": "root", "in": "query", "required": true, "description": ""}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/market/quote", "tag": "Market Data", "summary": "Get Quote", "description": "**RPC Function:** `GetQuote`\n\n**Optional fields (from add-on):** `instrument`, `root`, `showRollover`", "rpc": "GetQuote", "operation_id": "get_quote", "parameters": [{"name": "instrument", "in": "query", "required": true, "description": ""}, {"name": "root", "in": "query", "required": true, "description": ""}, {"name": "showRollover", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/orders", "tag": "Orders", "summary": "List Active/Orders in Account", "description": "**RPC Function:** `ListOrders`\n\n**Optional fields (from add-on):** `account`, `lookbackTime`, `activeOnly`", "rpc": "ListOrders", "operation_id": "list_orders", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "activeOnly", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/orders/cancel", "tag": "Orders", "summary": "Cancel Orders by Account + Instrument", "description": "**RPC Function:** `CancelOrders`\n\n**Optional fields (from add-on):** `account`, `instrument`, `strategyTag`, `force`", "rpc": "CancelOrders", "operation_id": "cancel_orders", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"force": {"type": "boolean"}, "instrument": {"type": "string"}, "strategyTag": {"type": "string"}}}}, {"method": "POST", "path": "/v1/api/accounts/{account}/orders/cancel_and_bracket", "tag": "Orders", "summary": "Cancel existing orders and immediately place new OCO Bracket (TP/SL)", "description": "`action` is the direction of the position being protected, not the exit\n    direction. The add-on inverts it: Buy/BuyToCover \u2192 Sell exits;\n    Sell/SellShort \u2192 BuyToCover exits. See post-cancel-and-bracket.mdx.\n\n    {\n      \"api\": \"CancelAndBracket\",\n      \"args\": {\n        \"account\": \"Sim101\",\n        \"instrument\": \"ES 09-26\",\n        \"action\": \"Buy\",\n        \"quantity\": 1,\n        \"takeProfit\": 4550.00,\n        \"stopLoss\": 4450.00,\n        \"ocoId\": \"Protect_Long_001\"\n      }\n    }\n\n**RPC Function:** `CancelAndBracket`\n\n**Optional fields (from add-on):** `takeProfit`, `stopLoss`, `delayMs`, `strategyTag`, `force`, `ocoId`", "rpc": "CancelAndBracket", "operation_id": "cancel_and_bracket", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"action": {"type": "string"}, "delayMs": {"type": "integer"}, "force": {"type": "boolean"}, "instrument": {"type": "string"}, "ocoId": {"type": "string"}, "quantity": {"type": "integer"}, "stopLoss": {"type": "number"}, "strategyTag": {"type": "string"}, "takeProfit": {"type": "number"}}, "required": ["action", "instrument", "quantity"]}}, {"method": "POST", "path": "/v1/api/accounts/{account}/orders/flatplace", "tag": "Orders", "summary": "Flat Place Order", "description": "**RPC Function:** `FlatPlace`\n\n**Optional fields (from add-on):** `quantity`, `limitPrice`, `stopPrice`, `strategyTag`, `force`", "rpc": "FlatPlace", "operation_id": "flat_place_order", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"force": {"type": "boolean"}, "limitPrice": {"type": "number"}, "quantity": {"type": "integer"}, "stopPrice": {"type": "number"}, "strategyTag": {"type": "string"}}}}, {"method": "POST", "path": "/v1/api/accounts/{account}/orders/place", "tag": "Orders", "summary": "Place Order", "description": "**RPC Function:** `PlaceOrder`\n\n**Optional fields (from add-on):** `quantity`, `limitPrice`, `stopPrice`, `instrument`, `action`, `orderType`, `targetQuantity`, `maxResyncCorrection`, `ocoId`, `strategy`, `orderId`, `strategyTag`, `force`, `requireMarketPosition`, `maxPositions`, `smartOptions`", "rpc": "PlaceOrder", "operation_id": "place_order", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"action": {"type": "string"}, "force": {"type": "boolean"}, "instrument": {"type": "string"}, "limitPrice": {"type": "number"}, "maxPositions": {"type": "integer"}, "maxResyncCorrection": {"type": "integer"}, "ocoId": {"type": "string"}, "orderId": {"type": "string"}, "orderType": {"type": "string"}, "quantity": {"type": "integer"}, "requireMarketPosition": {"type": "string"}, "smartOptions": {"type": "object"}, "stopPrice": {"type": "number"}, "strategy": {"type": "string"}, "strategyTag": {"type": "string"}, "targetQuantity": {"type": "integer"}, "timeInForce": {"type": "string"}}, "required": ["timeInForce"]}}, {"method": "GET", "path": "/v1/api/accounts/{account}/orders/{id}", "tag": "Orders", "summary": "Get Order by ID", "description": "**RPC Function:** `GetOrder`\n\n**Optional fields (from add-on):** `orderId`", "rpc": "GetOrder", "operation_id": "get_order", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/orders/{id}/cancel", "tag": "Orders", "summary": "Cancel Order by ID", "description": "**RPC Function:** `Cancel`\n\n**Optional fields (from add-on):** `strategyId`, `account`, `strategyTag`, `force`", "rpc": "Cancel", "operation_id": "cancel_order", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "PUT", "path": "/v1/api/accounts/{account}/orders/{id}/change", "tag": "Orders", "summary": "Change Order", "description": "**RPC Function:** `Change`\n\n**Optional fields (from add-on):** `quantity`, `limitPrice`, `stopPrice`, `strategyId`, `account`, `strategyTag`, `force`", "rpc": "Change", "operation_id": "change_order", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": {"type": "object", "properties": {"force": {"type": "boolean"}, "limitPrice": {"type": "number"}, "orderId": {"type": "string"}, "quantity": {"type": "integer"}, "stopPrice": {"type": "number"}, "strategyId": {"type": "string"}, "strategyTag": {"type": "string"}}, "required": ["orderId"]}}, {"method": "GET", "path": "/v1/api/accounts/{account}/orders/{id}/lifecycle", "tag": "Orders", "summary": "Get Order Lifecycle (v1.13.2)", "description": "Returns the full lifecycle of one order: every state transition recorded\n    by the addon plus optional fills from NT8's in-memory Executions. Use this\n    to reconcile orders end-to-end when WebSocket events are dropped or arrive\n    out of order.\n\n    Available in CrossTrade XT Add-On v1.13.2 and later. Older addons will\n    return an \"Unknown API command\" error.\n\n    Query string:\n      includeFills (bool, default true)  \u2014 merge fills\n      includeRaw   (bool, default false) \u2014 include raw_json column\n      limit        (int,  default 200)   \u2014 cap rows returned (max 2000)\n\n**RPC Function:** `GetOrderLifecycle`\n\n**Optional fields (from add-on):** `includeRaw`, `limit`", "rpc": "GetOrderLifecycle", "operation_id": "get_order_lifecycle", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/orders/{id}/replace", "tag": "Orders", "summary": "Cancel Replace Order", "description": "**RPC Function:** `CancelReplace`\n\n**Optional fields (from add-on):** `quantity`, `limitPrice`, `stopPrice`, `strategyTag`, `force`", "rpc": "CancelReplace", "operation_id": "cancel_replace_order", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": {"type": "object", "properties": {"action": {"type": "string"}, "force": {"type": "boolean"}, "instrument": {"type": "string"}, "limitPrice": {"type": "number"}, "orderId": {"type": "string"}, "orderType": {"type": "string"}, "quantity": {"type": "integer"}, "stopPrice": {"type": "number"}, "strategyTag": {"type": "string"}, "timeInForce": {"type": "string"}}, "required": ["action", "instrument", "orderId", "orderType", "timeInForce"]}}, {"method": "GET", "path": "/v1/api/accounts/{account}/orders/{id}/status", "tag": "Orders", "summary": "Get Order Status by ID", "description": "**RPC Function:** `GetOrderStatus`", "rpc": "GetOrderStatus", "operation_id": "get_order_status", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/orders", "tag": "Orders", "summary": "Get All Orders (Across all accounts)", "description": "**RPC Function:** `GetAllOrders`\n\n**Optional fields (from add-on):** `activeOnly`, `lookbackTime`", "rpc": "GetAllOrders", "operation_id": "get_all_orders", "parameters": [{"name": "activeOnly", "in": "query", "required": false, "description": ""}, {"name": "lookbackTime", "in": "query", "required": true, "description": ""}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/orders/cancelall", "tag": "Orders", "summary": "Cancel All Orders in All Accounts", "description": "**RPC Function:** `CancelAllOrders`", "rpc": "CancelAllOrders", "operation_id": "cancel_all_orders", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/accounts/{account}/positions", "tag": "Positions", "summary": "List Active Positions in Account", "description": "**RPC Function:** `ListPositions`\n\n**Optional fields (from add-on):** `account`", "rpc": "ListPositions", "operation_id": "list_positions", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/positions/close", "tag": "Positions", "summary": "Close Position (account, instrument)", "description": "**RPC Function:** `ClosePosition`\n\n**Optional fields (from add-on):** `strategyTag`, `force`, `quantity`, `percent`", "rpc": "ClosePosition", "operation_id": "close_position", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"force": {"type": "boolean"}, "instrument": {"type": "string"}, "percent": {"type": "number"}, "quantity": {"type": "integer"}, "strategyTag": {"type": "string"}}, "required": ["instrument"]}}, {"method": "POST", "path": "/v1/api/accounts/{account}/positions/flatten", "tag": "Positions", "summary": "Flatten Positions in 1 account (account, instrument)", "description": "**RPC Function:** `Flatten`\n\n**Optional fields (from add-on):** `account`, `instrument`, `cancelOrders`, `strategyTag`, `strategyTagMode`, `force`", "rpc": "Flatten", "operation_id": "flatten_position", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"cancelOrders": {"type": "boolean"}, "force": {"type": "boolean"}, "instrument": {"type": "string"}, "strategyTag": {"type": "string"}, "strategyTagMode": {"type": "string"}}}}, {"method": "POST", "path": "/v1/api/accounts/{account}/positions/reverse", "tag": "Positions", "summary": "Reverse", "description": "**RPC Function:** `Reverse`\n\n**Optional fields (from add-on):** `strategyTag`, `force`", "rpc": "Reverse", "operation_id": "reverse", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"force": {"type": "boolean"}, "instrument": {"type": "string"}, "strategyTag": {"type": "string"}}, "required": ["instrument"]}}, {"method": "POST", "path": "/v1/api/accounts/{account}/positions/reverseposition", "tag": "Positions", "summary": "Reverse Position (account, instrument, action, orderType, quantity, timeInForce, limitPrice, stopPrice, ocoId, strategy)", "description": "**RPC Function:** `ReversePosition`\n\n**Optional fields (from add-on):** `quantity`, `account`, `instrument`, `strategyTag`, `force`", "rpc": "ReversePosition", "operation_id": "reverse_position", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"force": {"type": "boolean"}, "instrument": {"type": "string"}, "quantity": {"type": "integer"}, "strategyTag": {"type": "string"}}}}, {"method": "GET", "path": "/v1/api/positions", "tag": "Positions", "summary": "Get All Open Positions (Across all accounts)", "description": "**RPC Function:** `GetAllPositions`\n\n**Optional fields (from add-on):** `includeFlat`", "rpc": "GetAllPositions", "operation_id": "get_all_positions", "parameters": [{"name": "includeFlat", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/positions/flatten", "tag": "Positions", "summary": "Flatten All Positions in All Accounts", "description": "**RPC Function:** `Flatten`\n\n**Optional fields (from add-on):** `account`, `instrument`, `cancelOrders`, `strategyTag`, `strategyTagMode`, `force`", "rpc": "Flatten", "operation_id": "flatten_everything", "parameters": [], "request_body_schema": {"type": "object", "properties": {"account": {"type": "string"}, "cancelOrders": {"type": "boolean"}, "force": {"type": "boolean"}, "instrument": {"type": "string"}, "strategyTag": {"type": "string"}, "strategyTagMode": {"type": "string"}}}}, {"method": "GET", "path": "/v1/api/accounts/{account}/strategies", "tag": "Strategies", "summary": "List Strategies", "description": "**RPC Function:** `ListStrategies`\n\n**Optional fields (from add-on):** `includeTerminal`", "rpc": "ListStrategies", "operation_id": "list_strats", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "includeTerminal", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/strategies/start", "tag": "Strategies", "summary": "Starts a NinjaScript Strategy", "description": "**RPC Function:** `StartStrategy`\n\n**Optional fields (from add-on):** `account`, `strategyClass`, `strategy_class`, `instrument`, `mode`, `periodType`, `period_type`, `period`, `parameters`", "rpc": "StartStrategy", "operation_id": "start_strat", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string"}, "mode": {"type": "string"}, "parameters": {"type": "object"}, "period": {"type": "string"}, "periodType": {"type": "string"}, "period_type": {"type": "string"}, "strategyClass": {"type": "string"}, "strategy_class": {"type": "string"}}}}, {"method": "GET", "path": "/v1/api/accounts/{account}/strategies/{id}", "tag": "Strategies", "summary": "Get Strategy", "description": "**RPC Function:** `GetStrategy`\n\n**Optional fields (from add-on):** `strategyId`", "rpc": "GetStrategy", "operation_id": "get_strat", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/strategies/{id}/close", "tag": "Strategies", "summary": "Close Strategy", "description": "**RPC Function:** `CloseStrategy`\n\n**Optional fields (from add-on):** `strategyId`, `signalName`, `strategyTag`, `force`", "rpc": "CloseStrategy", "operation_id": "close_strat", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/strategies/{id}/disable", "tag": "Strategies", "summary": "Disable Strategy", "description": "**RPC Function:** `DisableStrategy`", "rpc": "DisableStrategy", "operation_id": "disable_strat", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/accounts/{account}/strategies/{id}/enable", "tag": "Strategies", "summary": "Enable Strategy", "description": "**RPC Function:** `EnableStrategy`", "rpc": "EnableStrategy", "operation_id": "enable_strat", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"Sim101\")"}, {"name": "id", "in": "path", "required": true, "description": "Resource ID"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/strategies", "tag": "Strategies", "summary": "List All Strategies", "description": "**RPC Function:** `ListAllStrategies`\n\n**Optional fields (from add-on):** `includeTerminal`", "rpc": "ListAllStrategies", "operation_id": "list_all_strats", "parameters": [{"name": "includeTerminal", "in": "query", "required": false, "description": ""}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts", "tag": "Tradovate Accounts", "summary": "List linked Tradovate accounts", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_accounts", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/snapshot", "tag": "Tradovate Accounts", "summary": "Live snapshot of every account: balances, open positions with P&L, working orders", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_snapshot", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}", "tag": "Tradovate Accounts", "summary": "Get one account with its cash-balance snapshot", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_account", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/watermarks", "tag": "Tradovate Accounts", "summary": "P&L high-water marks tracked by the Account Manager monitor engine", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_watermarks", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/cashbalances", "tag": "Tradovate Balances", "summary": "Cash-balance rows for every linked identity", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_cashbalances", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/marginsnapshots", "tag": "Tradovate Balances", "summary": "Margin snapshots for every linked identity", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_margins", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/fills", "tag": "Tradovate Fills", "summary": "Fills for one account", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_account_fills", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/fills", "tag": "Tradovate Fills", "summary": "All fills across linked identities, one envelope per identity", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_fills", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/fills/history", "tag": "Tradovate Fills", "summary": "Durable fill history from the journal's continuous Tradovate capture.", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_fills_history", "parameters": [{"name": "from", "in": "query", "required": true, "description": "Inclusive lower bound, ISO-8601 date or datetime (UTC). Date-only values start at 00:00Z."}, {"name": "to", "in": "query", "required": true, "description": "Exclusive upper bound, ISO-8601 date or datetime (UTC). Date-only values cover the whole day."}, {"name": "environment", "in": "query", "required": true, "description": "Filter to one environment: 'demo' or 'live'"}, {"name": "limit", "in": "query", "required": false, "description": "Maximum rows per page (1-1000, default 500)"}, {"name": "account", "in": "query", "required": true, "description": "Filter to one account by display name"}, {"name": "cursor", "in": "query", "required": true, "description": "Opaque pagination cursor from the previous page's nextCursor"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/fills/order/{orderId}", "tag": "Tradovate Fills", "summary": "Fills for one order (NT8 executions-by-order parity)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_fills_by_order", "parameters": [{"name": "orderId", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/orders", "tag": "Tradovate Orders", "summary": "Working orders for one account", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_account_orders", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/orders/cancel", "tag": "Tradovate Orders", "summary": "Cancel every working order on one account", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CANCELORDERS` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_cancel_orders", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/orders/cancel_and_bracket", "tag": "Tradovate Orders", "summary": "Cancel working orders on the instrument and attach a fresh OCO bracket (hyphen path = NT8-parity alias)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CANCELANDBRACKET` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_cancel_and_bracket", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "action": {"type": "string", "description": "buy | sell (long/short accepted)", "enum": ["buy", "sell", "long", "short"]}, "qty": {"type": "integer", "description": "Number of contracts"}, "takeProfit": {"type": "number", "description": "Absolute price for a server-side OCO take-profit leg"}, "stopLoss": {"type": "number", "description": "Absolute price for a server-side OCO stop-loss leg"}}, "additionalProperties": false, "required": ["instrument", "action", "qty"]}}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/orders/flatplace", "tag": "Tradovate Orders", "summary": "Flatten and cancel on the instrument, then place a fresh entry", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `FLATPLACE` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_flatplace", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "action": {"type": "string", "description": "buy | sell (long/short accepted)", "enum": ["buy", "sell", "long", "short"]}, "qty": {"type": "integer", "description": "Number of contracts"}, "orderType": {"type": "string", "description": "market | limit | stop | stoplimit | mit | trailingstop | trailingstoplimit", "enum": ["market", "limit", "stop", "stoplimit", "mit", "trailingstop", "trailingstoplimit"]}, "limitPrice": {"type": "number", "description": "Limit price (limit / stoplimit / mit / trailingstoplimit)"}, "stopPrice": {"type": "number", "description": "Stop trigger price (stop / stoplimit / trailing types)"}, "tif": {"type": "string", "description": "day | gtc | ioc | fok | gtd", "enum": ["day", "gtc", "ioc", "fok", "gtd"]}, "takeProfit": {"type": "number", "description": "Absolute price for a server-side OCO take-profit leg"}, "stopLoss": {"type": "number", "description": "Absolute price for a server-side OCO stop-loss leg"}, "orderId": {"type": "string", "description": "User-assigned order reference for later cancel/change"}, "text": {"type": "string", "description": "Free-form note attached to the order (max 64 chars)", "maxLength": 64}, "requireMarketPosition": {"type": "string", "description": "Gate: only act when current position is 'flat' / 'long' / 'short'"}, "maxPositions": {"type": "integer", "description": "Block entry when N positions already open"}, "cancelAfter": {"type": "integer", "description": "Minutes (1-180) before an unfilled limit entry auto-cancels"}, "expireTime": {"type": "string", "description": "ISO-8601 order expiry; required when tif=gtd"}, "maxShow": {"type": "integer", "description": "Iceberg display quantity"}, "trailOffset": {"type": "number", "description": "Native trailing-stop distance; required for trailing order types"}, "pegDifference": {"type": "number", "description": "Alias of trailOffset"}, "syncStrategy": {"type": "boolean", "description": "Enable Tradovate Strategy Sync for this entry command"}, "marketPosition": {"type": "string", "description": "Remote strategy target side: flat, long, or short"}, "prevMarketPosition": {"type": "string", "description": "Remote strategy side before this signal"}, "outOfSync": {"type": "string", "description": "Mismatch policy: wait, flatten, ignore, or resync", "enum": ["wait", "flatten", "ignore", "resync"]}, "targetQuantity": {"type": "integer", "description": "Exact signed target quantity for resync mode"}, "strategyExitBlock": {"type": "boolean", "description": "Reject non-opening strategy transitions. Only honored when syncStrategy is enabled"}, "atmTargets": {"type": "string", "description": "Tradovate-native ATM target offsets, e.g. '40,80' ticks or '10pt,20pt'"}, "atmStops": {"type": "string", "description": "Tradovate-native ATM stop offsets (required with atm* fields)"}, "atmQtys": {"type": "string", "description": "Tradovate-native contracts per tier; sums to qty, e.g. '1,1'"}, "atmTrail": {"type": "string", "description": "Tradovate-native continuous trailing toggle when no trigger is supplied, e.g. 'false,true'"}, "atmTrailTrigger": {"type": "string", "description": "CrossTrade-exclusive: trusted-consensus profit distance that activates a trailing tier, e.g. '30' or ',30'. Pair with atmTrailOffset; Day entries only"}, "atmTrailOffset": {"type": "string", "description": "CrossTrade-managed activation: native Tradovate trail distance after confirmed handoff. Pair with atmTrailTrigger"}, "atmBreakeven": {"type": "integer", "description": "CrossTrade-exclusive: target tier whose fill moves surviving stops to breakeven; not a native Tradovate AutoBracket field"}, "atmBreakevenOffset": {"type": "string", "description": "CrossTrade-exclusive: ticks/points past entry for the managed breakeven stop"}}, "additionalProperties": false, "required": ["instrument", "action", "qty", "orderType"]}}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/orders/place", "tag": "Tradovate Orders", "summary": "Place an order: market/limit/stop types, OCO brackets, inline ATM multibracket", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `PLACE` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_place", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "action": {"type": "string", "description": "buy | sell (long/short accepted)", "enum": ["buy", "sell", "long", "short"]}, "qty": {"type": "integer", "description": "Number of contracts"}, "orderType": {"type": "string", "description": "market | limit | stop | stoplimit | mit | trailingstop | trailingstoplimit", "enum": ["market", "limit", "stop", "stoplimit", "mit", "trailingstop", "trailingstoplimit"]}, "limitPrice": {"type": "number", "description": "Limit price (limit / stoplimit / mit / trailingstoplimit)"}, "stopPrice": {"type": "number", "description": "Stop trigger price (stop / stoplimit / trailing types)"}, "tif": {"type": "string", "description": "day | gtc | ioc | fok | gtd", "enum": ["day", "gtc", "ioc", "fok", "gtd"]}, "takeProfit": {"type": "number", "description": "Absolute price for a server-side OCO take-profit leg"}, "stopLoss": {"type": "number", "description": "Absolute price for a server-side OCO stop-loss leg"}, "orderId": {"type": "string", "description": "User-assigned order reference for later cancel/change"}, "text": {"type": "string", "description": "Free-form note attached to the order (max 64 chars)", "maxLength": 64}, "flattenFirst": {"type": "boolean", "description": "Flatten + cancel on the instrument before entering"}, "requireMarketPosition": {"type": "string", "description": "Gate: only act when current position is 'flat' / 'long' / 'short'"}, "maxPositions": {"type": "integer", "description": "Block entry when N positions already open"}, "cancelAfter": {"type": "integer", "description": "Minutes (1-180) before an unfilled limit entry auto-cancels"}, "expireTime": {"type": "string", "description": "ISO-8601 order expiry; required when tif=gtd"}, "maxShow": {"type": "integer", "description": "Iceberg display quantity"}, "trailOffset": {"type": "number", "description": "Native trailing-stop distance; required for trailing order types"}, "pegDifference": {"type": "number", "description": "Alias of trailOffset"}, "syncStrategy": {"type": "boolean", "description": "Enable Tradovate Strategy Sync for this entry command"}, "marketPosition": {"type": "string", "description": "Remote strategy target side: flat, long, or short"}, "prevMarketPosition": {"type": "string", "description": "Remote strategy side before this signal"}, "outOfSync": {"type": "string", "description": "Mismatch policy: wait, flatten, ignore, or resync", "enum": ["wait", "flatten", "ignore", "resync"]}, "targetQuantity": {"type": "integer", "description": "Exact signed target quantity for resync mode"}, "strategyExitBlock": {"type": "boolean", "description": "Reject non-opening strategy transitions. Only honored when syncStrategy is enabled"}, "atmTargets": {"type": "string", "description": "Tradovate-native ATM target offsets, e.g. '40,80' ticks or '10pt,20pt'"}, "atmStops": {"type": "string", "description": "Tradovate-native ATM stop offsets (required with atm* fields)"}, "atmQtys": {"type": "string", "description": "Tradovate-native contracts per tier; sums to qty, e.g. '1,1'"}, "atmTrail": {"type": "string", "description": "Tradovate-native continuous trailing toggle when no trigger is supplied, e.g. 'false,true'"}, "atmTrailTrigger": {"type": "string", "description": "CrossTrade-exclusive: trusted-consensus profit distance that activates a trailing tier, e.g. '30' or ',30'. Pair with atmTrailOffset; Day entries only"}, "atmTrailOffset": {"type": "string", "description": "CrossTrade-managed activation: native Tradovate trail distance after confirmed handoff. Pair with atmTrailTrigger"}, "atmBreakeven": {"type": "integer", "description": "CrossTrade-exclusive: target tier whose fill moves surviving stops to breakeven; not a native Tradovate AutoBracket field"}, "atmBreakevenOffset": {"type": "string", "description": "CrossTrade-exclusive: ticks/points past entry for the managed breakeven stop"}}, "additionalProperties": false, "required": ["instrument", "action", "qty", "orderType"]}}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/orders/{id}", "tag": "Tradovate Orders", "summary": "Get one order by id", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_order_item", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "id", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/orders/{id}/cancel", "tag": "Tradovate Orders", "summary": "Cancel one working order by id", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CANCEL` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_cancel", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "id", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": null}, {"method": "PUT", "path": "/v1/api/tv/accounts/{account}/orders/{id}/change", "tag": "Tradovate Orders", "summary": "Change a working order in place (PUT is canonical for NT8 parity; POST kept for backward compatibility)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CHANGE` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_change", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "id", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": {"type": "object", "properties": {"qty": {"type": "integer", "description": "Number of contracts"}, "orderType": {"type": "string", "description": "market | limit | stop | stoplimit | mit | trailingstop | trailingstoplimit", "enum": ["market", "limit", "stop", "stoplimit", "mit", "trailingstop", "trailingstoplimit"]}, "limitPrice": {"type": "number", "description": "Limit price (limit / stoplimit / mit / trailingstoplimit)"}, "stopPrice": {"type": "number", "description": "Stop trigger price (stop / stoplimit / trailing types)"}, "tif": {"type": "string", "description": "day | gtc | ioc | fok | gtd", "enum": ["day", "gtc", "ioc", "fok", "gtd"]}, "text": {"type": "string", "description": "Free-form note attached to the order (max 64 chars)", "maxLength": 64}, "expireTime": {"type": "string", "description": "ISO-8601 order expiry; required when tif=gtd"}, "maxShow": {"type": "integer", "description": "Iceberg display quantity"}, "trailOffset": {"type": "number", "description": "Native trailing-stop distance; required for trailing order types"}, "pegDifference": {"type": "number", "description": "Alias of trailOffset"}}, "additionalProperties": false}}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/orders/{id}/lifecycle", "tag": "Tradovate Orders", "summary": "Order audit trail: current version, commands, and command reports", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_order_lifecycle", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "id", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/orders/{id}/replace", "tag": "Tradovate Orders", "summary": "Cancel a working order and place a replacement in one command", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CANCELREPLACE` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_replace", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "id", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "action": {"type": "string", "description": "buy | sell (long/short accepted)", "enum": ["buy", "sell", "long", "short"]}, "qty": {"type": "integer", "description": "Number of contracts"}, "orderType": {"type": "string", "description": "market | limit | stop | stoplimit | mit | trailingstop | trailingstoplimit", "enum": ["market", "limit", "stop", "stoplimit", "mit", "trailingstop", "trailingstoplimit"]}, "limitPrice": {"type": "number", "description": "Limit price (limit / stoplimit / mit / trailingstoplimit)"}, "stopPrice": {"type": "number", "description": "Stop trigger price (stop / stoplimit / trailing types)"}, "tif": {"type": "string", "description": "day | gtc | ioc | fok | gtd", "enum": ["day", "gtc", "ioc", "fok", "gtd"]}, "text": {"type": "string", "description": "Free-form note attached to the order (max 64 chars)", "maxLength": 64}, "expireTime": {"type": "string", "description": "ISO-8601 order expiry; required when tif=gtd"}, "maxShow": {"type": "integer", "description": "Iceberg display quantity"}, "trailOffset": {"type": "number", "description": "Native trailing-stop distance; required for trailing order types"}, "pegDifference": {"type": "number", "description": "Alias of trailOffset"}, "requireMarketPosition": {"type": "string", "description": "Gate: only act when current position is 'flat' / 'long' / 'short'"}, "maxPositions": {"type": "integer", "description": "Block entry when N positions already open"}, "cancelAfter": {"type": "integer", "description": "Minutes (1-180) before an unfilled limit entry auto-cancels"}, "syncStrategy": {"type": "boolean", "description": "Enable Tradovate Strategy Sync for this entry command"}, "marketPosition": {"type": "string", "description": "Remote strategy target side: flat, long, or short"}, "prevMarketPosition": {"type": "string", "description": "Remote strategy side before this signal"}, "outOfSync": {"type": "string", "description": "Mismatch policy: wait, flatten, ignore, or resync", "enum": ["wait", "flatten", "ignore", "resync"]}, "targetQuantity": {"type": "integer", "description": "Exact signed target quantity for resync mode"}, "strategyExitBlock": {"type": "boolean", "description": "Reject non-opening strategy transitions. Only honored when syncStrategy is enabled"}}, "additionalProperties": false, "required": ["instrument", "action", "qty", "orderType"]}}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/orders/{id}/status", "tag": "Tradovate Orders", "summary": "Slim order status read (NT8 order-status parity)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_order_status", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "id", "in": "path", "required": true, "description": "Tradovate numeric order id or user-assigned orderId"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/orders", "tag": "Tradovate Orders", "summary": "Every order across linked identities (NT8 all-orders parity)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_all_orders", "parameters": [], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/orders/cancelall", "tag": "Tradovate Orders", "summary": "Cancel every working order across all linked identities", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CANCELALLORDERS` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_cancel_all", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/position", "tag": "Tradovate Positions", "summary": "Net position for one account and instrument (NT8 GetPosition parity)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_account_position", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}, {"name": "instrument", "in": "query", "required": true, "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/accounts/{account}/positions", "tag": "Tradovate Positions", "summary": "Fill-reconciled open positions for one account", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_account_positions", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/positions/close", "tag": "Tradovate Positions", "summary": "Close the position on one account and instrument (partial via qty/percent)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `CLOSEPOSITION` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_close_position", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "qty": {"type": "integer", "description": "Contracts to close (partial close)"}, "percent": {"type": "number", "description": "Fraction of the position to close, 0-1; qty wins when both set"}}, "additionalProperties": false, "required": ["instrument"]}}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/positions/flatten", "tag": "Tradovate Positions", "summary": "Flatten positions on one account (optional instrument / side filters)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `FLATTEN` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_flatten_account", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "marketPosition": {"type": "string", "description": "Only flatten this side: 'long' or 'short'", "enum": ["long", "short"]}}, "additionalProperties": false}}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/positions/reverse", "tag": "Tradovate Positions", "summary": "Reverse the live position (liquidate, then opposite entry at same size)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `REVERSE` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_reverse", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}}, "additionalProperties": false, "required": ["instrument"]}}, {"method": "POST", "path": "/v1/api/tv/accounts/{account}/positions/reverseposition", "tag": "Tradovate Positions", "summary": "Flatten the position, then place the specified entry (explicit-size reverse)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `REVERSEPOSITION` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_reverseposition", "parameters": [{"name": "account", "in": "path", "required": true, "description": "Account name (e.g., \"DEMO12345678\")"}], "request_body_schema": {"type": "object", "properties": {"instrument": {"type": "string", "description": "Instrument: continuous ('ES1!'), NT8 ('ES 09-26'), or Tradovate ('ESU6') form"}, "action": {"type": "string", "description": "buy | sell (long/short accepted)", "enum": ["buy", "sell", "long", "short"]}, "qty": {"type": "integer", "description": "Number of contracts"}, "orderType": {"type": "string", "description": "market | limit | stop | stoplimit | mit | trailingstop | trailingstoplimit", "enum": ["market", "limit", "stop", "stoplimit", "mit", "trailingstop", "trailingstoplimit"]}, "limitPrice": {"type": "number", "description": "Limit price (limit / stoplimit / mit / trailingstoplimit)"}, "stopPrice": {"type": "number", "description": "Stop trigger price (stop / stoplimit / trailing types)"}, "tif": {"type": "string", "description": "day | gtc | ioc | fok | gtd", "enum": ["day", "gtc", "ioc", "fok", "gtd"]}, "takeProfit": {"type": "number", "description": "Absolute price for a server-side OCO take-profit leg"}, "stopLoss": {"type": "number", "description": "Absolute price for a server-side OCO stop-loss leg"}, "orderId": {"type": "string", "description": "User-assigned order reference for later cancel/change"}, "text": {"type": "string", "description": "Free-form note attached to the order (max 64 chars)", "maxLength": 64}, "requireMarketPosition": {"type": "string", "description": "Gate: only act when current position is 'flat' / 'long' / 'short'"}, "maxPositions": {"type": "integer", "description": "Block entry when N positions already open"}, "cancelAfter": {"type": "integer", "description": "Minutes (1-180) before an unfilled limit entry auto-cancels"}, "expireTime": {"type": "string", "description": "ISO-8601 order expiry; required when tif=gtd"}, "maxShow": {"type": "integer", "description": "Iceberg display quantity"}, "trailOffset": {"type": "number", "description": "Native trailing-stop distance; required for trailing order types"}, "pegDifference": {"type": "number", "description": "Alias of trailOffset"}, "syncStrategy": {"type": "boolean", "description": "Enable Tradovate Strategy Sync for this entry command"}, "marketPosition": {"type": "string", "description": "Remote strategy target side: flat, long, or short"}, "prevMarketPosition": {"type": "string", "description": "Remote strategy side before this signal"}, "outOfSync": {"type": "string", "description": "Mismatch policy: wait, flatten, ignore, or resync", "enum": ["wait", "flatten", "ignore", "resync"]}, "targetQuantity": {"type": "integer", "description": "Exact signed target quantity for resync mode"}, "strategyExitBlock": {"type": "boolean", "description": "Reject non-opening strategy transitions. Only honored when syncStrategy is enabled"}, "atmTargets": {"type": "string", "description": "Tradovate-native ATM target offsets, e.g. '40,80' ticks or '10pt,20pt'"}, "atmStops": {"type": "string", "description": "Tradovate-native ATM stop offsets (required with atm* fields)"}, "atmQtys": {"type": "string", "description": "Tradovate-native contracts per tier; sums to qty, e.g. '1,1'"}, "atmTrail": {"type": "string", "description": "Tradovate-native continuous trailing toggle when no trigger is supplied, e.g. 'false,true'"}, "atmTrailTrigger": {"type": "string", "description": "CrossTrade-exclusive: trusted-consensus profit distance that activates a trailing tier, e.g. '30' or ',30'. Pair with atmTrailOffset; Day entries only"}, "atmTrailOffset": {"type": "string", "description": "CrossTrade-managed activation: native Tradovate trail distance after confirmed handoff. Pair with atmTrailTrigger"}, "atmBreakeven": {"type": "integer", "description": "CrossTrade-exclusive: target tier whose fill moves surviving stops to breakeven; not a native Tradovate AutoBracket field"}, "atmBreakevenOffset": {"type": "string", "description": "CrossTrade-exclusive: ticks/points past entry for the managed breakeven stop"}}, "additionalProperties": false, "required": ["instrument", "action", "qty", "orderType"]}}, {"method": "GET", "path": "/v1/api/tv/positions", "tag": "Tradovate Positions", "summary": "All open positions across linked identities", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_positions", "parameters": [], "request_body_schema": null}, {"method": "POST", "path": "/v1/api/tv/positions/flatten", "tag": "Tradovate Positions", "summary": "Liquidate every position and cancel every working order", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).\n\n**Command:** `FLATTENEVERYTHING` \u2014 runs through the shared webhook parser and dispatcher (validation, account management locks, trade copier fan-out).", "rpc": "", "operation_id": "tv_flatten_everything", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/contracts/find", "tag": "Tradovate Reference", "summary": "Find a contract by exact Tradovate symbol", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_contract_find", "parameters": [{"name": "name", "in": "query", "required": true, "description": "Exact Tradovate contract symbol, e.g. 'ESU6'"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/contracts/suggest", "tag": "Tradovate Reference", "summary": "Contract autocomplete (resolves the active front month)", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_contract_suggest", "parameters": [{"name": "text", "in": "query", "required": true, "description": "Contract root or partial symbol to search"}, {"name": "limit", "in": "query", "required": false, "description": "Maximum suggestions to return (1-100)"}], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/exchanges", "tag": "Tradovate Reference", "summary": "Exchange reference list", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_exchanges", "parameters": [], "request_body_schema": null}, {"method": "GET", "path": "/v1/api/tv/status", "tag": "Tradovate Status", "summary": "Tradovate link status: identities, environments, token expiry", "description": "**Tradovate:** requires a linked Tradovate account (no NinjaTrader add-on involved).", "rpc": "", "operation_id": "tv_status", "parameters": [], "request_body_schema": null}]}