List Change History
Read the changes made to your settings through the Management API, newest first, one page at a time.
Management API changes only
The history covers changes made through the Management API. Changes made in the web app, the mobile app or by CrossTrade are not listed.
Elite
The Management API requires an Elite subscription. See Authentication.
Endpoint
GET https://app.crosstrade.io/v1/api/manage/audit
Headers
| Name | Required | Value |
|---|---|---|
| Authorization | Yes | Bearer <your API token> |
| If-None-Match | No | ETag from a previous read of the same page. Returns 304 with no body if nothing changed |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
limit | integer | No | 1 to 200. Default 50 |
cursor | string | No | meta.nextCursor from the previous page |
family | string | No | Only changes to one area: controls, kill_switch, news_lockout, nt8_connection_settings, nt8_monitors, tradovate_monitors, nt8_copiers, tradovate_copiers, account_groups, tradovate_atm_templates |
resourceId | string | No | Only changes to one resource: a monitor account name, or a copier, group or template id. Matches exactly, so use the spelling your requests used |
Code examples
- Python
- cURL
import requests
resp = requests.get(
"https://app.crosstrade.io/v1/api/manage/audit?limit=20&family=nt8_copiers",
headers={"Authorization": "Bearer YOUR_TOKEN"},
)
print(resp.status_code, resp.json())
curl "https://app.crosstrade.io/v1/api/manage/audit?limit=20&family=nt8_copiers" \
-H "Authorization: Bearer YOUR_TOKEN"
Responses
- 200
- Other responses
{
"success": true,
"data": [
{
"id": "8812345",
"time": "2026-10-02T14:31:07Z",
"requestId": "req_9f2c1a0b7d3e4f51",
"operation": "nt8.copiers.update",
"action": "update",
"resource": {
"type": "nt8_copier",
"broker": "nt8",
"id": "4b1f0c9e2d7a4c55b1e0"
},
"changes": [
{
"field": "active",
"before": true,
"after": false
}
]
}
],
"meta": {
"requestId": "req_0c6a1d2e3f405162",
"count": 1,
"nextCursor": null,
"etag": "\"c2:7Q0xMmZ3bTRkWmRVdz\""
}
}
| Status | error | When |
|---|---|---|
| 304 | If-None-Match matched; no body | |
| 400 | unexpected_body, unknown_parameter | A body, or an unknown or repeated query parameter, was sent |
| 401 | unauthorized | Missing or invalid token |
| 403 | elite_required, not_available | See Authentication |
| 422 | validation_failed | A query parameter is out of range or not an allowed value, or the cursor is not valid |
| 429 | rate_limited, too_many_concurrent_requests | See Rate limits |
| 503 | management_unavailable, management_busy, storage_unavailable | See Errors |
Entry fields
| Field | Description |
|---|---|
| id | Entry id. Newer entries have larger ids |
| time | When the change was saved (UTC) |
| requestId | The X-Request-Id of the request that made the change |
| operation | Which endpoint made it, for example nt8.copiers.update |
| action | create, update, delete or restart |
| resource | type, broker and id of what changed (id is null for your controls and other single settings) |
| changes | One item per changed field: field (dotted path), before and after. A create lists every field with before: null; a delete lists every field with after: null |
Long text is cut at 256 characters and long lists at 50 items (marked truncated).
Notes
- Requests that changed nothing (
changed: false) and requests that were refused are not recorded. - To read every page, keep calling with
cursorset to the previousmeta.nextCursoruntil it isnull. - Entries are kept for 180 days.
- Each call costs 2 units of your read budget.