Hyperliquid Rate Limits: What is it & Solution
Official Hyperliquid API throttles you very quickly. Discover how Hyperliquid’s three limit systems work — and what a token-based feed changes.

Hyperliquid API Rate Limits: Limits, Calculations and Practical Fixes
Hyperliquid’s official REST API has a shared limit of 1,200 weight points per minute per IP. Trading actions also face separate address-based limits, while WebSocket connections and subscriptions have their own caps. Increasing your polling interval can help with one limit without solving the others.
The practical question is not just “How many requests can I send?” It is “Which requests does my application need to make?”
This guide explains the limits, then works through three examples: refreshing a wallet dashboard, streaming order books and backfilling trade history.
First, identify which limit you are hitting
| Symptom | What to check | Practical response |
|---|---|---|
| REST requests are throttled across several services | Shared per-IP weight budget | Account for every service using that IP; batch or reduce reads |
| Trading actions are restricted despite light REST traffic | Address-based action allowance | Inspect the address’s usage; reduce unnecessary actions |
| More user subscriptions cannot be added | WebSocket user and subscription caps | Check distinct users, not just connection count |
| Older fills never appear after repeated requests | Historical-data availability | Change the data source, not the retry interval |
| Actions are constrained during heavy exchange activity | Congestion-based allocation | Avoid duplicate actions and unnecessary cancel retries |
These are different mechanisms. In particular, moving market-data reads to another provider does not remove Hyperliquid’s limits on trading actions.

System 1: per-IP limits
REST: request weight, not simply request count
The official REST API combines requests into a 1,200-weight-per-minute budget per IP. Different requests consume different amounts.
| Request | Official weight |
|---|---|
l2Book, allMids, clearinghouseState, orderStatus, spotClearinghouseState, exchangeStatus | 2 |
userRole | 60 |
| Other documented info requests | 20, before applicable surcharges |
| Exchange request | 1 + floor(batch_length / 40) |
Historical endpoints such as userFills, userFillsByTime, historicalOrders, fundingHistory and userFunding add weight for returned items. The surcharge is one point per 20 items; candleSnapshot adds one per 60 items.
For example, a userFills response containing 2,000 fills costs 120 points: 20 base points plus 100 for the returned fills. Ten such responses consume 1,200 points—the entire minute’s budget, before any other requests.
This matters when a dashboard and trading service share an outbound IP. Their REST reads and exchange requests draw from the same IP budget. Heavy data fetching can leave less capacity for placing or cancelling orders.
WebSocket: connections are only one constraint
The official limits apply per IP:
| Limit | Allowance |
|---|---|
| Concurrent connections | 10 |
| New connections per minute | 30 |
| Total subscriptions | 1,000 |
| Unique users across user-specific subscriptions | 10 |
| Messages sent to Hyperliquid per minute | 2,000 |
Simultaneous inflight post messages | 100 |
Opening more connections from the same IP does not raise the ten-user cap. A wallet tracker needs to count the distinct users in its subscriptions, not just its sockets.
For a broader explanation of available streams, see Hyperliquid data feeds: every real-time stream, explained.
HyperEVM RPC
The public rpc.hyperliquid.xyz/evm endpoint allows 100 JSON-RPC requests per minute per IP. This is a separate interface from the HyperCore info and exchange APIs; its allowance should not be treated as their request budget.
System 2: address-based trading limits
Hyperliquid also limits trading actions per address. The allowance grows by one request per USDC of cumulative traded volume, with an initial buffer of 10,000 requests. Once rate-limited, an address is allowed one request every ten seconds. These limits apply to actions, not info queries, and subaccounts are treated as separate users.
Three details matter:
- Cancels have additional headroom. Their cumulative limit is
min(limit + 100,000, limit × 2), wherelimitis the normal action allowance. This is extra capacity, not unlimited cancellations. - Batching does not reduce address usage. A batch of 79 orders is one HTTP request with an IP weight of two, but it still counts as 79 requests against the address allowance.
- Open orders have a separate cap. The default is 1,000, increasing by one per 5 million USDC of volume, up to 5,000. When an account already has at least 1,000 open orders, new reduce-only and trigger orders are rejected.
If actions are throttled while data queries still work, inspect the official userRateLimit response. It exposes cumulative volume and request-usage fields; looking only at your HTTP requests per second can miss the actual constraint.
System 3: congestion limits
During high congestion, an address is limited to twice its previous-day maker share of block space. The share is calculated once per UTC date and uses the same asset scaling as volume contributions toward fee tiers.
A larger data-provider plan does not change that allocation. Under congestion, avoid repeatedly resending cancels whose results have already been returned. Separate the need for fresher market data from the need to submit another trading action.
The history limit that retries cannot fix
The official userFills endpoint returns at most the 2,000 most recent fills. userFillsByTime returns at most 2,000 fills per response and makes only the most recent 10,000 fills available.
That is a data-availability limit, not just a throughput limit. Waiting for a new minute or retrying the same query does not recover records outside the endpoint’s available history.
For older records, choose a source with the coverage you need. Check the dataset, market and date range rather than treating “historical data” as a promise of complete history for every address.
What changes with Hydromancer?
Hydromancer’s data API uses tiered, per-key allowances rather than the official API’s per-IP REST budget. The published REST and WebSocket limits are:
| Hydromancer allowance | Starter | Growth | Scale |
|---|---|---|---|
| REST weight per minute | 5,000 | 20,000 | 50,000 |
| WebSocket connections | 50 | 500 | 1,000 |
| Total subscriptions | 500 | 5,000 | 10,000 |
| Messages sent to Hydromancer per minute | 300 | 3,000 | 6,000 |
l2Book coins | 10 | 50 | 100 |
The REST weight table and WebSocket limits are the references to use for capacity planning. Weights are provider-specific; an official API weight point is not a universal unit that transfers between providers.
Hydromancer’s default REST request weight is two, but exceptions include ten-point historical-fill requests, twenty-point performance endpoints, hundred-point builder-approved history endpoints and per-user batch pricing. Certain market-data snapshots also have a separate limiter: five calls per ten minutes, with l4Book allowing ten per five minutes.
For supported multi-address WebSocket feeds, each address counts toward the total subscription allowance. “Unlimited per key” in a channel-specific row does not remove the plan’s total subscription cap. All-market feeds also have separate permission requirements.
The benefit is therefore not “no limits.” It is a different data allowance and additional ways to organise queries. Reads sent to Hydromancer no longer consume the official API’s IP budget, but trading actions sent to Hyperliquid remain subject to its rules.
Three practical ways to reduce API requests
The examples below are calculations using published limits and documented request formats, not measured performance benchmarks. They exclude unrelated traffic and retries; production applications should leave headroom rather than operate at a limit continuously.
1. Refresh 100 wallets with a batch request
Suppose a dashboard refreshes the native perpetual positions of 100 wallets every ten seconds. Calling the official clearinghouseState endpoint separately for each wallet produces 600 requests per minute. At two points each, that consumes the full 1,200-weight IP budget.
Hydromancer’s batchClearinghouseStates accepts multiple addresses in one request. Its published weight is two points per user, capped at 100 points per request. The same refresh schedule therefore uses six batch requests and 600 Hydromancer weight points per minute.
| Approach | Requests per minute | Weight per minute |
|---|---|---|
| Official API: 100 individual requests per refresh | 600 | 1,200 against the official IP budget |
| Hydromancer: one 100-wallet batch per refresh | 6 | 600 against the Hydromancer key budget |

