Hyperliquid traders by address: the leaderboard, performance, open positions, and the order and position history Hyperliquid itself does not keep, rebuilt from fills. In the same JSON format as every other Kopyon source.
Trader id A trader's wallet address (0x…).
Pick one to see its parameters and a real response.
Every Hyperliquid account on its leaderboard, ranked by PnL, ROI or volume over a period.
Hyperliquid updates this leaderboard every few minutes; the API reads it again every 5 minutes.
periodenumrequiredsortByenumoptionalorderenumoptionalminAccountValuestringoptionalminVolumestringoptionalpageintoptionalrowsintoptionalThe trader's PnL, volume and PnL drawdown over a period, spot included, and Hyperliquid's ROI when the account is on its leaderboard.
traderIdstringrequiredperiodenumrequiredThe trader's PnL or account value over a period, spot included.
traderIdstringrequiredperiodenumrequiredmetricenumoptionalThe trader's perpetual positions on Hyperliquid's main exchange, which are public on-chain.
traderIdstringrequiredThe trader's executed perpetual orders, oldest first. Hyperliquid has no such history, so it is rebuilt from the account's perpetual fills: at most 2000 per call, the latest ones or the first ones from startTime on. From startTime, nextCursor reads on from the last fill; the latest fills cannot be paged back. Hyperliquid keeps each account's latest 10000 fills. An order cut at the edge of a call shows up in both, with the same orderId.
traderIdstringrequiredstartTimeintoptionalendTimeintoptionalcursorstringoptionalThe trader's closed perpetual positions, oldest first; a flip closes one position and opens another. Hyperliquid has no such history, so it is rebuilt from the account's perpetual fills: at most 2000 per call, the latest ones or the first ones from startTime on. From startTime, nextCursor reads on from the last fill; the latest fills cannot be paged back. Hyperliquid keeps each account's latest 10000 fills. A position already open at the first fill read is left out, since its entry is unknown. netPnl is omitted when the funding is too long to read.
traderIdstringrequiredstartTimeintoptionalendTimeintoptionalcursorstringoptionalMoney into and out of the trader's account, oldest first: deposits, withdrawals, transfers between addresses and vault deposits and withdrawals. Moves inside the account, staking and liquidations are left out. Hyperliquid answers 2000 ledger entries a call.
traderIdstringrequiredstartTimeintoptionalendTimeintoptionalcursorstringoptionalAccounts on the leaderboard whose name or address contains this, by all-time PnL, with all-time numbers.
namestringrequiredpageintoptionalrowsintoptionalWhat Hyperliquid shows about a trader: name, account value, the leaderboard's numbers per period, largest drawdown and days active. Hyperliquid has no avatar, bio or followers.
traderIdstringrequiredSet KOPYON_KEY in your environment. The ranking hands you ids for every other route.
# The ranking, best first
curl -H "X-API-KEY: $KOPYON_KEY" "https://api.kopyon.com/v5/hyperliquid/traders?period=1D"
# One trader's open positions
curl -H "X-API-KEY: $KOPYON_KEY" "https://api.kopyon.com/v5/hyperliquid/openPositions?traderId=TRADER_ID"import os, requests
API = "https://api.kopyon.com/v5/hyperliquid"
HEADERS = {"X-API-KEY": os.environ["KOPYON_KEY"]}
traders = requests.get(f"{API}/traders", params={"period": "1D"}, headers=HEADERS).json()["data"]["traders"]
trader_id = traders[0]["traderId"]
answer = requests.get(f"{API}/openPositions", params={"traderId": trader_id}, headers=HEADERS)
print(answer.json()["data"])const API = "https://api.kopyon.com/v5/hyperliquid";
const headers = { "X-API-KEY": process.env.KOPYON_KEY };
const { data } = await (await fetch(`${API}/traders?period=1D`, { headers })).json();
const traderId = data.traders[0].traderId;
const answer = await fetch(`${API}/openPositions?traderId=${traderId}`, { headers });
console.log((await answer.json()).data);Official SDKs for TypeScript and Python are generated from the same spec. Full reference
Subscribe once and the API polls for you. Hold a WebSocket open, or let signed webhooks POST each change to your server. Both count one request per check, however many of your clients follow the same trader.
const ws = new WebSocket("wss://api.kopyon.com/v5/stream?apiKey=" + KEY);
ws.onopen = () => ws.send(JSON.stringify({
type: "subscribe",
source: "hyperliquid",
topic: "positionEvents",
traderId: TRADER_ID,
}));
ws.onmessage = (m) => console.log(JSON.parse(m.data));{
"type": "events",
"source": "hyperliquid",
"topic": "positionEvents",
"traderId": "TRADER_ID",
"data": {
"events": [
{
"event": "opened",
"symbol": "SOLUSDT",
"side": "LONG",
"size": 620,
"position": {
"symbol": "SOLUSDT",
"side": "LONG",
"size": 620,
"entryPrice": 142.31,
"markPrice": 142.4,
"leverage": 20,
"unrealizedPnl": 55.8
}
}
]
}
}Same route names, same fields, same paging. Code you write for one works on the others.
Every plan reaches every source, and paid plans add the stream and webhooks. The rest is how fast you can call, how many calls you get, and what you may do with the data.
Capacity, uptime and redistribution rights are all negotiated. It's for firms reselling the data, or running it as core infrastructure.
A trader's wallet address (0x…).
As fresh as the exchange publishes it. Each request is read from the source when you make it; identical requests in the same second share one read. Exchanges refresh on their own schedule, from about a second to several minutes, and each route's reference says how often where we know it.
Yes. A free key gets 10,000 requests a month on every source and never asks for a card, and the console has a playground that runs any route or stream with your key. Without a key, each IP gets 10 calls a day per route.
Yes. Every source answers the same routes with the same field names: traders, traderProfile, openPositions, positionHistory and so on. Rates are fractions, sizes are in the base asset, and rankings page with page while histories page with a cursor. What only one exchange sends goes in sourceDetails.
You subscribe to a topic for one trader, and the API polls the exchange for you and sends only what changed: a WebSocket message, or a signed POST to your URL. Each poll counts one request, shared by all your connections and webhooks on the same trader. They come with every paid plan.
The answer says so with hidden: true and an empty list, rather than an empty list you would read as closed, and the stream sends a hidden message instead of closing everything.
No. Kopyon reads what traders share publicly on each exchange or blockchain. A few sources, such as OKX, Hyperliquid and dYdX, publish it through documented APIs; the rest through their websites. An exchange can change what it publishes, and the changelog in the reference says when that affects a route.
Yes. Dedicated plans negotiate limits, capacity and the right to redistribute the data. Tell us the volume you need on Telegram at @nunnito, or by email.
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] ·