Skip to main content

Update Monitor

Change one or more fields of a monitor. The change is validated as a whole before anything is saved.

Elite

The Management API requires an Elite subscription. See Authentication.

Endpoint​

PATCH https://app.crosstrade.io/v1/api/manage/nt8/monitors/{account}

Headers​

NameRequiredValue
AuthorizationYesBearer <your API token>
Content-TypeYesapplication/json
If-MatchNoETag from a previous read. The request fails with 412 if the monitor changed since then

Path parameters​

NameTypeDescription
accountstringAccount name, URL-encoded (exact match, including case; no leading or trailing spaces)

Body parameters​

Send any writable field from Monitor fields. Leave out what you do not want to change. Nested objects merge; arrays such as tradingWindows replace the saved array.

Code examples​

import requests

resp = requests.patch(
"https://app.crosstrade.io/v1/api/manage/nt8/monitors/Sim101",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={'dailyLossLimit': 400, 'autoFlattenTime': None},
)
print(resp.status_code, resp.json())

Responses​

{
"success": true,
"changed": true,
"data": {
"account": "Sim101",
"nickname": null,
"active": true,
"state": "active",
"stoppedReason": null,
"pnlMode": "standard",
"includeUnrealized": true,
"dailyProfitTarget": 1000,
"dailyLossLimit": 400,
"onProfitTarget": {
"flatten": true,
"signals": "block"
},
"onLossLimit": {
"flatten": true,
"signals": "block"
},
"minimumProfit": {
"enabled": false,
"trigger": 0,
"threshold": 0,
"flatten": true,
"signals": "block"
},
"trailingDrawdown": {
"enabled": false,
"basis": "pnl",
"amount": 0,
"unit": "percent",
"trigger": 0,
"flatten": true,
"signals": "block"
},
"accountFloor": null,
"autoFlattenTime": null,
"tradingWindows": [
{
"enabled": true,
"start": "09:30",
"end": "15:45",
"flattenAtEnd": false
}
],
"newsLockout": {
"blockSignals": true,
"flatten": false
},
"blockSignals": false,
"closingOnly": false,
"switchesLocked": false,
"positionProfitTarget": 0,
"positionLossLimit": 0,
"includeCommissions": true,
"cleanSessionProtection": true,
"outlierProtection": {
"enabled": true,
"sensitivity": "low"
},
"created": "2026-09-01T13:02:11Z",
"updated": "2026-10-02T14:31:07Z"
},
"changedFields": [
"autoFlattenTime",
"dailyLossLimit"
],
"delivery": {
"status": "queued",
"target": "nt8_addon"
},
"warnings": [],
"meta": {
"requestId": "req_9f2c1a0b7d3e4f51",
"etag": "\"c2:Tm90UmVhbEV0YWcwMg\""
}
}

When it takes effect​

NinjaTrader: sent to the add-on right after the save, or when it next connects. Tradovate: within about 10 seconds. Auto-flatten and flatten at the end of a trading window run on weekdays, for monitors that are active.

Notes​

  • To pause a monitor send {"active": false}. To resume a stopped monitor use Restart Monitor: active: true is refused while it is stopped.
  • null clears nickname, accountFloor and autoFlattenTime. "tradingWindows": [] removes every window.
  • You can send back a whole monitor from a GET. Read-only fields that match the saved values are ignored, updated is always ignored, and the response is changed: false when nothing differs. On a stopped or inactive monitor an echoed active: true is accepted as unchanged with a monitor_stopped_use_restart warning; use restart to resume it.
  • Times you send (autoFlattenTime, tradingWindows[].start and end) must be on a 5-minute mark.
  • A value saved before today's rules does not block other changes, and the fields you do not send are not rewritten.
  • A save in the web app right after an API change can overwrite it, because the web editor sends the whole monitor. If-Match protects against other API clients only.