This is not just a larger allowance: it also reduces the number of HTTP requests your application manages.
Implementation details matter:
- Put the wallet addresses in the endpoint’s
usersarray. Omittingdexselects the native DEX. - Inspect both
successful_statesandfailed_wallets. Retry failed addresses rather than repeating successful work. - Treat
ALL_DEXESseparately. It reduces the maximum batch size from 1,000 to 100 users, and the published cost is multiplied by the number of DEXes.
See the batchClearinghouseStates request and response schema.
2. Stream order books instead of polling them
Polling ten markets once per second creates 600 official l2Book requests per minute. At two points per request, that also consumes the entire 1,200-weight minute.[1]
For a continuously updating display, use a WebSocket stream. The official API supports live data subscriptions; Hydromancer additionally documents multi-coin l2Book subscription messages.[1][6]
For example, send this payload over an authenticated Hydromancer WebSocket connection:
{
"method": "subscribe",
"subscription": {
"type": "l2Book",
"coins": ["BTC", "ETH"]
}
}This is a subscription payload, not a complete connection client. Connection setup, heartbeat handling and reconnection still need to be implemented.
For a multi-coin subscription, data is an array of snapshots. Keep the latest snapshot for each coin and replace that coin’s stored book when a new snapshot arrives. Do not parse the array as a single book or apply full snapshots as incremental price-level changes.
Serve that cached state to your application rather than having each viewer poll upstream. This removes recurring REST book requests, but the WebSocket’s coin, subscription and message limits still apply.
Choose the amount of detail you actually need. Our BBO vs L2Book vs L4Book guide explains the trade-offs between top-of-book prices, aggregated depth and individual orders.
3. Backfill a fixed time range and save your progress
A backfill should move through history, not repeatedly download the latest page.
Hydromancer’s userFillsByTime supports time-range queries and a cursor composed of the last record’s time and txIndex, separated by an underscore. Its published request weight is ten points.
A practical backfill sequence is:
- Choose a fixed
startTimeandendTime, in Unix milliseconds. - Request the first page and save the returned records.
- Build the next cursor from the final record’s
timeandtxIndex. When a cursor is supplied,startTimeis ignored. - Keep the same
endTimeon subsequent requests so the target range does not keep moving. - Persist your checkpoint only after the page has been stored successfully. Use deduplication so retrying a page does not create duplicate records.
- Run requests through a bounded queue, leaving capacity for live application queries.
Do not replace the documented composite cursor with a timestamp-only shortcut. The API exposes both components for pagination.
Coverage still matters. Hydromancer documents full fill availability from 28 July 2025, with earlier history available for most traders but exceptions for some high-volume addresses. TWAP fills are included from 2 August 2025.
For bulk market research, downloading date-partitioned archive files may be more appropriate than querying wallets individually. Reservoir’s Hyperliquid historical S3 archive explains the datasets and access model. It requires no Hydromancer API key, but uses AWS requester-pays S3, so AWS request and transfer charges can apply.
Reservoir’s Hyperliquid page specifies complete data from 28 July 2025 onward. Check the relevant dataset’s coverage instead of assuming every record since the exchange’s launch is available.
Measure the workload before increasing capacity
Log the endpoint, request frequency, response status and retry count for each service. For WebSockets, track active subscriptions and reconnect attempts as well as connection count. This helps distinguish useful traffic from repeated failures or unnecessary refreshes.
Hydromancer’s apiUsage endpoint provides daily statistics by request type, including total, successful and failed requests, average processing time and billable tokens consumed.
The request body for a seven-day view is:
{
"type": "apiUsage",
"days": 7
}Send it to the authenticated REST API using the apiUsage documentation. Daily totals are useful for finding expensive workloads, but they do not replace minute-level client logs for diagnosing bursts. Billable tokens should not be assumed to equal rate-limit weight points.
When a request is throttled, avoid immediate retry loops. Honour a retry delay if the service provides one; otherwise use bounded exponential backoff with jitter. For trading actions, reconcile the result before resubmitting rather than treating every timeout as proof that the original action failed.
Frequently asked questions
What is the Hyperliquid API rate limit?The official REST budget is 1,200 weight points per minute per IP. Endpoint weights vary. Trading actions also face address-based allowances and congestion limits, while WebSockets have separate connection, subscription and message caps.
Do data requests and orders share a rate limit?They share the official REST IP budget. Address-based limits apply to actions, not info queries. Moving reads to another data provider reduces use of the official IP budget but does not remove trading limits.
Does batching orders reduce rate-limit usage?It reduces IP-weight consumption compared with sending each order separately. A batch of 79 orders costs two IP-weight points, but still counts as 79 requests against the address allowance.
Can WebSockets eliminate rate-limit problems?They can replace repeated REST polling, but they have their own limits. The official service allows ten unique users across user-specific subscriptions per IP, regardless of how those subscriptions are divided between connections.
Why can’t I retrieve more than 10,000 fills?The official userFillsByTime endpoint only makes the most recent 10,000 fills available. To retrieve older records, use an archive or historical-data API with suitable coverage; retrying the official endpoint does not extend its history.
When your workload fits its limits and available history, you may not need another provider. First eliminate unnecessary polling and duplicate requests. Consider a different data source when you need more users, broader history, different query shapes or separate capacity for data reads.
The takeaway
Batch related reads, stream changing data and checkpoint historical backfills. Those changes address the work generating the traffic, rather than just increasing the number of requests you can send.
Keep trading-action limits separate from data access, and check coverage separately from throughput. A larger request allowance cannot recover missing historical records or change the exchange’s rules for placing orders.
Sources
#4: Hydromancer WebSocket Limits
#5: Batch Clearinghouse States (Hydromancer docs)
#6: L2 Book Streaming (Hydromancer docs)
#7: Historical Fills by Time (Hydromancer docs)
#8: Reservoir Overview (Hydromancer docs)
#9: Reservoir Hyperliquid Coverage (Hydromancer docs)
#10: API Usage Statistics (Hydromancer docs)
Read next

Hyperliquid API Guide for Builders
A builder's guide to the Hyperliquid API: which endpoint answers which question, API keys, testnet USDC, tested limits and common mistakes, with code.
Read ↗How to Build a Hyperliquid Whale Tracker (Live Positions, Fills and Alerts)
Find the biggest traders on Hyperliquid, see what they hold and get an alert when they move, first with the official Hyperliquid API, then without its limits.
Read ↗
How to Build with Liquidation Data from Hyperliquid
Learn how to build a Hyperliquid liquidation dashboard with historical data, live events and reliable monitoring.
Read ↗