API reference · v5

Bitget Copy Trading API

Bitget futures copy trading, classic elite traders and portfolios alike: rankings and leaderboards, profiles, performance, positions and history.

Base URL https://api.kopyon.com/v5/bitget-copy-trading/ · send your key in the X-API-KEY header · trader id: The traderUid or portfolio id in the trader's Bitget URL.

Get a free API key · Interactive reference with Try it · Authentication, paging and errors

Traders

GET /v5/bitget-copy-trading/traders

Bitget's futures elite traders, classic traders and portfolios alike, and their figures over a period; or, with ranking, one of its leaderboards.

Query parameters

NameTypeDescription
periodrequiredenumDays the figures cover7D, 30D, 90D, 180D
sortByenumdefault pnlWhat to rank by, highest firstpnl, roi, aum, copierPnl
rankingenumOne of Bitget's leaderboards instead of the whole list: its top 50 classic traders by PnL, ROI or copiers' PnL, or the new elite traders. sortBy is then ignoredpnl, roi, copierPnl, newTraders
pageintdefault 1Page number
rowsintdefault 20Rows per page1 to 20

Response fields, in data

FieldTypeDescription
traders[]alwaysarray
traders[].traderIdalwaysstringThe trader's id at the source; other operations take it as traderId
traders[].namealwaysstringDisplay name
traders[].avatarUrlstring
traders[].roinumber
traders[].pnlnumber
traders[].sourceDetails.kindonly Bitget
traders[].sourceDetails.scoreonly Bitget
traders[].aumnumber
traders[].maxDrawdownnumber
traders[].winRatenumber
traders[].copierPnlnumber
traders[].copiersnumberCurrent copiers
traders[].maxCopiersnumber
traders[].ranknumber
hasMorealwaysbooleantrue when another page follows

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/bitget-copy-trading/traders?period=7D"
{
  "data": {
    "traders": [
      {
        "traderId": "1487421647958179840",
        "name": "QIUAQ",
        "avatarUrl": "https://img.bgstatic.com/otc/images/20250125/1737783340528.png",
        "roi": 2.318,
        "pnl": 94100.37,
        "copierPnl": 0,
        "aum": 57258.56,
        "maxDrawdown": 0.16,
        "winRate": 0.375,
        "copiers": 0,
        "maxCopiers": 500,
        "sourceDetails": {
          "kind": "portfolio",
          "score": 0
        }
      },
      {
        "traderId": "b0b246728fb43a53a396",
        "name": "Armandino",
        "avatarUrl": "https://img.bgstatic.com/otc/images/20261015/1792036990791.png",
        "roi": 0.6108,
        "pnl": 60781.79,
        "copierPnl": 47345.45,
        "aum": 27306.16,
        "maxDrawdown": 0.1309,
        "winRate": 1,
        "copiers": 132,
        "maxCopiers": 600,
        "sourceDetails": {
          "kind": "classic",
          "score": 100
        }
      },
      {
        "traderId": "bfb04e768aba3053a691",
        "name": "AiTader",
        "avatarUrl": "https://img.bgstatic.com/otc/images/20261015/1792048653796.png",
        "roi": 0.438,
        "pnl": 43505.22,
        "copierPnl": 34271.04,
        "aum": 21254,
        "maxDrawdown": 0.1311,
        "winRate": 1,
        "copiers": 108,
        "maxCopiers": 600,
        "sourceDetails": {
          "kind": "classic",
          "score": 100
        }
      }
    ],
    "hasMore": true
  }
}

Search traders

GET /v5/bitget-copy-trading/traderSearch

Elite traders, classic and portfolios, whose name or username contains this, in Bitget's order. Bitget does not say which period the figures cover.

Query parameters

NameTypeDescription
namerequiredstringPart of the trader's name or username
pageintdefault 1Page number
rowsintdefault 20Rows per page1 to 20

Response fields, in data

