Hyperliquid userFills limit: get more than 10,000 fills
Hyperliquid's userFills returns at most 2,000 fills, and userFillsByTimeonly reaches a wallet's 10,000 most recent. Older fills are gone from the API. Ironflow's GET /v1/fills?address= pages through every fill a wallet made since 25 May 2025, 1,000 per page.
- API
- GET https://api.ironflow.sh/v1/fills?address=0x... no key
- SQL
- SELECT ... FROM hl.wallet_fills WHERE address = '0x...'
- MCP
- get_fills on https://mcp.ironflow.sh/mcp
Free key14 days of history at 60 requests a minute. Without a key, the API reaches 24 hours back.
By requesting a key you agree to the Terms and API terms; see the Privacy Policy. We may email you when your key keeps hitting its limits; you can opt out at any time.
The short version#
- Hyperliquid: 2,000 fills per call and the 10,000 most recent per wallet.
- Every fill:
/v1/fills?address=, oldest first, with a cursor. History starts on 25 May 2025. - Who needs it: 221 wallets made more than 10,000 fills in the 24 hours to 12 November 2026.
Hyperliquid's limits#
| Request | Limit |
|---|---|
| userFills | At most the 2,000 most recent fills. No time range. |
| userFillsByTime | At most 2,000 per response. Only the 10,000 most recent fills are available. |
| userTwapSliceFills | At most the 2,000 most recent TWAP slice fills. |
From the info endpoint page. Each of these also costs weight 20 plus more for every 20 fills returned, out of 1,200 per minute per IP (rate limits).
Who hits 10,000#
In the 24 hours to 21:10 UTC on 12 November 2026, 95,256 wallets traded on Hyperliquid. 825 made more than 2,000 fills and 221 more than 10,000. The busiest made about 597,000. For those 221, userFillsByTime cannot reach back even one day.
Every fill over REST#
import os
import time
from datetime import datetime, timezone
import requests
ADDRESS = "0xYOUR_ADDRESS"
KEY = os.environ.get("IRONFLOW_KEY") # optional
headers = {"Authorization": f"Bearer {KEY}"} if KEY else {}
params = {"address": ADDRESS, "from": "-24h", "limit": 1000} # "-14d" with a free key
fills = []
while True:
r = requests.get("https://api.ironflow.sh/v1/fills", params=params, headers=headers, timeout=30)
if r.status_code == 429:
time.sleep(int(r.headers.get("Retry-After", 5)))
continue
r.raise_for_status()
body = r.json()
fills += body["data"]
if not body["pagination"]["has_more"]:
break
params["cursor"] = body["pagination"]["next_cursor"]
def utc(ms):
return datetime.fromtimestamp(ms / 1000, timezone.utc).strftime("%Y-%m-%d %H:%M")
print(len(fills), "fills,", utc(fills[0]["timestamp"]), "to", utc(fills[-1]["timestamp"]), "UTC")Keyless, for one of those wallets on 12 November 2026:
10606 fills, 2026-11-11 21:50 to 2026-11-12 21:30 UTC- With an
addressthere is no cap on the window per request, only your plan's history. - Each fill has
price,size,side,dir,fee,realized_pnl,oid,tidandhash. - Add
market=BTC-PERPfor one market. Endpoint reference: list fills.
SQL#
hl.wallet_fills holds the last 92 days sorted by wallet, so one address reads fast. Fills per hour:
curl -X POST https://api.ironflow.sh/v1/query \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{"sql": "SELECT toStartOfHour(ts) AS hour, count() AS fills FROM hl.wallet_fills WHERE address = '0xYOUR_ADDRESS' AND ts > now() - INTERVAL 1 DAY GROUP BY hour ORDER BY hour DESC LIMIT 3"}
EOFFor totals over months use hl.wallet_daily. Tables and limits are in the SQL guide.
How far back by plan#
| Access | Fill history | Limit |
|---|---|---|
| No key | 24 hours | 30 requests a minute, 300 a day |
| Free key | 14 days | 60 a minute |
| Explorer, $49 for 30 days | 90 days | 100 a minute |
| Builder, $149 for 30 days | 1 year | 1,000 a minute |
| Enterprise | Every fill since 25 May 2025 | 10,000 a minute |
The other route is Hyperliquid's S3 archive: node_fills_by_block has every fill of every wallet, in requester-pays buckets you download and filter yourself.
Questions#
What is the userFills limit on Hyperliquid?#
userFills returns at most a wallet's 2,000 most recent fills. userFillsByTime returns at most 2,000 per response, and only the 10,000 most recent fills are available to it. Older fills cannot be read from the info API.
How do I get more than 10,000 fills for a Hyperliquid wallet?#
Use an indexed API. Ironflow's GET https://api.ironflow.sh/v1/fills?address=0x... pages through every fill of that wallet, 1,000 per page, oldest first, from 25 May 2025 within your plan's history: 24 hours with no key, 14 days with a free key.
How many Hyperliquid wallets pass 10,000 fills?#
In the 24 hours to 21:10 UTC on 12 November 2026, 221 of 95,256 active wallets made more than 10,000 fills, so userFillsByTime could not reach back even one day for them. The busiest made about 597,000.
Can I rebuild a wallet's fills from Hyperliquid's S3 archive?#
Yes. node_fills_by_block in the requester-pays hl-mainnet-node-data bucket has every fill of every wallet, with older periods in node_fills. Download each hour, decompress it and keep the rows for the address. You pay the transfer.
Related guides#
- Hyperliquid trades and fills data: API, archive and history by wallet
- Hyperliquid historical liquidations API
- Hyperliquid data sources compared
- Hyperliquid SQL: query every fill, liquidation and transfer
References#
- Hyperliquid docs: Info endpoint. userFills, userFillsByTime and userTwapSliceFills limits.
- Hyperliquid docs: Rate limits. Request weights per IP.
- Hyperliquid docs: Historical data. node_fills_by_block on S3.
24 hours of fills need no key. A free key reaches 14 days, by email, no card.
Free key14 days of history at 60 requests a minute. Without a key, the API reaches 24 hours back.
By requesting a key you agree to the Terms and API terms; see the Privacy Policy. We may email you when your key keeps hitting its limits; you can opt out at any time.