Skip to main content

Hyperliquid Slippage, Measured by Market and Order Size

What a $10k to $5M market order really costs on Hyperliquid and Lighter, by market, hour and weekday, priced from full order books.

12 min read
Explore with your agent

Key findings

  1. Add the fee to get the full cost0.53 bpsMedian slippage on a $1M BTC market order on Hyperliquid over seven days, less than the 4.5 bps base taker fee.
  2. Step 3: the same order on Lighter41.46 bpsMedian cost of a $5M HYPE order on Lighter, against 23.55 bps on Hyperliquid.
  3. Step 4: measure slippage over time6xHow much more a $5M xyz:NVDA buy cost at the weekend than in the US cash session.
  4. Step 2: why 20 levels are not enough0 of 46Twice-monthly samples since December 2024 where Hyperliquid's 20-level book could price a $1M HYPE order both ways.

Slippage is the gap between the price you see and the average price you pay when a market order eats through the order book. On Hyperliquid and Lighter, two onchain crypto exchanges, the whole book is public, so you can price any order before you send it and measure how that price moves across the day. We did both on 13 November 2026, for BTC, HYPE, four other large markets and the busiest stock perps, at sizes from $10,000 to $5 million.

Short answer

  • BTC was cheap at every size we tested, up to $5 million. Over seven days, a $1 million BTC market order on Hyperliquid paid a median 0.53 basis points of slippage, and $5 million paid 1.70. The 4.5 bps base-tier taker fee costs more than the book does.
  • Everything else gets expensive fast. A $5 million HYPE order cost 23.55 bps on Hyperliquid and 41.46 bps on Lighter. On Lighter's NVDA perp, $5 million ran past the end of the book in 311 of 336 hourly buy and sell samples.
  • Stock perp liquidity follows US market hours. A $5 million buy of xyz:NVDA cost 21 bps in the US cash session and 123 bps at the weekend, while the top-of-book spread got tighter.
  • Twenty levels cannot price a large order. Hyperliquid's own API returns 20 price levels a side. On 13 November those levels could not fill a $1 million buy of SOL, HYPE or ZEC. Full-depth books have every level, and history.

How to measure slippage

Take the order book at one instant. Walk your order through the asks (for a buy) or the bids (for a sell), level by level, until it is filled. Divide what you paid by what you received to get the average price, and compare it with the mid. That difference, in basis points, is the slippage. A basis point is 0.01%, so 10 bps on a $1 million order is $1,000.

Two choices decide whether the number means anything:

  • Depth. If the book you hold stops before your order is filled, the honest answer is that you cannot see the cost. Never extrapolate past the last level.
  • Time. One snapshot is one moment. Slippage moves with the hour, the weekday and the news, so a useful estimate is a distribution over many books.

This guide uses the 0xArchive full-depth book for Hyperliquid perps, which carries every price level, and the full served book for Lighter. Both have history, so the same function prices any past moment.

What you need

  • Python 3 with requests. The snippets are short prototypes without retry logic.
  • A 0xArchive API key in OXARCHIVE_API_KEY. The Free plan includes every route used here and keeps a rolling 30 days of history. See pricing for the full archive.
  • No key for Hyperliquid's own API at https://api.hyperliquid.xyz/info.

Step 1: price an order from the full book

The function walks the book and returns the cost in basis points, or None if the book runs out. Then we price buys of $10,000 to $5 million on BTC and HYPE from the latest full-depth Hyperliquid book:

import os, requests
from datetime import datetime, timedelta, timezone
H = {"X-API-Key": os.environ["OXARCHIVE_API_KEY"]}
B = "https://api.0xarchive.io/v1"

def cost_bps(book, usd, side="buy"):
    """Average fill vs mid, in basis points. None if the book runs out."""
    levels = book["asks"] if side == "buy" else book["bids"]
    mid = float(book["mid_price"])
    left, qty = usd, 0.0
    for lv in levels:
        px, sz = float(lv["px"]), float(lv["sz"])
        take = min(px * sz, left)
        qty += take / px
        left -= take
        if left <= 1e-9:
            return round(abs(usd / qty - mid) / mid * 1e4, 2)
    return None

