API reference · v5

BloFin Copy Trading API

BloFin copy trading: rankings and search, profiles, performance and charts, open positions with live PnL, and closed positions.

Base URL https://api.kopyon.com/v5/blofin-copy-trading/ · send your key in the X-API-KEY header · trader id: The number in a master trader's BloFin URL.

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

Traders

GET /v5/blofin-copy-trading/traders

BloFin's futures lead traders and their figures over a period. BloFin pins its featured trader first, whatever the order.

Query parameters

NameTypeDescription
periodrequiredenumDays the figures cover7D, 30D, 90D
sortByenumdefault pnlWhat to rank byroi, pnl, aum, maxDrawdown, sharpeRatio, copiers, winRate
orderenumdefault DESCDESC, ASC
pageintdefault 1Page number
rowsintdefault 20Rows per page1 to 50

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.verifiedonly BloFin
traders[].sourceDetails.contractTypeonly BloFin
traders[].aumnumber
traders[].maxDrawdownnumber
traders[].winRatenumber
traders[].sharpeRationumber
traders[].copiersnumberCurrent copiers
traders[].maxCopiersnumber
hasMorealwaysbooleantrue when another page follows
totalalwaysnumber

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/blofin-copy-trading/traders?period=7D"
{
  "data": {
    "traders": [
      {
        "traderId": "55453804988",
        "name": "Trade Del Ciclo",
        "avatarUrl": "https://s2.blofin.com/static/user/img/profile/eadb180662cb40248a13bab9df173384.png",
        "roi": -0.07102929439326205,
        "pnl": -0.013853,
        "maxDrawdown": 0.061673784374236255,
        "winRate": 0,
        "aum": 39.40489,
        "sharpeRatio": 12.5766,
        "copiers": 730,
        "maxCopiers": 2000,
        "sourceDetails": {
          "verified": true,
          "contractType": "inverse"
        }
      },
      {
        "traderId": "1461833592",
        "name": "Dmytro_Dragon",
        "avatarUrl": "https://s2.blofin.com/static/imagewebp/afcb1ea070266955d9d70faa230a44a8d0e1823f1ffec-t5svfj.webp",
        "roi": 0.34367844184191976,
        "pnl": 690.3313337655231,
        "maxDrawdown": 0.021138861343826452,
        "winRate": 0.7474,
        "aum": 2496,
        "sharpeRatio": 1.44,
        "copiers": 0,
        "maxCopiers": 200,
        "sourceDetails": {
          "verified": false,
          "contractType": "linear"
        }
      },
      {
        "traderId": "22081811905",
        "name": "Zyro Trades",
        "avatarUrl": "https://s2.blofin.com/static/user/img/profile/52cc74618d644f7787df8be2e83c26c9.png",
        "roi": 0.1301797042611111,
        "pnl": 656.105709476,
        "maxDrawdown": 0.042247974956045875,
        "winRate": 1,
        "aum": 17811,
        "sharpeRatio": 0,
        "copiers": 4,
        "maxCopiers": 200,
        "sourceDetails": {
          "verified": false,
          "contractType": "linear"
        }
      }
    ],
    "hasMore": true,
    "total": 1844
  }
}

Search traders

GET /v5/blofin-copy-trading/traderSearch

Lead traders whose name contains this, by PnL, with 90-day figures. BloFin may pin its featured trader first.

Query parameters

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

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.verifiedonly BloFin
traders[].sourceDetails.contractTypeonly BloFin
traders[].aumnumber
traders[].maxDrawdownnumber
traders[].winRatenumber
traders[].sharpeRationumber
traders[].copiersnumberCurrent copiers
traders[].maxCopiersnumber
hasMorealwaysbooleantrue when another page follows
totalalwaysnumber

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/blofin-copy-trading/traderSearch?name=Trad"
{
  "data": {
    "traders": [
      {
        "traderId": "55453804988",
        "name": "Trade Del Ciclo",
        "avatarUrl": "https://s2.blofin.com/static/user/img/profile/eadb180662cb40248a13bab9df173384.png",
        "roi": -0.03483744938962647,
        "pnl": -0.007273,
        "maxDrawdown": 0.1939528047458904,
        "winRate": 1,
        "aum": 39.402407,
        "sharpeRatio": 12.5766,
        "copiers": 730,
        "maxCopiers": 2000,
        "sourceDetails": {
          "verified": true,
          "contractType": "inverse"
        }
      },
      {
        "traderId": "22081811905",
        "name": "Zyro Trades",
        "avatarUrl": "https://s2.blofin.com/static/user/img/profile/52cc74618d644f7787df8be2e83c26c9.png",
        "roi": 0.37425542526373035,
        "pnl": 1886.247343329201,
        "maxDrawdown": 0.25719851141955163,
        "winRate": 0.8275,
        "aum": 17811,
        "sharpeRatio": 0,
        "copiers": 4,
        "maxCopiers": 200,
        "sourceDetails": {
          "verified": false,
          "contractType": "linear"
        }
      },
      {
        "traderId": "27375139615",
        "name": "Bot Trade AI",
        "avatarUrl": "https://s2.blofin.com/static/user/img/profile/b75aefd4c8a24d78b5df243202df3c13.png",
        "roi": 5.168007708702006,
        "pnl": 1089.631273431209,
        "maxDrawdown": 0.9696646608313796,
        "winRate": 0.7088,
        "aum": 45,
        "sharpeRatio": 0,
        "copiers": 1,
        "maxCopiers": 200,
        "sourceDetails": {
          "verified": false,
          "contractType": "linear"
        }
      }
    ],
    "hasMore": true,
    "total": 267
  }
}