FieldTypeDescription
traders[]alwaysarray
traders[].traderIdalwaysstringThe trader's id at the source; other operations take it as traderId
traders[].namealwaysstringDisplay name
traders[].avatarUrlstring
traders[].roinumber
traders[].pnlnumber
traders[].sourceDetails.kindonly Bitget
traders[].sourceDetails.scoreonly Bitget
traders[].aumnumber
traders[].maxDrawdownnumber
traders[].winRatenumber
traders[].copierPnlnumber
traders[].copiersnumberCurrent copiers
traders[].maxCopiersnumber
hasMorealwaysbooleantrue when another page follows

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/bitget-copy-trading/traderSearch?name=QIUA"
{
  "data": {
    "traders": [
      {
        "traderId": "1487421647958179840",
        "name": "QIUAQ",
        "avatarUrl": "https://img.bgstatic.com/otc/images/20250125/1737783340528.png",
        "roi": 3.1229,
        "pnl": 85655.7,
        "copierPnl": -42.35,
        "winRate": 0.3636,
        "maxDrawdown": 0.63,
        "copiers": 0,
        "maxCopiers": 500,
        "sourceDetails": {
          "kind": "portfolio"
        }
      }
    ],
    "hasMore": false
  }
}

Trader profile

GET /v5/bitget-copy-trading/traderProfile

The trader's name, copiers, profit share and copiers' assets.

Query parameters

NameTypeDescription
traderIdrequiredstringA classic trader's traderUid (hex) or a portfolio's portfolioId (digits), from traders

Response fields, in data

FieldTypeDescription
traderIdalwaysstring
namestring
avatarUrlstring
sourceDetails.kindonly Bitget
sourceDetails.daysActiveonly Bitget
sourceDetails.positionsHiddenonly Bitget
copiersnumber
maxCopiersnumber
totalCopiersnumber
aumnumber
profitSharenumber

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/bitget-copy-trading/traderProfile?traderId=1487421647958179840"
{
  "data": {
    "traderId": "1487421647958179840",
    "name": "QIUAQ",
    "avatarUrl": "https://img.bgstatic.com/otc/images/20250125/1737783340528.png",
    "copiers": 0,
    "maxCopiers": 500,
    "profitShare": 0.15,
    "aum": 57258.56,
    "sourceDetails": {
      "kind": "portfolio",
      "daysActive": 24
    }
  }
}

Performance

GET /v5/bitget-copy-trading/performance

Return, PnL, drawdown, win rate, trades and what copiers made over a period.

Query parameters

NameTypeDescription
traderIdrequiredstringA classic trader's traderUid (hex) or a portfolio's portfolioId (digits), from traders
periodrequiredenumDays the figures cover7D, 30D, 90D, 180D

Response fields, in data

FieldTypeDescription
periodalwaysstring
roinumber
pnlnumber
maxDrawdownnumber
copierPnlnumber
winRatenumber
winsnumber
tradesnumber
lossesnumber

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/bitget-copy-trading/performance?traderId=1487421647958179840&period=7D"
{
  "data": {
    "period": "7D",
    "roi": 2.318,
    "pnl": 94100.37,
    "maxDrawdown": 0.1600181346851229,
    "winRate": 0.375,
    "copierPnl": 0,
    "trades": 8,
    "wins": 3
  }
}

Chart

GET /v5/bitget-copy-trading/traderChart

Cumulative ROI or PnL, one point a day of the period, oldest first. A classic trader's starts at the period's start; a portfolio's counts from when the portfolio began.

Query parameters

NameTypeDescription
traderIdrequiredstringA classic trader's traderUid (hex) or a portfolio's portfolioId (digits), from traders
periodrequiredenumDays the figures cover7D, 30D, 90D, 180D
metricenumdefault ROIROI as a fraction, or PnL in USDTROI, PNL

Response fields, in data