SIZES = [10_000, 100_000, 1_000_000, 5_000_000]
for sym in ["BTC", "HYPE"]:
    book = requests.get(f"{B}/hyperliquid/orderbook/{sym}/l2", headers=H, timeout=30).json()["data"]
    print(sym, book["timestamp"], book["bid_levels"], book["ask_levels"],
          [cost_bps(book, u, "buy") for u in SIZES])
BTC 2026-11-13 19:48:35.991 9060 12456 [0.64, 1.33, 1.86, 2.67]
HYPE 2026-11-13 19:48:35.991 9670 13840 [1.37, 3.77, 11.66, 28.57]

The BTC book held 9,060 bid levels and 12,456 ask levels. A $5 million buy cost 2.67 bps. HYPE is a different market: $1 million cost 11.66 bps and $5 million cost 28.57. HYPE went from 1.37 bps at $10,000 to 28.57 bps at $5 million. BTC went from 0.64 to 2.67 bps over the same range.

The latest full-depth book is a checkpoint taken about once a minute, so it can be up to 60 seconds old. Use it to size and plan orders. For a live quote, read the 20-level book, which was under 3 seconds old in our tests.

Step 2: why 20 levels are not enough

Hyperliquid's l2Book call returns 20 levels a side. Run the same function on it:

N = "https://api.hyperliquid.xyz/info"
for sym in ["BTC", "HYPE"]:
    bids, asks = requests.post(N, json={"type": "l2Book", "coin": sym}, timeout=30).json()["levels"]
    native = {"bids": bids, "asks": asks,
              "mid_price": (float(bids[0]["px"]) + float(asks[0]["px"])) / 2}
    print(sym, len(bids), len(asks), [cost_bps(native, u, "buy") for u in SIZES])
BTC 20 20 [0.07, 0.29, 1.33, None]
HYPE 20 20 [0.41, 0.7, None, None]

On BTC, 20 levels priced a $1 million buy and ran out before $5 million. On HYPE they ran out before $1 million. The levels sit close together on liquid markets: on 13 November the 20th BTC level was about 2.8 bps from mid. The nSigFigs option merges levels into wider buckets but still returns 20, and a bucket edge is not a fill price.

This has been true for a long time. We priced a $1 million buy and sell from the first 20 levels of the book on the 1st and 15th of every month since April 2023:

MarketSamples where 20 levels priced $1M both ways
BTC54 of 85
ETH69 of 85
SOL45 of 85
HYPE (from December 2024)0 of 46

The book changed shape over those years. In mid-2023 the 20 BTC levels reached 80 to 440 bps from mid. From May 2024 they sat within 2 to 4 bps. The book got tighter, and 20 levels started to show only the first few ticks of it.

Step 3: the same order on Lighter

Lighter's book comes from the same function. Leave out depth and the route returns every level it holds:

for sym in ["BTC", "HYPE"]:
    book = requests.get(f"{B}/lighter/orderbook/{sym}", headers=H, timeout=30).json()["data"]
    print(sym, book["timestamp"], len(book["bids"]), len(book["asks"]),
          [cost_bps(book, u, "buy") for u in SIZES])
BTC 2026-11-13T19:49:18.574Z 1424 2679 [0.51, 0.55, 0.9, 3.46]
HYPE 2026-11-13T19:49:18.775Z 903 1021 [0.33, 1.47, 7.87, 38.03]

On BTC at this moment, Lighter priced $1 million at 0.90 bps and $5 million at 3.46. On HYPE, $5 million cost 38.03 bps against 28.57 on Hyperliquid a minute earlier. Lighter's own order book call returns at most 250 orders, which covered BTC to about $9 million a side on 13 November but not the thinner markets.

Step 4: measure slippage over time

One book is one moment. The history route returns past full-depth books, so the same function builds a distribution. Here we price $1 million and $5 million buys of xyz:NVDA, the most traded stock perp on Hyperliquid, at intervals on a Sunday and on a Tuesday:

def book_at(path, t):
    """First full-depth checkpoint in the 5 minutes after t."""
    r = requests.get(f"{B}{path}", headers=H, timeout=60, params={
        "start": t.isoformat(), "end": (t + timedelta(minutes=5)).isoformat(), "limit": 1})
    rows = r.json().get("data") or []
    return rows[0] if rows else None