Trader profile

GET /v5/blofin-copy-trading/traderProfile

The trader's name, bio, copiers, profit share and whether they hide their trades.

Query parameters

NameTypeDescription
traderIdrequiredstringThe lead trader's uid, from traders

Response fields, in data

FieldTypeDescription
traderIdalwaysstring
namestring
avatarUrlstring
biostring
sourceDetails.profitSharePeriodonly BloFin
sourceDetails.joinedAtonly BloFin
sourceDetails.verifiedonly BloFin
sourceDetails.positionsHiddenonly BloFin
sourceDetails.contractTypeonly BloFin
sourceDetails.tagsonly BloFin
copiersnumber
maxCopiersnumber
aumnumber
profitSharenumber

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/blofin-copy-trading/traderProfile?traderId=55453804988"
{
  "data": {
    "traderId": "55453804988",
    "name": "Trade Del Ciclo",
    "avatarUrl": "https://blofin.com/cdn-cgi/image/width=64,height=64,format=webp,quality=100,fit=cover/https://s2.blofin.com/static/user/img/profile/eadb180662cb40248a13bab9df173384.png",
    "bio": "Sistema de copytrading automatizado impulsado por la comunidad de BloFin en Argentina. Estrategia simple en LONG de Bitcoin (BTC) con apalancamiento 10X utilizando DCA.\n\nAutomated copy trading system powered by the BloFin community in Argentina. Simple long strategy on Bitcoin (BTC) with 10X leverage using DCA.",
    "copiers": 730,
    "maxCopiers": 200,
    "aum": 1000,
    "profitShare": 0.16,
    "sourceDetails": {
      "profitSharePeriod": "WEEKLY",
      "joinedAt": 1782867607053,
      "verified": false,
      "positionsHidden": false,
      "contractType": "linear",
      "tags": [
        "low_frequency",
        "low_leverage"
      ]
    }
  }
}

Performance

GET /v5/blofin-copy-trading/performance

Return, realized PnL, win rate, drawdown and trades over a period.

Query parameters

NameTypeDescription
traderIdrequiredstringThe lead trader's uid, from traders
periodrequiredenumDays the figures cover7D, 30D, 90D, ALL

Response fields, in data

FieldTypeDescription
periodalwaysstring
roinumber
pnlnumber
maxDrawdownnumber
winRatenumber
winsnumber
tradesnumber
sharpeRationumber
sourceDetails.annualizedRoionly BloFin
sourceDetails.volumeonly BloFin

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/blofin-copy-trading/performance?traderId=55453804988&period=7D"
{
  "data": {
    "period": "7D",
    "roi": 0,
    "pnl": 0,
    "winRate": 0,
    "maxDrawdown": 0,
    "trades": 0,
    "wins": 0,
    "sourceDetails": {
      "annualizedRoi": 0,
      "sharpeRatio": 0,
      "volume": 0
    }
  }
}

Chart

GET /v5/blofin-copy-trading/traderChart

Cumulative ROI over the period, as a fraction, one point a day, oldest first.

Query parameters

NameTypeDescription
traderIdrequiredstringThe lead trader's uid, from traders
periodrequiredenumDays the figures cover7D, 30D, 90D, ALL

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/blofin-copy-trading/traderChart?traderId=55453804988&period=7D"
{
  "data": {
    "metric": "ROI",
    "points": [
      {
        "timestamp": 1791763200000,
        "value": 0
      },
      {
        "timestamp": 1791849600000,
        "value": 0
      },
      {
        "timestamp": 1791936000000,
        "value": 0
      }
    ]
  }
}

