PUT Kill Switch
Turn the master kill switch on or off.
The Management API requires an Elite subscription. See Authentication.
When it is on, every incoming webhook signal for your account is rejected, closing signals included. It does not flatten positions, cancel working orders, stop copiers or monitors, or block orders placed through the trading API, the MCP tools or by hand in your platform. To block signals to a single account, set blockSignals on that account's monitor.
Endpoint
PUT https://app.crosstrade.io/v1/api/manage/controls/kill-switch
Headers
| Name | Required | Value |
|---|---|---|
| Authorization | Yes | Bearer <your API token> |
| Content-Type | Yes | application/json |
| If-Match | No | ETag from a previous read of the controls |
Body parameters
| Name | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | true turns the kill switch on, false turns it off. No other key is accepted |
Code examples
- Python
- JavaScript
- cURL
import requests
resp = requests.put(
"https://app.crosstrade.io/v1/api/manage/controls/kill-switch",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={"enabled": True},
)
print(resp.status_code, resp.json())
const resp = await fetch("https://app.crosstrade.io/v1/api/manage/controls/kill-switch", {
method: "PUT",
headers: { "Authorization": "Bearer YOUR_TOKEN", "Content-Type": "application/json" },
body: JSON.stringify({ enabled: true }),
});
console.log(resp.status, await resp.json());
curl -X PUT https://app.crosstrade.io/v1/api/manage/controls/kill-switch \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
Responses
The response carries the full controls after the change.
- 200
- Other errors
{
"success": true,
"changed": true,
"data": {
"killSwitch": true,
"closingOnly": false,
"tradingWindow": { "days": [], "start": "09:30", "end": "16:00", "closingOnlyAfter": null },
"monitorLock": false,
"enhancedClosingOnly": false
},
"changedFields": ["killSwitch"],
"delivery": { "status": "immediate", "target": "signal_gate" },
"warnings": [],
"meta": { "requestId": "req_9f2c1a0b7d3e4f51", "etag": "\"c2:Tm90UmVhbEV0YWcwMg\"" }
}
If the kill switch was already in the state you asked for, the response has "changed": false.
| Status | error | When |
|---|---|---|
| 400 | invalid_json | The body is not valid JSON |
| 401 | unauthorized | Missing or invalid token |
| 403 | elite_required | Your plan is not Elite |
| 403 | not_available | The Management API is not open for your account yet |
| 409 | concurrent_modification | Another kill switch change is in progress |
| 412 | precondition_failed | If-Match did not match |
| 413 | body_too_large | The body is larger than 64 KB |
| 415 | unsupported_content_type | The body is not application/json |
| 422 | validation_failed | The body is not exactly {"enabled": true} or {"enabled": false} |
| 429 | rate_limited (policy is kill, token or ip), too_many_concurrent_requests | See Rate limits |
| 503 | management_read_only, management_busy, storage_unavailable | See Errors |
When it takes effect
The next incoming webhook signal. A webhook that carries KILL_SWITCH=on or KILL_SWITCH=off changes the same setting. Your NinjaTrader add-on shows a message when the kill switch changes.
Notes
- This endpoint has its own budget (10 a minute, 5 at once), so other changes can never use it up. Your Token budget and the in-flight limit still apply. See Rate limits.
- Every change is recorded in your change history.