day = datetime(2026, 11, 8, tzinfo=timezone.utc)   # a Sunday
for h in (0, 6, 12, 15, 18, 21):
    t = day + timedelta(hours=h)
    b = book_at("/hyperliquid/hip3/orderbook/xyz:NVDA/l2/history", t)
    print(t.strftime("%a %H:%M"), b["timestamp"], cost_bps(b, 1_000_000, "buy"), cost_bps(b, 5_000_000, "buy"))
mon = datetime(2026, 11, 10, tzinfo=timezone.utc)
for h in (12, 15, 18, 21):
    t = mon + timedelta(hours=h)
    b = book_at("/hyperliquid/hip3/orderbook/xyz:NVDA/l2/history", t)
    print(t.strftime("%a %H:%M"), b["timestamp"], cost_bps(b, 1_000_000, "buy"), cost_bps(b, 5_000_000, "buy"))
Sun 00:00 2026-11-08T00:00:58.790+00:00 13.59 114.14
Sun 06:00 2026-11-08T06:00:50.129+00:00 14.8 122.34
Sun 12:00 2026-11-08T12:00:30.520+00:00 13.63 116.0
Sun 15:00 2026-11-08T15:00:09.959+00:00 14.79 121.02
Sun 18:00 2026-11-08T18:00:04.374+00:00 18.15 137.7
Sun 21:00 2026-11-08T21:00:48.874+00:00 21.2 112.77
Tue 12:00 2026-11-10T12:00:31.389+00:00 15.52 79.45
Tue 15:00 2026-11-10T15:00:24.573+00:00 7.64 28.81
Tue 18:00 2026-11-10T18:00:30.965+00:00 4.49 19.37
Tue 21:00 2026-11-10T21:00:31.371+00:00 10.39 31.06

On Sunday a $5 million buy cost 113 to 138 bps all day. On Tuesday it fell to 29 bps at 15:00 UTC, shortly after the US stock market opened, and 19 bps at 18:00. The US cash session runs 9:30 AM to 4:00 PM New York time, which is 14:30 to 21:00 UTC in November.

We ran the same measurement hourly for seven days, 6 to 13 November, on BTC, HYPE and NVDA on both venues, pricing a buy and a sell each hour. Medians of every sample:

Market$1M$5M
BTC, Hyperliquid0.53 bps1.70 bps
BTC, Lighter0.94 bps3.43 bps
HYPE, Hyperliquid8.52 bps23.55 bps
HYPE, Lighter8.34 bps41.46 bps
NVDA, Hyperliquid (xyz:NVDA)10.51 bpsFilled in every sample; see sessions below
NVDA, Lighter22.04 bpsRan out in 311 of 336 samples

The two NVDA markets share a ticker but are separate contracts with separate books and oracles. Split by session, xyz:NVDA shows how much the clock matters:

xyz:NVDASpread$1M$5MDepth within 0.5% of mid
US cash session1.06 bps5.23 bps21.05 bps$5.66M
Weekday, market closed0.62 bps10.24 bps49.87 bps$2.91M
Weekend0.53 bps14.46 bps123.10 bps$1.62M

The spread was tightest at the weekend, when a large order cost six times as much. The best bid and ask tell you nothing about size. BTC and HYPE showed no weekend effect: the BTC $1 million median was 0.58 bps on weekdays and 0.41 bps at weekends.

Add the fee to get the full cost

Slippage is half the bill. The taker fee is the other half, and on BTC it is the larger half.

Order, cost in bpsHyperliquid, base tierLighter StandardLighter Premium, unstaked
BTC $1M0.53 + 4.50 = 5.030.94 + 0 = 0.940.94 + 2.80 = 3.74
BTC $5M1.70 + 4.50 = 6.203.43 + 0 = 3.433.43 + 2.80 = 6.23
HYPE $1M8.52 + 4.50 = 13.028.34 + 0 = 8.348.34 + 2.80 = 11.14
HYPE $5M23.55 + 4.50 = 28.0541.46 + 0 = 41.4641.46 + 2.80 = 44.26

Fees come from each venue's fee page. Hyperliquid's base tier is 0.045% taker and drops with 14-day volume, staking and referrals. Lighter Standard accounts pay no taker fee on regular orders and carry a 300 ms taker latency. Premium accounts pay 0.028% at zero staked LIT with 140 ms latency. The table leaves out what that latency costs, which depends on how fast the book moves while you wait.

