Data and limits
Quaestor reads Hyperliquid's public info API (POST https://api.hyperliquid.xyz/info). It is free and needs no key.
What is indexed
| Data | Endpoint | Reach |
|---|---|---|
| Fills | userFillsByTime (2,000 per page) |
Documented as the 10,000 most recent fills; paging forward by time often reaches further, but not back to the first fill of a long-running, busy account |
| Live fills | websocket userFills |
Up to 10 accounts at once (Hyperliquid's per-IP limit for user subscriptions); every account is also polled each minute |
| Funding | userFunding (paged by time) |
Full history |
| Deposits, withdrawals, transfers, liquidations | userNonFundingLedgerUpdates (paged by time) |
Full history |
| Account value and PnL | portfolio (all-time, month, week and day windows merged) |
Full account life, sampled by Hyperliquid |
| Positions and leverage | clearinghouseState |
Snapshot every ten minutes |
| Sub-accounts, API wallets, account type | subAccounts, extraAgents, userRole |
Current |
| BTC and HYPE daily closes | candleSnapshot |
About three years |
Requests are spaced 1.5 s apart, about 800 weight per minute, under Hyperliquid's 1,200.
The 10,000-fill limit
Returns, drawdown, Sharpe and Sortino use the account value and PnL history, which covers the whole account life. Trade statistics (win rate, leverage rebuilt from fills, wash checks) use the fills on record. When the first backfill of an account comes back full (about 10,000 fills), older fills are assumed out of reach and the record carries the partial-history note.
Full history from S3: switched off
Hyperliquid publishes every fill since launch in the S3 bucket hl-mainnet-node-data. That bucket is requester pays: every read is billed to the reader. Stage A does not read it.
The backfill is built so it can be plugged in later: apps/engine/src/backfill.ts defines a BackfillSource interface with an api source (on) and an s3 source (off, throws if called). To enable it, implement S3Source.fills() to stream node_fills_by_block for the account and set S3_BACKFILL=on with AWS credentials. Nothing else changes: fills land in the same table and the Merkle root covers them.
Example accounts
The site shows a handful of well-known public Hyperliquid vaults as example accounts (apps/engine/src/examples.ts). They are indexed from public data with the same code, labelled as examples on every page, never posted on chain, and never presented as Quaestor agents.