GET /v1/hl/status
Plain-text status of Hyperliquid position recording: accounts, requests and coverage per coin.
Reports how far the recorder’s Hyperliquid collector has got: how many accounts it knows and has read, how many requests it made and how many were refused, and per coin how much of the venue’s open interest its maps cover.
Request
GET /v1/hl/status
HEAD /v1/hl/statusNo parameters.
Response
| Header | Value |
|---|---|
Content-Type | text/plain; charset=utf-8 |
Cache-Control | no-cache |
The body is text, one name value pair per line, followed by one line per coin.
Collector lines
| Name | Meaning |
|---|---|
accounts | Accounts known to the collector, from trades and the leaderboard seed |
accounts_read | Accounts whose positions were read at least once |
synced | Accounts whose positions are current: read, and kept up to date from the trade stream since |
with_positions | Accounts holding at least one position |
positions | Positions held by those accounts, all coins |
orders_read | Accounts whose orders were read at least once |
with_triggers | Accounts with at least one TP or SL order |
triggers | TP and SL orders counted |
requests | Requests sent to Hyperliquid since start |
failures | Requests that failed |
refused | Requests refused by Hyperliquid’s rate limit (HTTP 429) |
trades | Trades received from the websocket stream |
Coin lines
Each coin line starts with coin <COIN> and continues with name value pairs:
| Name | Meaning |
|---|---|
holders | Tracked accounts holding the coin |
triggers | Their TP and SL orders counted |
tracked_long, tracked_short | Long and short size of the tracked accounts, in coins, 4 decimals |
oi | Hyperliquid’s open interest, in coins (one side), 4 decimals |
coverage | max(tracked_long, tracked_short) / oi, from 0 to 1, 3 decimals |
runs | Level runs held in memory |
minutes | Footprint minutes held in memory |
latest | Time of the newest sample, ms since the epoch (0 before the first) |
Status codes
| Status | Body | When |
|---|---|---|
200 | The status | Hyperliquid recording is on |
404 | hyperliquid positions not recorded | The recorder runs with --hl-coins "" |
Example
curl http://127.0.0.1:8787/v1/hl/statusaccounts 18231
accounts_read 2406
synced 2391
with_positions 760
positions 5614
orders_read 588
with_triggers 78
triggers 352
requests 5488
failures 2
refused 0
trades 214305
coin BTC holders 341 triggers 121 tracked_long 3412.5521 tracked_short 3015.0874 oi 10664.1203 coverage 0.320 runs 18210 minutes 15 latest 1759580110000
coin ETH holders 298 triggers 96 tracked_long 61120.3310 tracked_short 58301.9002 oi 149074.0002 coverage 0.410 runs 14822 minutes 15 latest 1759580110000
coin HYPE holders 187 triggers 74 tracked_long 2210334.1000 tracked_short 1980112.5000 oi 6315240.0000 coverage 0.350 runs 9310 minutes 15 latest 1759580110000
coin SOL holders 203 triggers 61 tracked_long 512330.2200 tracked_short 488010.9100 oi 1313667.0000 coverage 0.390 runs 10544 minutes 15 latest 1759580110000The numbers above are illustrative. The coverage figures match what was measured after 15 minutes of recording.
Reading it
- Coverage says how complete the maps are. It rises fast in the first minutes, because the largest accounts are read first, and then grows slowly as smaller accounts are found.
refusedabove 0 means the budgets are too high for the IP. Each refusal pauses the affected budget for 60 seconds. Lower--hl-state-per-minor--hl-orders-per-min.syncedwell belowaccounts_readafter a while means the trade stream dropped. A gap marks every account unsynced until it is read again.latestnot moving means sampling stopped.
Parse the collector lines as name value; split coin lines on spaces and read the pairs after coin <COIN>.
The recorder writes the same text to its log once a minute.
Related
- Recorder: Hyperliquid explains coverage and the measured numbers.
/v1/hl/coinslists the coins without the statistics.