API reference · v5 Bybit Copy Trading API Bybit Copy Trading leaders: rankings, profiles, performance, open positions with live PnL, and closed positions.
Base URL https://api.kopyon.com/v5/bybit-copy-trading/ · send your key in the X-API-KEY header · trader id: The leaderMark in a leader's Bybit URL.
Get a free API key · Interactive reference with Try it · Authentication, paging and errors
traders TraderstraderSearch Search traderstraderProfile Trader profileperformance PerformancetraderChart ChartopenPositions Open positionspositionHistory Position historyTraders GET /v5/bybit-copy-trading/traders
Bybit's copy-trading leaders and their figures over a period. Bybit sends the figures formatted for display; one it formats some other way is left out.
Query parameters Name Type Description periodrequired enum Days the figures cover7D, 30D, 90D sortByenumdefault roi What to rank by, in Bybit's orderroi, maxDrawdown, copierPnl, winRate, profitLossRatio, sharpeRatio pageintdefault 1 Page number rowsintdefault 20 Rows per page1 to 20
Response fields, in data Field Type Description traders[]always array traders[].traderIdalways string The trader's id at the source; other operations take it as traderId traders[].namealways string Display name traders[].avatarUrlstring traders[].roinumber traders[].sourceDetails.profitLossRatioonly Bybit traders[].maxDrawdownnumber traders[].winRatenumber traders[].copierPnlnumber traders[].sharpeRationumber traders[].copiersnumber Current copiers traders[].maxCopiersnumber hasMorealways boolean true when another page follows totalalways number
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/traders?period=7D" {
"data" : {
"traders" : [
{
"traderId" : "gFwzzBrO/JX/TO5ws53IGw==" ,
"name" : "Alex9999" ,
"avatarUrl" : "https://s1.bycsi.com/bybit/deadpool/image-f917004e66dc4ee9811dead815813194.svg" ,
"roi" : 2.6024 ,
"maxDrawdown" : 0 ,
"copierPnl" : 0 ,
"winRate" : 0.75 ,
"copiers" : 4 ,
"maxCopiers" : 100 ,
"sourceDetails" : {
"profitLossRatio" : 6.47
}
},
{
"traderId" : "oY4aWT6GT1KChIHfBX+RIA==" ,
"name" : "TraderRobinHood" ,
"avatarUrl" : "https://s1.bycsi.com/bybit/deadpool/image-f917004e66dc4ee9811dead815813194.svg" ,
"roi" : 2.2923 ,
"maxDrawdown" : 0.0121 ,
"copierPnl" : 0 ,
"winRate" : 0.5062 ,
"sharpeRatio" : 0.74 ,
"copiers" : 0 ,
"maxCopiers" : 100 ,
"sourceDetails" : {
"profitLossRatio" : 2.3
}
},
{
"traderId" : "uYoAMHynm8F5oo1a2ZBBPA==" ,
"name" : "WRTRENDS" ,
"avatarUrl" : "https://s1.bycsi.com/fop/copytrade/34d089ea-9e9d-484f-9617-7c59a0891035.jpg" ,
"roi" : 2.2923 ,
"maxDrawdown" : 0.4911 ,
"copierPnl" : 397.83 ,
"winRate" : 0.65 ,
"sharpeRatio" : 0.76 ,
"copiers" : 11 ,
"maxCopiers" : 100 ,
"sourceDetails" : {
"profitLossRatio" : 22.37
}
}
],
"hasMore" : true ,
"total" : 7016
}
} Search traders GET /v5/bybit-copy-trading/traderSearch
Leaders whose name contains this, by ROI, with 90-day figures.
Query parameters Name Type Description namerequired string Part of the trader's name pageintdefault 1 Page number rowsintdefault 20 Rows per page1 to 20
Response fields, in data Field Type Description traders[]always array traders[].traderIdalways string The trader's id at the source; other operations take it as traderId traders[].namealways string Display name traders[].avatarUrlstring traders[].roinumber traders[].sourceDetails.profitLossRatioonly Bybit traders[].maxDrawdownnumber traders[].winRatenumber traders[].copierPnlnumber traders[].sharpeRationumber traders[].copiersnumber Current copiers traders[].maxCopiersnumber hasMorealways boolean true when another page follows totalalways number
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/traderSearch?name=Alex" {
"data" : {
"traders" : [
{
"traderId" : "4Zg+RlPOSjH2YDPFCq7bMg==" ,
"name" : "Alexandr Manto" ,
"avatarUrl" : "https://s1.bycsi.com/fop/copytrade/4b815cd2-a99a-45ba-a6f2-7a28a3703eb4.jpeg" ,
"roi" : 1.3626 ,
"maxDrawdown" : 0.2146 ,
"copierPnl" : 0 ,
"winRate" : 0.5405 ,
"sharpeRatio" : 1.96 ,
"copiers" : 3 ,
"maxCopiers" : 100 ,
"sourceDetails" : {
"profitLossRatio" : 0.05
}
},
{
"traderId" : "PjgNupwp+cCmIFa2CVFpMw==" ,
"name" : "Alexkan" ,
"avatarUrl" : "https://s1.bycsi.com/fop/copytrade/eb83524d-8ef7-4675-a583-772dfbeb01dc.jpg" ,
"roi" : 1.1857 ,
"maxDrawdown" : 0.1559 ,
"copierPnl" : 0 ,
"winRate" : 0.7458 ,
"sharpeRatio" : 2.44 ,
"copiers" : 0 ,
"maxCopiers" : 100 ,
"sourceDetails" : {
"profitLossRatio" : 0.05
}
},
{
"traderId" : "gFwzzBrO/JX/TO5ws53IGw==" ,
"name" : "Alex9999" ,
"avatarUrl" : "https://s1.bycsi.com/bybit/deadpool/image-f917004e66dc4ee9811dead815813194.svg" ,
"roi" : 0.816 ,
"maxDrawdown" : 0.4672 ,
"copierPnl" : -74.22 ,
"winRate" : 0.7316 ,
"sharpeRatio" : 0.08 ,
"copiers" : 4 ,
"maxCopiers" : 100 ,
"sourceDetails" : {
"profitLossRatio" : 0.96
}
}
],
"hasMore" : true ,
"total" : 28
}
} Trader profile GET /v5/bybit-copy-trading/traderProfile
The leader's name, bio, copiers and profit share.
Query parameters Name Type Description traderIdrequired string The leader's leaderMark, from traders
Response fields, in data Field Type Description traderIdalways string namestring avatarUrlstring biostring sourceDetails.tradingDaysonly Bybit sourceDetails.positionsHiddenonly Bybit copiersnumber maxCopiersnumber totalCopiersnumber profitSharenumber
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/traderProfile?traderId=gFwzzBrO%2FJX%2FTO5ws53IGw%3D%3D" {
"data" : {
"traderId" : "gFwzzBrO/JX/TO5ws53IGw==" ,
"name" : "Alex9999" ,
"avatarUrl" : "https://s1.bycsi.com/bybit/deadpool/image-f917004e66dc4ee9811dead815813194.svg" ,
"copiers" : 4 ,
"maxCopiers" : 100 ,
"totalCopiers" : 318 ,
"profitShare" : 0.1 ,
"sourceDetails" : {
"tradingDays" : 80 ,
"positionsHidden" : false
}
}
} Performance GET /v5/bybit-copy-trading/performance
Return, PnL, win rate, drawdown, risk ratios and what copiers made over a period.
Query parameters Name Type Description traderIdrequired string The leader's leaderMark, from traders periodrequired enum Days the figures cover7D, 30D, 90D
Response fields, in data Field Type Description periodalways string roinumber pnlnumber maxDrawdownnumber copierPnlnumber winRatenumber winsnumber sharpeRationumber sourceDetails.sortinoRatioonly Bybit sourceDetails.volatilityonly Bybit sourceDetails.profitLossRatioonly Bybit sourceDetails.tradesPerWeekonly Bybit lossesnumber
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/performance?traderId=gFwzzBrO%2FJX%2FTO5ws53IGw%3D%3D&period=7D" {
"data" : {
"period" : "7D" ,
"roi" : 2.6024 ,
"pnl" : 118.04294826 ,
"winRate" : 0.75 ,
"maxDrawdown" : 0 ,
"copierPnl" : 0 ,
"sharpeRatio" : 9999 ,
"wins" : 3 ,
"losses" : 1 ,
"sourceDetails" : {
"sortinoRatio" : 8.085 ,
"volatility" : 0 ,
"profitLossRatio" : 6.478 ,
"tradesPerWeek" : 4
}
}
} Chart GET /v5/bybit-copy-trading/traderChart
The leader's cumulative ROI or PnL, one point a day, oldest first.
Query parameters Name Type Description traderIdrequired string The leader's leaderMark, from traders periodrequired enum Days the figures cover7D, 30D, 90D metricenumdefault ROI ROI as a fraction, or PnL in USDT, since the period beganROI, PNL
Response fields, in data Field Type Description metricalways string What the points measure: ROI, PNL or BALANCE points[]always array points[].timestampalways number Point time, in Unix milliseconds points[].valuealways number
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/traderChart?traderId=gFwzzBrO%2FJX%2FTO5ws53IGw%3D%3D&period=7D" {
"data" : {
"metric" : "ROI" ,
"points" : [
{
"timestamp" : 1791676800000 ,
"value" : 2.6023
},
{
"timestamp" : 1791763200000 ,
"value" : 2.6023
},
{
"timestamp" : 1791849600000 ,
"value" : 2.6023
}
]
}
} Open positions GET /v5/bybit-copy-trading/openPositions
The leader's open positions. markPrice is Bybit's public mark price, and unrealizedPnl and roi (over margin) are worked out from it, as Bybit's site does; all three are left out when the price cannot be read. A leader can hide them; then positions is empty and hidden is true.
Query parameters Name Type Description traderIdrequired string The leader's leaderMark, from traders
Response fields, in data Field Type Description positions[]always array positions[].symbolalways string positions[].sidealways LONG | SHORT positions[].sizenumber Position size, always positive; side gives the direction positions[].entryPricealways number positions[].markPricenumber The exchange's mark price positions[].leveragenumber positions[].marginModeISOLATED | CROSS positions[].unrealizedPnlnumber In pnlCurrency positions[].pnlCurrencystring positions[].marginnumber Margin the position uses, in pnlCurrency positions[].roinumber unrealizedPnl over margin, as a fraction. Where the exchange sends its own (KuCoin; BingX, over the opening margin), it is passed on and can differ from that ratio positions[].sourceDetails.takeProfitPriceonly Bybit positions[].sourceDetails.stopLossPriceonly Bybit positions[].openedAtnumber hiddenalways boolean true when the leader hides positions
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/openPositions?traderId=oY4aWT6GT1KChIHfBX%2BRIA%3D%3D" {
"data" : {
"positions" : [
{
"symbol" : "EPICUSDT" ,
"side" : "SHORT" ,
"size" : 2455 ,
"entryPrice" : 0.27381733 ,
"leverage" : 10 ,
"marginMode" : "CROSS" ,
"margin" : 73.9298383 ,
"markPrice" : 0.2757 ,
"unrealizedPnl" : -4.62195485 ,
"pnlCurrency" : "USDT" ,
"roi" : -0.0625181247 ,
"openedAt" : 1792148942620 ,
"sourceDetails" : {}
},
{
"symbol" : "AKEUSDT" ,
"side" : "SHORT" ,
"size" : 240600 ,
"entryPrice" : 0.03069176 ,
"leverage" : 20 ,
"marginMode" : "CROSS" ,
"margin" : 365.64799616 ,
"markPrice" : 0.0300669 ,
"unrealizedPnl" : 150.341316 ,
"pnlCurrency" : "USDT" ,
"roi" : 0.4111640637 ,
"openedAt" : 1791078178813 ,
"sourceDetails" : {}
}
],
"hidden" : false
}
} Position history GET /v5/bybit-copy-trading/positionHistory
The leader's closed trades, newest first.
Query parameters Name Type Description traderIdrequired string The leader's leaderMark, from traders cursorstring The nextCursor of the previous answer; leave it out for the first page rowsintdefault 20 Rows per page1 to 50
Response fields, in data Field Type Description positions[]always array positions[].positionIdstring positions[].symbolalways string positions[].sideLONG | SHORT positions[].statusstring positions[].marginModeISOLATED | CROSS positions[].leveragenumber positions[].roinumber positions[].entryPricenumber positions[].closePricenumber positions[].openedAtalways number When the position opened, in Unix milliseconds positions[].closedAtnumber When the position closed, in Unix milliseconds positions[].updatedAtalways number Last change, in Unix milliseconds positions[].openedVolumenumber positions[].closedVolumenumber positions[].maxOpenInterestnumber positions[].grossPnlnumber positions[].fundingPnlnumber positions[].tradingFeenumber positions[].liquidationFeenumber positions[].netPnlnumber positions[].pnlCurrencystring positions[].sourceDetails.netProfitonly Bybit positions[].sourceDetails.fundingFeeonly Bybit positions[].sourceDetails.openFeeonly Bybit positions[].sourceDetails.closeFeeonly Bybit positions[].marginnumber nextCursorstring Send it back as cursor, with the same query, to read the next page; absent on the last page
Example curl -H "X-API-KEY: $KOPYON_KEY" \
"https://api.kopyon.com/v5/bybit-copy-trading/positionHistory?traderId=gFwzzBrO%2FJX%2FTO5ws53IGw%3D%3D" {
"data" : {
"positions" : [
{
"positionId" : "1262e2b4-1ab6-42d3-837f-5b9c28dd2c00" ,
"symbol" : "LUMIAUSDT" ,
"side" : "SHORT" ,
"marginMode" : "CROSS" ,
"leverage" : 10 ,
"roi" : 1.764 ,
"entryPrice" : 0.15186887 ,
"closePrice" : 0.12416192 ,
"openedAt" : 1791721179000 ,
"closedAt" : 1791734709539 ,
"updatedAt" : 1791734709539 ,
"closedVolume" : 3657.5 ,
"pnlCurrency" : "USDT" ,
"margin" : 56.82915343 ,
"sourceDetails" : {
"netProfit" : 100.25038458 ,
"fundingFee" : -0.02275147 ,
"openFee" : 0.61100645 ,
"closeFee" : 0.49953446
}
},
{
"positionId" : "5798878a-4fa3-4fbc-aa25-cf1ea5ef8fd1" ,
"symbol" : "LUMIAUSDT" ,
"side" : "LONG" ,
"marginMode" : "CROSS" ,
"leverage" : 10 ,
"roi" : -0.1885 ,
"entryPrice" : 0.15448847 ,
"closePrice" : 0.15186 ,
"openedAt" : 1791719525355 ,
"closedAt" : 1791721171835 ,
"updatedAt" : 1791721171835 ,
"closedVolume" : 2153.8 ,
"pnlCurrency" : "USDT" ,
"margin" : 33.96914678 ,
"sourceDetails" : {
"netProfit" : -6.40352057 ,
"fundingFee" : 0.01652719 ,
"openFee" : 0.36601101 ,
"closeFee" : 0.35978369
}
},
{
"positionId" : "74b69039-743f-4464-9a05-8177d04a74b8" ,
"symbol" : "LUMIAUSDT" ,
"side" : "SHORT" ,
"marginMode" : "CROSS" ,
"leverage" : 10 ,
"roi" : 0.6854 ,
"entryPrice" : 0.16667306 ,
"closePrice" : 0.15464 ,
"openedAt" : 1791705281240 ,
"closedAt" : 1791719521899 ,
"updatedAt" : 1791719521899 ,
"closedVolume" : 1995.4 ,
"pnlCurrency" : "USDT" ,
"margin" : 34.0262018 ,
"sourceDetails" : {
"netProfit" : 23.32228629 ,
"fundingFee" : -0.01678131 ,
"openFee" : 0.36583741 ,
"closeFee" : 0.33942553
}
}
],
"nextCursor" : "NTRmZTRmOTViMTI2NGI2Yy5SbTN6MEFGRTJyWnA"
}
} Stream and webhooks Paid plans can follow a trader in real time over wss://api.kopyon.com/v5/streamor through signed webhooks. Topics for this source:
openPositions: Open positions, whenever they changepositionEvents: Opened, increased, decreased, closedpositionHistory: Newly closed positionsStream messages and webhook signatures