- Datastreams then entity is the Kafka Topic name
- Snowflake then the entity is the table name
Assets
In a lot of the data sources, especially datastreams and tables in the raw schema you will find assets listed as a number.This is how Hyperliquid refers to them. They are normally a trading Pair.
Where the asset is simply an index.Perpetuals - index in the universe field returned by the
meta
response.Spot - 10000 + index in the universe field returned by the spotMeta
response.For example, when submitting an order for PURR/USDC, theset that should be used is 10000 because its asset index in the spot metadata is 0.Spot
Spot Pairs are prefixed by an @
The Spot Pair PURR/USDC is the only one not referred to by an @index and instead you will see it referred by PURR/USDC
107
with name @107
@107
is what you will see in the hyperliquid data, and this refer to the trading pair HYPE/USDC
Perpetuals
You can fetch the Hyperliquid Perpetual metadata here.Perpetuals are easier than Spot, as the name is the Token which trades against USDC.
- HYPE will be HYPE/USDC.
- BTC will be BTC/USDC
Funding Rates and Fees
Historical Rates
Historical Funding Rates are available inhyperliquid.raw.perpetual_market_asset_contexts
Example Data
TIMESTAMP | COIN | DAY_BASE_VOLUME | DAY_NATURAL_VOLUME | OPEN_INTEREST | FUNDING | PREMIUM | IMPACT_PRICES | MARK_PRICE | MID_PRICE | ORACLE_PRICE | PREVIOUS_DAY_PRICE | MAX_LEVERAGE | _CREATED_AT | _UPDATED_AT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2025-09-12 00:15:00.000 | SYRUP | 4762555.0000000000 | 2159913.4026699993 | 11635584.0000000000 | 0.0000862455 | 0.0011820433 | [“0.464999”, “0.465207”] | 0.4650300000 | 0.4651100000 | 0.4644500000 | 0.4431300000 | 3 | 2025-09-12 00:16:10.342 | 2025-09-12 00:16:10.342 |
2025-09-12 00:15:00.000 | MAV | 6811783.0000000000 | 471417.9629660000 | 4238730.0000000000 | 0.0000125000 | -0.0001864601 | [“0.069577”, “0.069707”] | 0.0696310000 | 0.0696570000 | 0.0697200000 | 0.0635690000 | 3 | 2025-09-12 00:16:10.342 | 2025-09-12 00:16:10.342 |
2025-09-12 00:15:00.000 | PYTH | 29175950.0000000000 | 5101855.4974899963 | 27527772.0000000000 | 0.0000098288 | -0.0006291059 | [“0.179335”, “0.179507”] | 0.1795000000 | 0.1794650000 | 0.1796200000 | 0.1697300000 | 5 | 2025-09-12 00:16:10.342 | 2025-09-12 00:16:10.342 |
Fees
Fees are available in streams and as historical data.Historical
Historical Funding Fees are available inhyperliquid.raw.misc_events
Example Data
Query: select * from hyperliquid.raw.misc_events where event:Funding is not null limit 3;
HASH | TIME | EVENT | _CREATED_AT | _UPDATED_AT |
---|---|---|---|---|
0x0000000000000000000000000000000000000000000000000000000000000000 | 2025-08-04 09:00:00.057 | {"Funding": {"coin": "PENGU", "funding_amount": "0.000029", "funding_rate": "-0.0000076137", "szi": "109.0", "user": "0xffff407e5770f000ec93bc008d81b59acb505672"}} | 2025-08-04 09:17:23.414 | 2025-08-04 10:47:28.542 |
0x0000000000000000000000000000000000000000000000000000000000000000 | 2025-08-21 09:00:00.023 | {"Funding": {"coin": "HYPE", "funding_amount": "14.595776", "funding_rate": "0.0000271144", "szi": "-13000.0", "user": "0xfffafff1445fb2d469b7f2d87fb3eadb8b1aa87e"}} | 2025-08-21 09:06:09.769 | 2025-08-21 10:48:14.265 |
0x0000000000000000000000000000000000000000000000000000000000000000 | 2025-08-31 13:00:00.000 | {"Funding": {"coin": "kPEPE", "funding_amount": "-0.005145", "funding_rate": "0.0000125", "szi": "41658.0", "user": "0xffff407e5770f000ec93bc008d81b59acb505672"}} | 2025-08-31 13:17:38.764 | 2025-08-31 15:17:37.427 |
Streams
Funding Fees are streamed inhyperliquid.misc_events
Example Payload
Orders
For order types and options see the hyperliquid docsMarket order fills
- Sources
- Datastreams
- hyperliquid.orders
- hyperliquid.fills
- Snowflake
- hyperliquid.raw.orders
- Datastreams
- Filter by:
status = 'filled'
type = 'market'
Limit order fills
- Sources
- Datasteam
- hyperliquid.orders
- hyperliquid.fills
- Snowflake
- hyperliquid.raw.orders
- Datasteam
- Filter by
status = 'filled'
type = 'limit'
What are TWAP Orders?
It is an order which is divided into multiple suborders over a period of time set by user. A suborder is sent every 30 seconds during the course of the TWAP.TWAP stands for Time-Weighted Average Price.
In hyperliquid TWAPs are executed automatically by the validators and as such they do not have a transaction hash, only the order to place a twap has a transaction hash. As such you will very often see trades and fills with
0x0000000000000000000000000000000000000000000000000000000000000000
as the transaction hash.For trades this means one side of the trade is a TWAP.For fill this means it is a TWAP fill.Twap fills
- Sources
- Datastreams
- hyperliquid.trades
- hyperliquid.fills
- Snowflake
- hyperliquid.raw.transactions
- Datastreams
- Filter by
hash = '0x0000000000000000000000000000000000000000000000000000000000000000'
Twap Open
- Sources
- Datastreams
- hyperliquid.transactions
- Snowflake
- hyperliquid.raw.transactions
- Datastreams
- Filter by
action:type = 'twapOrder'
Twap Cancel
- Sources
- Datastreams
- hyperliquid.transactions
- Snowflake
- hyperliquid.raw.transactions
- Datastreams
- Filter by
action:type = 'twapCancel'
Staking Activity
- Sources
- Datastream
- hyperliquid.misc_events
- Snowflake
- hyperliquid.raw.misc_events
- Datastream
- Filter by
inner: { CDeposit
for depositsinner: { CWithdrawal
for withdrawals
Liquidations
There are two types of liquidations in hyperliquid.Market LiquidationsThis is when Hyperliquid places an order to sell (for longs) and buy (for shorts) a user’s position on the market.
HLP Vault LiquidationsThis is a last effort, when the above Market Liquidations fails, ie due to lack of liquidity. In this case the HLP Vault acquires the position, and takes the loss (if any).
Market Liquidations
- Datastreams
- hyperliquid.fills
- Snowflake
- hyperliquid.raw.fills
Market Liquidation Example
HLP Vault Liquidations
- Sources
- Datastreams
- hyperliquid.misc_events
- hyperliquid.fills
- Snowflake
- hyperliquid.raw.misc_events
- hyperliquid.raw.fills
- Datastreams
fills
it will show up with both sides, and one side being the HLP Vault.
Fills
Liquidated User FillMisc Events
Order Book
The easiest way to keep an updated order book is to read from the Datastreamorders
and applying it to a snapshot of the L2 Orderbook.
L2 Orderbook snapshot
Once you have the snapshot, you can use the orders
datastream to update the snapshot.
All the possible order statuses can be found in the Hyperliquid Docs
We are working on providing an L4 Orderbook snapshot.
Trade Ids
Trade ids are not guaranteed to be unique.
Orders explained
The trading engine does not emit the orders in the same way that it does for fills, nor are they bound to trading engine timestamps. They are not 1-1. For every order with the status filled you may not find a counter order with the status filled. We’ll pick the only order with this timestamp that has the status filled. At a first glace we’d expect to see another order with the status filled as well. (buyer and seller) But this is not the case let’s see why.- It went into the order book
- Got a partial fill (you can see the size is less on the cancelled than the open)
- It was cancelled, so as to not remove liquidity from the order book.
Time in Force Explained
Alo
The ALO (Add Liquidity Only) time-in-force option works similarly to “Post Only” on other exchanges. How ALO Works- When you place an order with ALO, the system ensures that your order will only add liquidity to the order book.
- If your order would immediately match with an existing order (thus taking liquidity), Hyperliquid will automatically cancel it instead of executing.
- This prevents you from accidentally paying taker fees, guaranteeing that you only act as a maker.
GTC
GTC (Good ’Til Canceled)- A GTC order will remain active on the order book until it is either filled or manually canceled by you.
- It does not expire automatically, regardless of how much time passes.
- This is the default time-in-force on most exchanges, including Hyperliquid.
- Useful if you want your order to stay in the market and wait for execution, even if it takes hours or days.
IOC
IOC (Immediate or Cancel)- An IOC order must be filled immediately (fully or partially) when it reaches the order book.
- Any portion of the order that cannot be instantly matched will be canceled right away.
- This makes IOC useful when you want to execute as much as possible instantly, but don’t want leftover orders sitting on the book.
- Traders often use IOC for quick entries/exits or to avoid resting exposure on the book.