Skip to main content

Update Copier

Change one or more fields of a trade copier. 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/copiers/{id}

Headers​

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

Path parameters​

NameTypeDescription
idstringThe copier id

Body parameters​

Send any writable field from Copier fields. Leave out what you do not want to change. Nested objects merge; arrays (followers, instruments) replace the saved array, and symbolReplacements replaces the saved map. To switch between single and group, send type, followers and groupName together: a group needs groupName and at least two followers, a single copier exactly one follower and groupName: null.

You can send back the whole object from a GET. Read-only fields (id, created, updated, followers[].environment) and fields this broker does not have are ignored when they equal the saved value (null for a field this broker does not have) and refused when they differ. updated is always ignored. If nothing differs, the response says changed: false. The whole object includes leader and followers, so on NinjaTrader this needs the add-on connected.

Code examples​

import requests

resp = requests.patch(
"https://app.crosstrade.io/v1/api/manage/nt8/copiers/4b1f0c9e2d7a4c55b1e0",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={'active': True, 'sizing': {'maxQuantity': 3}},
)
print(resp.status_code, resp.json())

Responses​

{
"success": true,
"changed": true,
"data": {
"id": "4b1f0c9e2d7a4c55b1e0",
"nickname": null,
"active": true,
"mode": "order",
"leader": "Sim101",
"type": "single",
"groupName": null,
"followers": [
{
"account": "DemoAccount"
}
],
"sizing": {
"method": "ratio",
"ratio": 1,
"quantity": null,
"maxQuantity": 3
},
"inverse": false,
"fillsOnly": false,
"instruments": [
"*"
],
"symbolReplacements": {},
"stealth": true,
"tandem": false,
"autoSync": {
"enabled": true,
"intervalSeconds": 10
},
"syncCorrection": {
"cooldownSeconds": 300,
"maxAttempts": 1
},
"reconnectDelayMs": 10000,
"strategyTagMode": "override",
"created": "2026-09-01T13:02:11Z",
"updated": "2026-10-02T14:31:07Z"
},
"changedFields": [
"active",
"sizing.maxQuantity"
],
"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: signal mode on the next signal, execution and order mode on the next fill. Turning on your first active Tradovate copier can take up to about 30 seconds.

Notes​

  • {"active": false} is always accepted, even for a copier that breaks today's rules or while the add-on is disconnected. When the body is exactly {"active": false}, it uses a separate stop budget (120 per minute, burst 60) that does not count toward your Changes or per-copier budgets, so you can turn off every copier at once. Anything else in the body makes it an ordinary change. See Turning copiers off quickly.
  • Turning a copier on, and every other change, uses the normal budgets: Changes (20 per minute, burst 10) and per copier (6 per minute, burst 3).
  • Turning a NinjaTrader copier on while the add-on is offline is accepted (unless one of its followers is shared with another copier): delivery.status is pending_connection and the add-on picks it up when it reconnects.
  • Sending leader, followers, type or groupName to a NinjaTrader copier, even with unchanged values, checks the accounts with your add-on, so it needs the add-on connected (409 addon_disconnected).
  • symbolReplacements replaces the whole map. Send the full set you want to keep, or {} to remove them all.
  • The copy-loop, duplicate and Auto-Sync checks run when you send type, leader, followers, groupName, instruments or autoSync, or turn the copier on. They compare against all your copiers, including ones that are off.
  • nickname: null removes the nickname.
  • Turning Auto-Sync off on NinjaTrader resets syncCorrection to 300 seconds and 1 attempt unless you send syncCorrection too.
  • A save in the web app right after an API change can overwrite it. If-Match protects against other API clients only.