Copy Trading
Version: v1
Copy trading lets a master publish a futures trading strategy that slaves (followers) subscribe to. Every position the master opens or closes is mirrored onto each active slave account, scaled to the slave's allocated margin. A master earns a configurable share of the profit it generates for its followers.
Two roles, two controllers:
- Copy master —
/api/copy-master: create and manage a strategy, expose a public profile (leaderboard, analytics, positions, trades), and list followers. - Copy slave —
/api/copy-slave: create a follower account, subscribe to a master (start / update / finish copy), and read per-subscription analytics.
Endpoints require a Bearer token (see Auth) unless marked Public — those are unauthenticated and back the public master profile.
Shared paged/entity models (PositionDto, OrderDto, TradeDto) are documented
in Futures → Deals and Futures → Trade. List
endpoints wrap them in a PagedResult:
{
"items": [],
"page": 1,
"pageSize": 10,
"totalCount": 0,
"totalPages": 0
}
Copy Master
POST /api/copy-master
Summary:
Create a copy master account from an existing futures account. amount is the
initial equity moved into the strategy; slaveIncomePercentage is the master's
profit share, commissionRate the management fee.
Request model
{
"name": "string",
"strategyName": "string",
"strategyDescription": "string",
"leverage": 0,
"currencyCode": "string",
"slaveIncomePercentage": 0,
"commissionRate": 0,
"amount": 0,
"facebookUrl": "string",
"twitterUrl": "string",
"telegramUrl": "string",
"instagramUrl": "string"
}
Response model
{
"id": 0,
"avatarBlobId": "00000000-0000-0000-0000-000000000000",
"risk": 0,
"rank": 0,
"name": "string",
"strategyName": "string",
"strategyDescription": "string",
"futuresAccountId": 0,
"futuresAccountName": "string",
"leverage": 0,
"currencyCode": "string",
"slaveIncomePercentage": 0,
"commissionRate": 0,
"hashtags": ["string"],
"createdAt": "2026-07-03T00:00:00.000Z",
"closedAt": null,
"totalPnl": 0,
"totalPnlPercent": 0,
"todayPnlPercent": 0,
"followersEquity": 0,
"subscribersCount": 0,
"status": "string",
"globalRank": 0,
"tradingDays": 0,
"totalTrades": 0,
"maxDrawdownPercent": 0,
"balance": 0,
"equity": 0,
"usedMargin": 0,
"totalCommissions": 0,
"totalProfitShared": 0,
"dailyPnl": {}
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-master
Summary:
Get the current user's copy master accounts.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| onlyClosed | query | Return only closed strategies | No | boolean |
| roiFrom | query | Min ROI filter | No | number |
| roiTo | query | Max ROI filter | No | number |
| followersFrom | query | Min followers | No | integer |
| followersTo | query | Max followers | No | integer |
| daysFrom | query | Min trading days | No | integer |
| daysTo | query | Max trading days | No | integer |
| aumFrom | query | Min assets under management | No | number |
| aumTo | query | Max assets under management | No | number |
| sortPreset | query | Sort preset key | No | string |
Response model
Array of CopyMasterAccountDto (see the create response above).
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-master/public-masters
Summary:
Public. Paged leaderboard of open master strategies. Supports the same filters as the user list plus a drawdown range.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 10) | No | integer |
| roiFrom / roiTo | query | ROI range | No | number |
| followersFrom / followersTo | query | Followers range | No | integer |
| daysFrom / daysTo | query | Trading-days range | No | integer |
| aumFrom / aumTo | query | AUM range | No | number |
| drawdownFrom / drawdownTo | query | Max-drawdown range | No | number |
| sortPreset | query | Sort preset key | No | string |
Response model
PagedResult<CopyMasterAccountDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-master/{copyMasterFuturesAccountId}/analytics
Summary:
Public. Full profile of a single master (analytics, snapshots, currency breakdown).
Response model
CopyMasterAccountDto.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
| 404 | Master not found |
GET /api/copy-master/{copyMasterFuturesAccountId}/positions
Summary:
Public. Open positions on the master's profile.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 100) | No | integer |
Response model
PagedResult<PositionDto> (see Futures → Deals).
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-master/{copyMasterFuturesAccountId}/positions-history
Summary:
Public. Closed position history on the master's profile.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 100) | No | integer |
| sortBy | query | Field to sort by | No | string |
| sortDir | query | asc or desc | No | string |
| side | query | Filter by side | No | string |
| roiFrom / roiTo | query | ROI range | No | number |
| dateFrom / dateTo | query | Date range | No | date-time |
Response model
PagedResult<OrderDto> (see Futures → Deals).
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-master/{copyMasterFuturesAccountId}/trades
Summary:
Public. Trade history on the master's profile. Same query parameters as
positions-history.
Response model
PagedResult<TradeDto> (see Futures → Trade).
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-master/{copyMasterFuturesAccountId}/slaves
Summary:
List the slave accounts following this master (master owner only).
Response model
Array of CopySlaveAccountDto (see Create copy slave).
Response codes
| Code | Description |
|---|---|
| 200 | Success |
DELETE /api/copy-master/{copyMasterFuturesAccountId}
Summary:
Close and delete a copy master account.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
Copy Slave
POST /api/copy-slave
Summary:
Create a copy slave (follower) account. A slave account holds the margin used to mirror masters' positions.
Request model
{
"name": "string",
"leverage": 0,
"currencyCode": "string"
}
Response model
{
"id": 0,
"futuresAccountId": 0,
"leverage": 0,
"currencyCode": "string",
"name": "string",
"futuresAccountName": "string",
"openPositionsCount": 0,
"activeSubscriptionsCount": 0
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave
Summary:
Get the current user's copy slave accounts.
Response model
Array of CopySlaveAccountDto.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/following
Summary:
Following history — current holdings or past subscriptions across all of the user's slave accounts.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| onlyHistory | query | Return only closed subscriptions | No | boolean |
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 10) | No | integer |
Response model
{
"items": [
{
"id": 0,
"masterName": "string",
"avatarBlobId": "00000000-0000-0000-0000-000000000000",
"masterFuturesAccountId": 0,
"copySlaveFuturesAccountId": 0,
"currencyCode": "string",
"totalProfit": 0,
"totalProfitPercent": 0,
"openingDate": "2026-07-03T00:00:00.000Z",
"closingDate": null,
"initialEquity": 0,
"settledEquity": 0,
"commission": 0,
"reason": null,
"isActive": true
}
],
"page": 1,
"pageSize": 10,
"totalCount": 0,
"totalPages": 0
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
POST /api/copy-slave/startMasterCopy
Summary:
Start copying a master onto one of the user's slave accounts. margin allocates
the equity dedicated to this subscription.
Request model
{
"copyMasterFuturesAccountId": 0,
"copySlaveFuturesAccountId": 0,
"margin": 0
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
POST /api/copy-slave/updateMasterCopySettings
Summary:
Update an active subscription's settings (e.g. allocated margin).
Request model
{
"copyMasterFuturesAccountId": 0,
"copySlaveFuturesAccountId": 0,
"margin": 0
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
POST /api/copy-slave/finishMasterCopy
Summary:
Stop copying a master. Set closeOrders to also close the positions currently
mirrored from that master.
Request model
{
"copyMasterFuturesAccountId": 0,
"copySlaveFuturesAccountId": 0,
"closeOrders": false
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/subscriptions
Summary:
Active or historical subscriptions of a slave account, with PnL.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| active | query | Active (true) or historical (false); default true | No | boolean |
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 10) | No | integer |
Response model
PagedResult<CopyFollowingHistoryDto> (see Following history).
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/positions
Summary:
All open positions of a slave account (across every master it copies).
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 100) | No | integer |
Response model
PagedResult<PositionDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/trades
Summary:
Trade history of a slave account (across all masters). Supports the
sortBy, sortDir, side, roiFrom/roiTo, dateFrom/dateTo filters.
Response model
PagedResult<TradeDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/positions-history
Summary:
Closed position history of a slave account (across all masters). Same filters as
trades.
Response model
PagedResult<OrderDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/{copyMasterId}/positions
Summary:
Open positions of a slave copied from one specific master.
Parameters
| Name | Located in | Description | Required | Schema |
|---|---|---|---|---|
| page | query | Page number (default 1) | No | integer |
| pageSize | query | Page size (default 100) | No | integer |
Response model
PagedResult<PositionDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/{copyMasterId}/trades
Summary:
Trade history of a slave copied from one specific master. Same filters as the
slave-wide trades endpoint.
Response model
PagedResult<TradeDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/{copyMasterId}/positions-history
Summary:
Closed position history of a slave copied from one specific master.
Response model
PagedResult<OrderDto>.
Response codes
| Code | Description |
|---|---|
| 200 | Success |
GET /api/copy-slave/{copySlaveId}/{copyMasterId}/settings
Summary:
The slave's copy settings for a specific master.
Response model
{
"copyMasterFuturesAccountId": 0,
"copySlaveFuturesAccountId": 0,
"margin": 0
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
| 404 | Subscription not found |
GET /api/copy-slave/{copySlaveId}/{copyMasterId}/analytics
Summary:
The slave's analytics for following a specific master (PnL, trades, drawdown, commissions, funding).
Response model
{
"copySlaveFuturesAccountId": 0,
"copyMasterFuturesAccountId": 0,
"masterName": "string",
"currencyCode": "string",
"createTimestamp": "2026-07-03T00:00:00.000Z",
"deactivatedAt": null,
"isActive": true,
"deactivationReason": null,
"initialEquity": 0,
"totalSlaveProfit": 0,
"copyMasterProfit": 0,
"currentPeriodSlaveProfit": 0,
"totalPnl": 0,
"totalPnlPercent": 0,
"unrealizedPnl": 0,
"totalCommissions": 0,
"totalFunding": 0,
"tradingDays": 0,
"totalTrades": 0,
"dailyPnl": {},
"currencyAnalytics": {}
}
Response codes
| Code | Description |
|---|---|
| 200 | Success |
| 404 | Subscription not found |
DELETE /api/copy-slave/{id}
Summary:
Delete a copy slave account.
Response codes
| Code | Description |
|---|---|
| 200 | Success |