FlowscopeDocs

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

Text
GET /v1/hl/status
HEAD /v1/hl/status

No parameters.

Response

HeaderValue
Content-Typetext/plain; charset=utf-8
Cache-Controlno-cache

The body is text, one name value pair per line, followed by one line per coin.

Collector lines

NameMeaning
accountsAccounts known to the collector, from trades and the leaderboard seed
accounts_readAccounts whose positions were read at least once
syncedAccounts whose positions are current: read, and kept up to date from the trade stream since
with_positionsAccounts holding at least one position
positionsPositions held by those accounts, all coins
orders_readAccounts whose orders were read at least once
with_triggersAccounts with at least one TP or SL order
triggersTP and SL orders counted
requestsRequests sent to Hyperliquid since start
failuresRequests that failed
refusedRequests refused by Hyperliquid’s rate limit (HTTP 429)
tradesTrades received from the websocket stream

Coin lines

Each coin line starts with coin <COIN> and continues with name value pairs:

NameMeaning
holdersTracked accounts holding the coin
triggersTheir TP and SL orders counted
tracked_long, tracked_shortLong and short size of the tracked accounts, in coins, 4 decimals
oiHyperliquid’s open interest, in coins (one side), 4 decimals
coveragemax(tracked_long, tracked_short) / oi, from 0 to 1, 3 decimals
runsLevel runs held in memory
minutesFootprint minutes held in memory
latestTime of the newest sample, ms since the epoch (0 before the first)

Status codes

StatusBodyWhen
200The statusHyperliquid recording is on
404hyperliquid positions not recordedThe recorder runs with --hl-coins ""

Example

Terminal
curl http://127.0.0.1:8787/v1/hl/status
Text
accounts 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 1759580110000

The 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.
  • refused above 0 means the budgets are too high for the IP. Each refusal pauses the affected budget for 60 seconds. Lower --hl-state-per-min or --hl-orders-per-min.
  • synced well below accounts_read after a while means the trade stream dropped. A gap marks every account unsynced until it is read again.
  • latest not 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.