FieldTypeDescription
metricalwaysstringWhat the points measure: ROI, PNL or BALANCE
points[]alwaysarray
points[].timestampalwaysnumberPoint time, in Unix milliseconds
points[].valuealwaysnumber

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/bitget-copy-trading/traderChart?traderId=1487421647958179840&period=7D"
{
  "data": {
    "metric": "ROI",
    "points": [
      {
        "timestamp": 1791820800000,
        "value": 0.9969
      },
      {
        "timestamp": 1791907200000,
        "value": 1.5557
      },
      {
        "timestamp": 1791993600000,
        "value": 1.2755
      }
    ]
  }
}

Open positions

GET /v5/bitget-copy-trading/openPositions

A portfolio's open positions, or a classic trader's open copy orders, one per order. unrealizedPnl is worked out from Bitget's mark price, as its site does, and a portfolio's roi is it over margin; Bitget's per-order ROI for classic traders is not, so they have none. A trader can hide them; then positions is empty and hidden is true.

Query parameters

NameTypeDescription
traderIdrequiredstringA classic trader's traderUid (hex) or a portfolio's portfolioId (digits), from traders

Response fields, in data

FieldTypeDescription
positions[]alwaysarray
positions[].symbolalwaysstring
positions[].sidealwaysLONG | SHORT
positions[].sizenumberPosition size, always positive; side gives the direction
positions[].entryPricealwaysnumber
positions[].markPricenumberThe exchange's mark price
positions[].leveragenumber
positions[].marginModeISOLATED | CROSS
positions[].unrealizedPnlnumberIn pnlCurrency
positions[].pnlCurrencystring
positions[].marginnumberMargin the position uses, in pnlCurrency
positions[].roinumberunrealizedPnl 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.orderIdonly Bitget
positions[].sourceDetails.realizedPnlonly Bitget
positions[].openedAtnumber
positions[].fundingPnlnumber
positions[].tradingFeenumberFee paid to open, as a positive cost
hiddenalwaysbooleantrue when the trader hides positions

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/bitget-copy-trading/openPositions?traderId=1487421647958179840"
{
  "data": {
    "positions": [
      {
        "symbol": "ETHUSDT",
        "side": "SHORT",
        "size": 124.05,
        "entryPrice": 2477.83295536988,
        "markPrice": 2371.33,
        "leverage": 75,
        "marginMode": "CROSS",
        "margin": 4032.49112743,
        "unrealizedPnl": 13211.6916136336,
        "pnlCurrency": "USDT",
        "roi": 3.2763101508,
        "openedAt": 1792150904619,
        "fundingPnl": 120.3062401199,
        "tradingFee": 448.2492735,
        "sourceDetails": {
          "realizedPnl": 11011.627338157597
        }
      },
      {
        "symbol": "BTCUSDT",
        "side": "SHORT",
        "size": 5.9154,
        "entryPrice": 85568.15969421674,
        "markPrice": 81089.6,
        "leverage": 75,
        "marginMode": "CROSS",
        "margin": 6575.57796364,
        "unrealizedPnl": 26492.4720151697,
        "pnlCurrency": "USDT",
        "roi": 4.0289191553,
        "openedAt": 1790518257731,
        "fundingPnl": 1388.55276043558,
        "tradingFee": 1244.946242622,
        "sourceDetails": {
          "realizedPnl": 19760.124243781098
        }
      }
    ],
    "hidden": false
  }
}

Position history

GET /v5/bitget-copy-trading/positionHistory

A portfolio's closed positions, with funding and net PnL, or a classic trader's closed copy orders, one per order, newest first.

Query parameters

NameTypeDescription
traderIdrequiredstringA classic trader's traderUid (hex) or a portfolio's portfolioId (digits), from traders
cursorstringThe nextCursor of the previous answer; leave it out for the first page
rowsintdefault 20Rows per page1 to 20

Response fields, in data

