Restart Monitor
Resume a monitor that is stopped (a risk rule fired) or inactive (NinjaTrader Clean Session Protection). This is the same as Restart in the web app.
Elite
The Management API requires an Elite subscription. See Authentication.
- NT8
- Tradovate
Endpoint
POST https://app.crosstrade.io/v1/api/manage/nt8/monitors/{account}/restart
Headers
| Name | Required | Value |
|---|---|---|
| Authorization | Yes | Bearer <your API token> |
| Content-Type | With a body | application/json |
| If-Match | No | ETag from a previous read. The request fails with 412 if the monitor changed since then |
Path parameters
| Name | Type | Description |
|---|---|---|
account | string | Account name, URL-encoded (exact match, including case; no leading or trailing spaces) |
Body parameters
None. Send an empty JSON object {} or no body at all.
Code examples
- Python
- cURL
import requests
resp = requests.post(
"https://app.crosstrade.io/v1/api/manage/nt8/monitors/Sim101/restart",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={},
)
print(resp.status_code, resp.json())
curl -X POST "https://app.crosstrade.io/v1/api/manage/nt8/monitors/Sim101/restart" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
Responses
- 200
- Other errors
{
"success": true,
"changed": true,
"data": {
"account": "Sim101",
"nickname": null,
"active": true,
"state": "active",
"stoppedReason": null,
"pnlMode": "standard",
"includeUnrealized": true,
"dailyProfitTarget": 1000,
"dailyLossLimit": 500,
"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": "15:55",
"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": [
"state"
],
"delivery": {
"status": "queued",
"target": "nt8_addon"
},
"warnings": [],
"meta": {
"requestId": "req_9f2c1a0b7d3e4f51",
"etag": "\"c2:Tm90UmVhbEV0YWcwMg\""
}
}
| Status | error | When |
|---|---|---|
| 400 | invalid_path | The account name in the path is not valid |
| 401 | unauthorized | Missing or invalid token |
| 403 | elite_required, not_available | See Authentication |
| 404 | not_found | No monitor for this account on your login |
| 409 | monitor_not_stopped | The monitor is not stopped |
| 409 | monitor_locked | Monitor Lock is holding this monitor until 5:00 PM ET |
| 409 | concurrent_modification | Another change to your monitors is in progress |
| 409 | would_retrip | The current P&L would stop the monitor again right away |
| 412 | precondition_failed | If-Match did not match |
| 422 | validation_failed | The body is not empty ({}) |
| 429 | rate_limited, too_many_concurrent_requests | See Rate limits |
| 503 | management_read_only, management_busy, storage_unavailable, outcome_unknown | See Errors |
Endpoint
POST https://app.crosstrade.io/v1/api/manage/tradovate/monitors/{account}/restart
Headers
| Name | Required | Value |
|---|---|---|
| Authorization | Yes | Bearer <your API token> |
| Content-Type | With a body | application/json |
| If-Match | No | ETag from a previous read. The request fails with 412 if the monitor changed since then |
Path parameters
| Name | Type | Description |
|---|---|---|
account | string | Account name, URL-encoded (matched in any case; no leading or trailing spaces) |
Body parameters
None. Send an empty JSON object {} or no body at all.
Code examples
- Python
- cURL
import requests
resp = requests.post(
"https://app.crosstrade.io/v1/api/manage/tradovate/monitors/DEMO12345678/restart",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={},
)
print(resp.status_code, resp.json())
curl -X POST "https://app.crosstrade.io/v1/api/manage/tradovate/monitors/DEMO12345678/restart" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
Responses
- 200
- Other errors
{
"success": true,
"changed": true,
"data": {
"account": "DEMO12345678",
"environment": "demo",
"nickname": null,
"active": true,
"state": "active",
"stoppedReason": null,
"pnlMode": "standard",
"includeUnrealized": true,
"dailyProfitTarget": 1000,
"dailyLossLimit": 500,
"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": "dollars",
"trigger": 0,
"flatten": true,
"signals": "block"
},
"accountFloor": null,
"autoFlattenTime": "15:55",
"tradingWindows": [
{
"enabled": true,
"start": "09:30",
"end": "15:45",
"flattenAtEnd": false
}
],
"newsLockout": {
"blockSignals": true,
"flatten": false
},
"blockSignals": false,
"closingOnly": false,
"switchesLocked": false,
"created": "2026-09-01T13:02:11Z",
"updated": "2026-10-02T14:31:07Z"
},
"changedFields": [
"state"
],
"delivery": {
"status": "automatic",
"target": "tradovate_engine"
},
"warnings": [],
"meta": {
"requestId": "req_9f2c1a0b7d3e4f51",
"etag": "\"c2:Tm90UmVhbEV0YWcwMg\""
}
}
| Status | error | When |
|---|---|---|
| 400 | invalid_path | The account name in the path is not valid |
| 401 | unauthorized | Missing or invalid token |
| 403 | elite_required, not_available | See Authentication |
| 404 | not_found | No monitor for this account on your login |
| 409 | monitor_not_stopped | The monitor is not stopped |
| 409 | monitor_locked | Monitor Lock is holding this monitor until 5:00 PM ET |
| 409 | concurrent_modification | Another change to your monitors is in progress |
| 409 | tradovate_not_linked, account_identity_unresolved | The monitor is on, and your Tradovate login is not linked or the account cannot be matched to it |
| 412 | precondition_failed | If-Match did not match |
| 422 | validation_failed | The body is not empty ({}) |
| 429 | rate_limited, too_many_concurrent_requests | See Rate limits |
| 503 | management_read_only, management_busy, storage_unavailable, outcome_unknown | See Errors |
When it takes effect
NinjaTrader: sent to the add-on right away, or when it next connects. Tradovate: within about 10 seconds.
Notes
- Restart also turns
blockSignalsandclosingOnlyoff, unlessswitchesLockedis on. - On NinjaTrader, restart is refused with
409 would_retripwhen the current P&L is already at or past the daily target or limit. Change the limit first. - Restart costs 2 units of your change budget.