Skip to main content

POST Flatten Positions

Flatten positions by account and/or instrument NT8

Flatten allows for flattening all positions and orders in an account or for a specific instrument in an account. Differs from Flatten Everything, which flattens all positions and order in all accounts for all instruments.

Endpoint

POST /v1/api/accounts/{account}/positions/flatten

Headers

NameValue
Content-Typeapplication/json
AuthorizationBearer <token>

Path parameters

NameTypeRequiredDescription
accountstringRequiredName of account in NT8

Body parameters

NameTypeRequiredDescription
instrumentstringOptionalIf provided, only flatten positions for this instrument.
marketPositionstringOptionalIf provided, only flatten positions matching this side: "Long" or "Short". Can be combined with instrument.
cancelOrdersbooleanOptionalIf true, explicitly cancels all remaining working orders for the account (and instrument, if specified) after the flatten call. Default: false. Recommended for sim accounts where NT8's native flatten does not reliably cancel attached stop/target orders.

Code examples

import requests

token = 'my-secret-token'

url = "https://app.crosstrade.io/v1/api/accounts/Sim101/positions/flatten"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
data = {}

try:
response = requests.post(url, headers=headers, json=data)
print(f"Response Code: {response.status_code}, Response Text: {response.text}")
except Exception as e:
print(f"An error occurred: {e}")

Response

{
"closedPositions": [
{
"type": "NinjaTrader.Cbi.Position",
"account": "Sim101",
"instrument": "MES 12-25",
"instrumentType": "Future",
"marketPosition": "Short",
"quantity": 1,
"averagePrice": 5803.25,
"marketPrice": 5802.0,
"unrealizedProfitLoss": 6.25
}
],
"success": true
}

Platform nuances

info

Why cancelOrders: true matters — This endpoint calls NT8's native account.Flatten(), which should cancel attached orders. In practice, especially in sim, native flatten does not always cancel broker-held working stops. Pass cancelOrders: true to force an explicit cancel pass after the flatten. If you need a guaranteed clean exit on a single instrument, this is the correct pattern:

{
"instrument": "ES 09-26",
"cancelOrders": true
}

Flatten Everything always cancels orders explicitly and does not require this flag.

WebSocket API

This request can also be made over the WebSocket API. The account path parameter and request body fields are all passed inside args.

{
"action": "rpc",
"id": "my-request-id",
"api": "Flatten",
"args": {
"account": "Sim101",
"instrument": "ES 09-26"
}
}