FieldTypeDescription
positions[]alwaysarray
positions[].positionIdstring
positions[].symbolalwaysstring
positions[].sideLONG | SHORT
positions[].statusstring
positions[].marginModeISOLATED | CROSS
positions[].leveragenumber
positions[].roinumber
positions[].entryPricenumber
positions[].closePricenumber
positions[].openedAtalwaysnumberWhen the position opened, in Unix milliseconds
positions[].closedAtnumberWhen the position closed, in Unix milliseconds
positions[].updatedAtalwaysnumberLast 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 Bitget
positions[].sourceDetails.fundingFeeonly Bitget
positions[].sourceDetails.positionAveragePriceonly Bitget
nextCursorstringSend 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/bitget-copy-trading/positionHistory?traderId=1487421647958179840"
{
  "data": {
    "positions": [
      {
        "positionId": "1494954416955965440",
        "symbol": "ETHUSDT",
        "side": "SHORT",
        "marginMode": "CROSS",
        "leverage": 75,
        "entryPrice": 2480.054320287341,
        "closePrice": 2478.391794656874,
        "openedAt": 1792148324784,
        "closedAt": 1792150828546,
        "updatedAt": 1792150828546,
        "closedVolume": 668.15,
        "grossPnl": 1110.816499986889,
        "fundingPnl": 0,
        "tradingFee": 1242.3696643875,
        "netPnl": -131.55316440061085,
        "pnlCurrency": "USDT",
        "sourceDetails": {}
      },
      {
        "positionId": "1494940094838063104",
        "symbol": "ETHUSDT",
        "side": "SHORT",
        "marginMode": "CROSS",
        "leverage": 75,
        "entryPrice": 2458.850901941671,
        "closePrice": 2468.989695177112,
        "openedAt": 1792138008387,
        "closedAt": 1792147413631,
        "updatedAt": 1792147413631,
        "closedVolume": 143.69,
        "grossPnl": -1456.843200001294,
        "fundingPnl": 0,
        "tradingFee": 265.530530775,
        "netPnl": -1722.373730776294,
        "pnlCurrency": "USDT",
        "sourceDetails": {}
      },
      {
        "positionId": "1494302934845865984",
        "symbol": "SAMSUNGUSDT",
        "side": "LONG",
        "marginMode": "CROSS",
        "leverage": 20,
        "entryPrice": 176.532235333329,
        "closePrice": 169.904682666665,
        "openedAt": 1791907261257,
        "closedAt": 1791995503089,
        "updatedAt": 1791995503089,
        "closedVolume": 150,
        "grossPnl": -994.1329000007,
        "fundingPnl": 15.499356,
        "tradingFee": 19.4870766375,
        "netPnl": -998.1206206382,
        "pnlCurrency": "USDT",
        "sourceDetails": {}
      }
    ]
  }
}

Transfer history

GET /v5/bitget-copy-trading/transferHistory

A portfolio's funds added from or moved back to the trader's spot account, newest first; Bitget keeps 180 days. Classic traders have none (422).

Query parameters

NameTypeDescription
traderIdrequiredstringA classic trader's traderUid (hex) or a portfolio's portfolioId (digits), from traders
cursorstringThe nextCursor of the previous answer; leave it out for the first page
rowsintdefault 20Rows per page1 to 20

Response fields, in data

FieldTypeDescription
transfers[]alwaysarray
transfers[].timealwaysnumberIn Unix milliseconds
transfers[].assetstring
transfers[].amountalwaysnumber
transfers[].fromstring
transfers[].tostring
transfers[].typealwaysdeposit | withdraw | transfer | vaultDeposit | vaultWithdraw | commission | otherdeposit and withdraw move the owner's money into or out of the account; transfer, to or from another address; vaultDeposit and vaultWithdraw, into or out of a vault; commission is a vault leader's share; other is a kind none of these fits, named in sourceDetails.type
nextCursorstringSend 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/bitget-copy-trading/transferHistory?traderId=1487421647958179840"
{
  "data": {
    "transfers": []
  }
}

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 change
  • positionEvents: Opened, increased, decreased, closed
  • positionHistory: Newly closed positions

Stream messages and webhook signatures

Try the Bitget Copy Trading API for free.

The free tier is 10,000 requests a month. That is enough to build a whole integration and test it against live data before you pay anything.

Usually answered within a day · [email protected]