POST Cancel Order
- NT8
- Tradovate
Cancel order by ID NT8
Cancels one working order by ID on the selected NT8 account.
Endpoint
POST /v1/api/accounts/{account}/orders/{orderId}/cancel
Headers
| Name | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
account | string | Required | Name of account in NT8 |
orderId | string | Required | ID of the order in NT8 |
Code examples
- Python
- JavaScript
- cURL
import requests
token = 'my-secret-token'
url = "https://app.crosstrade.io/v1/api/accounts/Sim101/orders/ce0a8e5002ea463e856eb6384f5cee7e/cancel"
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}")
const token = 'my-secret-token';
const url = "https://app.crosstrade.io/v1/api/accounts/Sim101/orders/ce0a8e5002ea463e856eb6384f5cee7e/cancel";
fetch(url, {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({})
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
TOKEN="my-secret-token"
curl -X POST "https://app.crosstrade.io/v1/api/accounts/Sim101/orders/ce0a8e5002ea463e856eb6384f5cee7e/cancel" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
Response
- 200
- 400 - not found
- 400
{
"orderId": "ce0a8e5002ea463e856eb6384f5cee7e",
"success": true
}
{
"error": "Order linked to 'ce0a8e5002ea463e856eb6384f5cee7e' not found or already terminal."
}
{
"error": "Invalid request"
}
Platform nuances
Parsing the not-found error — The "not found or already terminal" string is stable and parseable. Callers can string-match on it to distinguish a gone order from other failure modes, rather than relying on status codes alone.
Order ID note — The orderId returned when you place an order is the NT8-assigned GUID for that order. CrossTrade maintains internal handlers that can always resolve the original GUID you were given, even if NT8 or the broker reassigns the order ID internally. You can use the ID returned at placement time to cancel or look up an order at any point in its lifecycle.
WebSocket API
This request can also be made over the WebSocket API. The account and orderId path parameters are passed inside args.
{
"action": "rpc",
"id": "my-request-id",
"api": "Cancel",
"args": {
"account": "Sim101",
"orderId": "492281fc515e431692da57d957cfebb6"
}
}
Cancel order by ID Tradovate
Cancels one working order on a linked Tradovate account. No body fields are required; send an empty JSON object. No NinjaTrader add-on is involved: the command executes server-side with the same validation, Account Manager locks, and Trade Copier fan-out as a webhook signal.
Endpoint
POST /v1/api/tv/accounts/{account}/orders/{id}/cancel
Headers
| Name | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
account | string | Required | Tradovate account name, for example DEMO12345678. |
id | string | Required | Tradovate order id or an orderId assigned on an earlier place call. |
Code examples
- Python
- JavaScript
- cURL
import requests
token = 'my-secret-token'
url = "https://app.crosstrade.io/v1/api/tv/accounts/DEMO12345678/orders/123456789/cancel"
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}")
const token = 'my-secret-token';
const url = "https://app.crosstrade.io/v1/api/tv/accounts/DEMO12345678/orders/123456789/cancel";
fetch(url, {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({})
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
TOKEN="my-secret-token"
curl -X POST "https://app.crosstrade.io/v1/api/tv/accounts/DEMO12345678/orders/123456789/cancel" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
Response
The response is the response envelope with api set to cancel_order. The Tradovate cancellation result is returned in response.
{
"success": true,
"destination": "tradovate",
"api": "cancel_order",
"account": "DEMO12345678",
"response": {},
"duration_ms": 214
}
Platform nuances
- Tradovate uses
{id}in this route, while NT8 uses{orderId}. - The path accepts either the broker's Tradovate order id or your earlier caller-supplied
orderId. - If the order was copied, cancellation is replayed to mapped follower orders.
- Account Manager locks apply. On failure, the response is
{"success": false, "error": "<message>"}.
See the Tradovate API overview for the full field grammar, mutation safety guarantees, and error table.