Create Account Group
Create an account group. The response is 201 Created with a Location header.
Elite
The Management API requires an Elite subscription. See Authentication.
Endpoint
POST https://app.crosstrade.io/v1/api/manage/account-groups
Headers
| Name | Required | Value |
|---|---|---|
| Authorization | Yes | Bearer <your API token> |
| Content-Type | Yes | application/json |
Body parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | The name signals use |
destination | nt8 or tradovate | Yes | Cannot be changed later |
accounts | array of strings | Yes | 1 to 100 accounts. nt8: names exactly as your add-on lists them. tradovate: active accounts on your linked Tradovate login |
Code examples
- Python
- cURL
import requests
resp = requests.post(
"https://app.crosstrade.io/v1/api/manage/account-groups",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={'name': 'Evals', 'destination': 'nt8', 'accounts': ['PROP1234', 'PROP1235']},
)
print(resp.status_code, resp.json())
curl -X POST "https://app.crosstrade.io/v1/api/manage/account-groups" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Evals", "destination": "nt8", "accounts": ["PROP1234", "PROP1235"]}'
Responses
- 201
- Other errors
{
"success": true,
"changed": true,
"data": {
"id": "acctgrp_Xy12ab34Cd56ef78",
"name": "Evals",
"destination": "nt8",
"accounts": [
"PROP1234",
"PROP1235"
],
"created": "2026-10-02T14:31:07Z",
"updated": "2026-10-02T14:31:07Z"
},
"changedFields": [
"accounts",
"destination",
"name"
],
"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 |
| 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) |
| 409 | addon_disconnected | An nt8 group needs the add-on connected to check the accounts |
| 409 | concurrent_modification | Another change to your groups is in progress |
| 409 | group_limit_reached | You already have 50 groups |
| 409 | group_name_conflict | The name is used by another group on the same destination, or by one of your accounts |
| 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 | A read-only field (id, created, updated) was sent |
| 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
- An
nt8group needs your add-on connected so CrossTrade can check the accounts. tradovateaccount names match without regard to case and are saved with Tradovate's spelling.- Names are unique per destination without regard to case. A create is refused with
409 group_name_conflictif the name is taken, so a retried create cannot make a second group.