Install
openclaw skills install @joshavenue/hydromancer-hyperliquidHyperliquid market and account data through the Hydromancer API: REST (POST /info) for positions, fills, funding, liquidations, oracle prices, candles, vaults, staking, builder-code fills and HIP-3 / HIP-4 markets; WebSocket streams for trades, fills, liquidations, BBO, L2 and L4 order books with session replay; and Reservoir, a requester-pays S3 archive of historical Hyperliquid data in Parquet. Use when building Hyperliquid trading apps, bots, dashboards, copy-trading, tax tools, backtests or research, or when the task mentions Hyperliquid, HyperCore, HIP-3, HIP-4, builder codes, whale tracking, order book data, liquidations, funding history, wallet trade history, or Hydromancer.
openclaw skills install @joshavenue/hydromancer-hyperliquidDisclosure: this skill is maintained by the Hydromancer team; the author works at Hydromancer. The REST and WebSocket APIs need a Hydromancer API key. Reservoir needs only AWS credentials.
Hydromancer is a data provider for teams building on Hyperliquid. It serves HyperCore exchange data over a REST API, WebSocket streams and Reservoir, a historical archive on AWS S3. For a walkthrough of Hyperliquid's own API (endpoints, keys and limits, with code), see the Hyperliquid API guide.
| Need | Use | Reference |
|---|---|---|
| Account state, positions (one or up to 1,000 wallets per request), orders, fills, funding, ledger, PnL | REST POST /info | references/rest-api.md |
| Market data: candles, oracle / mark / mid prices, open interest, liquidations, L2 / L4 snapshots, market-wide position snapshots | REST POST /info | references/rest-api.md |
| HIP-4 prediction-market outcomes and HIP-3 perp DEXs | REST + WebSocket | references/rest-api.md |
| Live trades, fills, liquidations, BBO, L2 / L4 order books, TP/SL, funding, user and builder events | WebSocket wss://api.hydromancer.xyz/ws | references/websocket.md |
| Long history for backtests (fills, 1-second candles, daily snapshots, 1-minute L2 books) | Reservoir (S3, no API key) | references/reservoir.md |
| Budgets, endpoint weights, 429 handling | — | references/rate-limits.md |
| Task recipes (whale tracking, wallet trade history, builder revenue, liquidation feed, local L4 book) | — | references/recipes.md |
Authorization: Bearer $HYDROMANCER_API_KEY. WebSocket: ?token=$HYDROMANCER_API_KEY on the URL. Read the key from the environment; never print it or commit it.token query parameter (an Authorization header is answered with "Missing token query parameter"), and URLs can end up in proxy, load-balancer and crash logs. Open the socket from server-side code only, never from a browser or mobile client; never log the full URL and mask token= in errors (scripts/stream_trades.py does); use a separate key per app and environment; and if a URL may have been logged, ask Hydromancer (data@hydromancer.xyz) to revoke the key and issue a new one. Rotate keys on a regular schedule as well.https://api.hydromancer.xyz, testnet https://api-testnet.hydromancer.xyz (WebSocket: same hosts with wss://…/ws). If testnet returns 401 with your mainnet key, the key doesn't have testnet access; ask Hydromancer to enable it.POST /info with a JSON body whose type picks the operation, for example {"type": "clearinghouseState", "user": "0x…"}. Check the endpoint's own docs page for its fields; request types and fields don't always match Hyperliquid's own /info, so don't port Hyperliquid request shapes unchecked.Python-urllib agent are rejected with HTTP 403 and error code: 1010. Send your own User-Agent header (requests and the SDK already do).X-RateLimit-Limit response header. Most requests cost 2; heavy history and analytics endpoints cost more. Honor Retry-After on HTTP 429. See rate-limits.md..md), and the full index is at https://docs.hydromancer.xyz/llms.txt. Fetch the specific endpoint page before writing code against it.export HYDROMANCER_API_KEY=... # https://docs.hydromancer.xyz/readme/get-api-keys
python scripts/hydromancer.py info '{"type": "clearinghouseState", "user": "0xdfc24b077bc1425ad1dea75bcb6f8158e10df303"}'
python scripts/hydromancer.py positions 0xABC... 0xDEF... # batchClearinghouseStates
python scripts/hydromancer.py fills 0xABC... --hours 24 # userFillsByTime, follows the cursor
python scripts/hydromancer.py liquidations --coin BTC --hours 6
python scripts/stream_trades.py BTC # live trades (needs websockets)
scripts/hydromancer.py uses only the Python standard library. scripts/stream_trades.py needs websockets. Exact tested versions of every Python package this skill mentions are pinned in requirements.txt.
For order book streaming in Python, the official SDK (hydromancerxyz/hydromancer-sdk, Python 3.11+) maintains local L2 / L4 books for you; it reads HYDROMANCER_API_KEY from the environment. It isn't on PyPI, so pin it to a commit: requirements-sdk.txt pins the one this skill was tested with.
The scripts and examples in this skill contact only these hosts:
| Host | Used for |
|---|---|
api.hydromancer.xyz | REST (POST /info) and WebSocket (/ws), mainnet |
api-testnet.hydromancer.xyz | REST and WebSocket, testnet (scripts/hydromancer.py --testnet) |
docs.hydromancer.xyz | Docs pages and llms.txt, when you fetch documentation |
hydromancer-reservoir.s3.ap-northeast-1.amazonaws.com | Reservoir files, through the AWS CLI or DuckDB (plus your own AWS credential endpoints) |
extensions.duckdb.org | DuckDB downloads its httpfs and aws extensions from here the first time you query S3 |
pypi.org, files.pythonhosted.org | Only when you install the packages in requirements.txt |
github.com | Only if you install the Hydromancer SDK |
HYDROMANCER_API_KEY only to the two API hosts above, and AWS credentials only to AWS.userFillsByTime with its cursor, or read Reservoir fills (see recipes.md), and check each source's coverage notes first.userFillsByTime pages with a cursor. Pass cursor = "<time>_<txIndex>" from the last record of the previous page; startTime is ignored when cursor is set.batchClearinghouseStates returns {"successful_states": …, "failed_wallets": …}. Up to 1,000 users per request, 100 with "dex": "ALL_DEXES".{"type": "ping"} every 60 seconds; reply {"type": "pong"} or the connection is closed. Protocol-level ping handling in your library is not enough.sessionId from the connected message and the cursor from every message. On reconnect, add &sessionId=<id>&cursor=<last cursor> to the URL: the server restores your subscriptions and replays what you missed. On resync required, reconnect without both and rebuild from a REST snapshot.l4BookUpdates, 5 minutes for order updates and 15 minutes for other replayable channels (30 seconds where only the in-memory cache serves them). bbo, l2Book, allActiveAssetCtx and setOracleUpdates are live-only.perpSnapshots, spotSnapshots, accountValueSnapshots and similar return zstd-compressed MessagePack (zstandard and msgpack, pinned in requirements.txt) and have their own limit of 5 requests per 10 minutes. One market: send Accept-Encoding: zstd and the body comes back with Content-Encoding: zstd (without that header it is plain MessagePack; and if your HTTP client decodes Content-Encoding: zstd itself, as urllib3 2.x does when zstandard is installed and you send that header, you get plain MessagePack too). Several markets: a little-endian 4-byte count, then for each market a little-endian 4-byte length and a zstd frame."xyz:JPY", in the API and in Reservoir fills, candles and snapshots. Only Reservoir order-book file names drop the prefix.[] or null usually means no data for that input, not an error. Some docs examples use old timestamps (2009, 2023) or the zero address and come back empty; use a recent window and an active wallet. Some requests are snapshots of current state (registeredOutcomesSnapshot with old outcome_ids returns 500 "No outcome snapshots found"; omit the ids to get every active outcome).userFills takes an addresses list, not Hyperliquid's single user; l2Book and trades also accept a coins list. Check the channel's docs page before porting code from Hyperliquid's socket.