Stock perps on Hyperliquid run in a reduced-fee growth mode. xyz:NVDA, xyz:SNDK and xyz:MU charged 0.009% at the base tier on 13 November, so for them slippage is nearly the whole cost. The fee depends on per-market settings, so read it from Hyperliquid's meta call for each market.

What a fast market did to the book

4 November 2026 had BTC's largest daily range between 1 October and 12 November: 7.09%, on $5.79 billion of volume against a $2.4 billion daily median. We priced orders every five minutes from 13:00 to 18:00 UTC. The worst $1 million cost on Hyperliquid was 3.19 bps, at 14:45. The worst $5 million cost was 5.32 bps on Hyperliquid and 8.00 bps on Lighter. No order ran out of book. Between 14:00 and 16:00 the $1 million median rose to 0.73 bps on Hyperliquid, from 0.39 bps the hour before.

The books here are checkpoints about a minute apart, so a gap that opened and closed inside a minute would not appear. For that, rebuild the book order by order from the L4 history.

Side by side: native APIs and 0xArchive

We ran the same job, pricing a market order from the book, against each source on 13 November 2026.

Row labelHyperliquid l2BookLighter orderBookOrders0xArchive
Depth20 levels a sideUp to 250 orders a sideEvery level (BTC: 9,060 bids, 12,456 asks on Hyperliquid)
Past booksNone. A time parameter is ignored and the current book comes back.NoneHyperliquid full-depth from April 2026, 20-level books from April 2023, Lighter books from January 2026
Large orders priced?$1M HYPE: no, the book ran outBTC to about $9M a side; not thinner marketsEvery market tested, up to $5M on Hyperliquid
Seven days of hourly samplesNot possibleNot possible1,104 requests, about 70 seconds

Hyperliquid also publishes 20-level book snapshots to a requester-pays S3 bucket, which its docs say updates about once a month with no guarantee of timeliness and possible gaps. They carry the same 20-level limit.

The native APIs are enough when you need a quote right now for BTC or ETH, up to about $1 million on Hyperliquid. For larger orders, thinner markets, stock perps or any past moment, you need the full book and its history. For the wider comparison, see Hyperliquid's native API vs 0xArchive and Lighter's native API vs 0xArchive.

What to know before you build

  • Measure inside a band. Full books carry stale orders far from the price. BTC asks reached 15 times the mid. Report depth within 10, 50 or 100 bps of mid, not total book size.
  • Compare books from the same moment. The latest full-depth checkpoint can be a minute old while Lighter's book is a fraction of a second old. For a fair comparison, take the first checkpoint in the same window on both venues, as Step 4 does.
  • Bound both ends of the window. A history request with limit=1 returns the first book after start. Without end it can jump to a later hour.
  • History starts per dataset. Full-depth Hyperliquid books are served from 1 April 2026, the 20-level book from April 2023 with 10 levels a side in the first months, and order-level L4 books from 11 March 2026.
  • Same ticker, different contract. Lighter NVDA and xyz:NVDA are different markets. Hyperliquid's kPEPE is a 1,000-token contract.
  • Fees are per account and per market. Volume tiers, staking, referrals and HIP-3 growth mode change the fee. Use your own rate in the total.

FAQ

What is slippage on Hyperliquid?

It is the difference between the mid price and the average price your market order fills at, caused by walking through the book. On 13 November a $1 million BTC buy slipped about 2 bps and a $1 million HYPE buy about 12 bps.

How do I estimate slippage before I place an order?

Walk your order size through the current book, as in Step 1. Use the full-depth book for anything above a few hundred thousand dollars, because Hyperliquid's 20-level book often runs out first.

Is Hyperliquid or Lighter cheaper for large orders?

It depends on the market and your fee tier. On BTC, Lighter Standard was cheaper after fees at $1 million and $5 million. On HYPE at $5 million, Hyperliquid was cheaper by 13 bps after fees. On NVDA, Hyperliquid's book was far deeper.

Does slippage change at the weekend?

For crypto perps we measured little change. For stock perps it changes a lot: a $5 million xyz:NVDA buy cost 21 bps in the US session and 123 bps at the weekend.

How far back can I measure slippage?

Full-depth Hyperliquid books go back to April 2026 and Lighter books to January 2026. For longer studies the 20-level Hyperliquid book reaches April 2023, which is enough for small orders on BTC and ETH.

Next steps