Update Account Group
Rename an account group or replace its accounts.
Elite
The Management API requires an Elite subscription. See Authentication.
Endpoint
PATCH https://app.crosstrade.io/v1/api/manage/account-groups/{id}
Headers
| Name | Required | Value |
|---|---|---|
| Authorization | Yes | Bearer <your API token> |
| Content-Type | Yes | application/json |
| If-Match | No | ETag from a previous read. The request fails with 412 if the group changed since then |
Path parameters
| Name | Type | Description |
|---|---|---|
id | string | The resource id |
Body parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | No | New name |
accounts | array of strings | No | Replaces the whole list |
destination cannot be changed (422 immutable_field). Delete the group and create a new one instead. Sending the saved destination back is ignored, as are id and created when they equal the saved values and updated always, so you can PATCH the whole object from a GET. If nothing differs, the response says changed: false.
Code examples
- Python
- cURL
import requests
resp = requests.patch(
"https://app.crosstrade.io/v1/api/manage/account-groups/acctgrp_Xy12ab34Cd56ef78",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={'accounts': ['PROP1234']},
)
print(resp.status_code, resp.json())
curl -X PATCH "https://app.crosstrade.io/v1/api/manage/account-groups/acctgrp_Xy12ab34Cd56ef78" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"accounts": ["PROP1234"]}'
Responses
- 200
- Other errors
{
"success": true,
"changed": true,
"data": {
"id": "acctgrp_Xy12ab34Cd56ef78",
"name": "Evals",
"destination": "nt8",
"accounts": [
"PROP1234"
],
"created": "2026-09-01T13:02:11Z",
"updated": "2026-10-02T14:31:07Z"
},
"changedFields": [
"accounts"
],
"delivery": {
"status": "immediate",
"target": "signal_gate"
},
"warnings": [],
"meta": {
"requestId": "req_9f2c1a0b7d3e4f51",
"etag": "\"c2:Tm90UmVhbEV0YWcwMg\""
}
}
| Status | error | When |
|---|---|---|
| 400 | invalid_json | The body is not valid JSON |
| 400 | invalid_path | The id in the path is not valid |
| 401 | unauthorized | Missing or invalid token |
| 403 | elite_required, not_available | See Authentication |
| 404 | account_not_found | An account is not on that destination: not listed by your add-on (nt8; Backtest and Playback101 never are) or not an active account on your linked Tradovate login (tradovate) |
| 404 | not_found | No such group on your login |
| 409 | addon_disconnected | accounts was sent for an nt8 group while the add-on is not connected |
| 409 | concurrent_modification | Another change to your groups is in progress |
| 409 | group_name_conflict | The name is used by another group on the same destination, or by one of your accounts |
| 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 | field_read_only, immutable_field | A read-only field, or destination, was sent with a value different from the saved one |
| 422 | validation_failed | A field is invalid, for example an account name with leading or trailing spaces, a tab or a non-breaking space |
| 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
The next incoming webhook signal.
Notes
- Sending
accountsfor annt8group checks them with your add-on, so it needs the add-on connected even when the list is unchanged. A rename alone does not.