Open positions

GET /v5/blofin-copy-trading/openPositions

The trader's open positions as BloFin lists them, one row per opening order, sizes in the base asset (none for COIN-M contracts). BloFin sends no price: markPrice is its public mark price, and margin, unrealizedPnl and roi are worked out as its site does.

Query parameters

NameTypeDescription
traderIdrequiredstringThe lead trader's uid, 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[].positionIdstring
positions[].openedAtnumber
hiddenalwaysbooleantrue when the trader hides them from non-copiers; then the list is empty

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/blofin-copy-trading/openPositions?traderId=1461833592"
{
  "data": {
    "positions": [
      {
        "symbol": "SPCXUSDT",
        "side": "SHORT",
        "entryPrice": 144.31,
        "leverage": 20,
        "marginMode": "CROSS",
        "positionId": "17802618",
        "openedAt": 1792175810701,
        "sourceDetails": {},
        "size": 0.0025,
        "margin": 0.01803875,
        "markPrice": 143.47,
        "unrealizedPnl": 0.0021,
        "pnlCurrency": "USDT",
        "roi": 0.1164160488
      },
      {
        "symbol": "SPCXUSDT",
        "side": "SHORT",
        "entryPrice": 144.38,
        "leverage": 20,
        "marginMode": "CROSS",
        "positionId": "17802621",
        "openedAt": 1792175828373,
        "sourceDetails": {},
        "size": 0.0115,
        "margin": 0.0830185,
        "markPrice": 143.47,
        "unrealizedPnl": 0.010465,
        "pnlCurrency": "USDT",
        "roi": 0.1260562405
      },
      {
        "symbol": "SPCXUSDT",
        "side": "SHORT",
        "entryPrice": 144.37,
        "leverage": 20,
        "marginMode": "CROSS",
        "positionId": "17802623",
        "openedAt": 1792175830238,
        "sourceDetails": {},
        "size": 0.005,
        "margin": 0.0360925,
        "markPrice": 143.47,
        "unrealizedPnl": 0.0045,
        "pnlCurrency": "USDT",
        "roi": 0.1246796426
      }
    ],
    "hidden": false
  }
}

Position history

GET /v5/blofin-copy-trading/positionHistory

The trader's closed positions, newest first, with their return. BloFin sends no size or PnL for them.

Query parameters

NameTypeDescription
traderIdrequiredstringThe lead trader's uid, from traders
cursorstringThe nextCursor of the previous answer; leave it out for the first page
rowsintdefault 20Rows per page1 to 50

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.copiersonly BloFin
positions[].sourceDetails.copierPnlonly BloFin
nextCursorstringSend it back as cursor, with the same query, to read the next page; absent on the last page
hiddenalwaysbooleantrue when the trader hides them from non-copiers; then the list is empty

Example

curl -H "X-API-KEY: $KOPYON_KEY" \
  "https://api.kopyon.com/v5/blofin-copy-trading/positionHistory?traderId=1461833592"
{
  "data": {
    "positions": [
      {
        "symbol": "ZECUSDT",
        "side": "SHORT",
        "marginMode": "CROSS",
        "leverage": 10,
        "roi": 0.3696,
        "entryPrice": 1160.56,
        "closePrice": 1117.66,
        "openedAt": 1792269901841,
        "closedAt": 1792276480624,
        "updatedAt": 1792276480624,
        "positionId": "17817312",
        "sourceDetails": {
          "copiers": 0,
          "copierPnl": 0
        }
      },
      {
        "symbol": "ZECUSDT",
        "side": "SHORT",
        "marginMode": "CROSS",
        "leverage": 10,
        "roi": 0.3567,
        "entryPrice": 1159.98,
        "closePrice": 1118.6,
        "openedAt": 1792269872836,
        "closedAt": 1792276480547,
        "updatedAt": 1792276480547,
        "positionId": "17817308",
        "sourceDetails": {
          "copiers": 0,
          "copierPnl": 0
        }
      },
      {
        "symbol": "PUMPUSDT",
        "side": "SHORT",
        "marginMode": "CROSS",
        "leverage": 10,
        "roi": 0.3479,
        "entryPrice": 0.004484,
        "closePrice": 0.004328,
        "openedAt": 1792269267094,
        "closedAt": 1792284062315,
        "updatedAt": 1792284062315,
        "positionId": "17817264",
        "sourceDetails": {
          "copiers": 0,
          "copierPnl": 0
        }
      }
    ],
    "nextCursor": "YWI4ZjAyMjQ0NDhkNTM2NS4xNzgxNTM5OQ",
    "hidden": false
  }
}

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 BloFin 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]