Overview
The orders stream contains all order status updates from the Hyperliquid exchange. This includes order placements, cancellations, fills, rejections, and other lifecycle events.
Stream Type: ORDERS
API Availability: gRPC Streaming API + JSON-RPC/WebSocket APIs
Volume: Very High - Most frequent stream with 18+ different status types
Data Structure
Each block contains an array of order status events:
{
"local_time": "2025-12-04T17:00:00.268701903",
"block_time": "2025-12-04T17:00:00.083688002",
"block_number": 817828537,
"events": [
{
"time": "2025-12-04T17:00:00.268701903",
"user": "0xeb6eda4756f831824cd28e568ef8adcff35016e3",
"hash": "0x81598918a9303dff82d30430bf015102068e00fe44335cd12522346b683417ea",
"builder": null,
"status": "open",
"order": {
"coin": "ZEC",
"side": "B",
"limitPx": "356.42",
"sz": "1.1",
"oid": 258166303284,
"timestamp": 1764867600268,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"children": [],
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"origSz": "1.1",
"tif": "Gtc",
"cloid": "0x89119db7aae18b90abe620888af9aadc"
}
}
]
}
Event Fields
| Field | Type | Description |
|---|---|---|
| time | string | Timestamp of the order status event (ISO 8601) |
| user | string | Ethereum address of the user who placed the order |
| hash | string|null | Transaction hash (null for rejected/canceled orders without blockchain tx) |
| builder | object|null | Builder information when order flow comes through a builder. Contains {"b": "builder_address", "f": fee_in_basis_points}. Null for direct orders. |
| status | string | Order status - see Order Statuses below |
| order | object | Full order details - see Order Object below |
Order Object
| Field | Type | Description |
|---|---|---|
| coin | string | Trading pair (e.g., "BTC", "ETH", "xyz:NVDA", "@162") |
| side | string | Order side: "B" (Buy) or "A" (Ask/Sell) |
| limitPx | string | Limit price as string |
| sz | string | Current order size (can be "0.0" if fully filled) |
| oid | integer | Unique order ID |
| timestamp | integer | Order creation timestamp (milliseconds since epoch) |
| triggerCondition | string | Trigger condition or "N/A" if not a trigger order |
| isTrigger | boolean | Whether this is a trigger/stop order |
| triggerPx | string | Trigger price (0.0 if not applicable) |
| children | array | Array of child orders (for complex order types) |
| isPositionTpsl | boolean | Whether this is a position-level TP/SL order |
| reduceOnly | boolean | Whether order can only reduce position |
| orderType | string | Order type: "Limit", "Market", etc. |
| origSz | string | Original order size at placement |
| tif | string | Time-in-force: "Gtc", "Alo", "Ioc", etc. |
| cloid | string|null | Client order ID (optional, for user reference) |
Builder Orders
When order flow comes through a builder (MEV builder or order flow provider), the builder field contains structured information about the builder and associated fees.
Builder Object Structure:
| Field | Type | Description |
|---|---|---|
| b | string | Builder Ethereum address (e.g., "0x999a4b5f268a8fbf33736feff360d462ad248dbf") |
| f | integer | Builder fee in basis points (e.g., 20 = 0.20%) |
Example builder object:
{
"b": "0x999a4b5f268a8fbf33736feff360d462ad248dbf",
"f": 20
}
When is builder null vs populated?
- null: Direct orders placed by users without a builder intermediary
- populated: Orders that flow through builders, often for HIP-3 coins or MEV-related order flow
HIP-3 Coins:
Orders for HIP-3 coins (identified by prefixes like vntl:, xyz:, etc.) commonly include builder information. Examples: vntl:SPACEX, xyz:NVDA, vntl:TRUMPWIN.
Filtering for builder orders:
// WebSocket - Get all orders with any builder
{"streamType": "orders", "filters": {"builder": ["*"]}}
// WebSocket - Get orders for specific builder
{"streamType": "orders", "filters": {"builder": ["0x999a4b5f268a8fbf33736feff360d462ad248dbf"]}}
// gRPC - Get all orders with any builder
{"builder": {"values": ["*"]}}
// gRPC - Get orders for specific builder
{"builder": {"values": ["0x999a4b5f268a8fbf33736feff360d462ad248dbf"]}}
Order Statuses
The following order statuses are observed in the dataset:
Success Statuses
These statuses indicate orders that have been successfully processed or are actively working on the exchange.
| Status | Description |
|---|---|
| open | Order successfully placed and is active on the orderbook |
| filled | Order fully executed/filled |
| triggered | Trigger order condition met and order activated |
Cancellation Statuses
Orders with these statuses were placed successfully but later canceled due to user action or system conditions.
| Status | Description |
|---|---|
| canceled | Order canceled by user or system |
| marginCanceled | Order canceled due to insufficient margin |
| openInterestCapCanceled | Order canceled due to open interest cap reached |
| reduceOnlyCanceled | Reduce-only order canceled (likely position closed) |
| scheduledCancel | Order canceled on a scheduled basis |
| selfTradeCanceled | Order canceled to prevent self-trading |
| siblingFilledCanceled | Order canceled because a sibling order filled |
Rejection Statuses
Orders with these statuses were rejected before being placed on the order book due to validation failures or risk constraints.
| Status | Description |
|---|---|
| badAloPxRejected | ALO (Add Liquidity Only) order rejected due to bad price (would cross spread) |
| iocCancelRejected | IOC (Immediate or Cancel) order rejected/canceled |
| insufficientSpotBalanceRejected | Order rejected due to insufficient spot token balance |
| minTradeNtlRejected | Order rejected - notional value below minimum |
| oracleRejected | Order rejected due to oracle price issues |
| perpMarginRejected | Perpetual order rejected due to insufficient margin |
| perpMaxPositionRejected | Perpetual order rejected - would exceed max position size |
| positionFlipAtOpenInterestCapRejected | Order rejected - would flip position at OI cap |
| positionIncreaseAtOpenInterestCapRejected | Order rejected - would increase position at OI cap |
| reduceOnlyRejected | Reduce-only order rejected (would increase position) |
| tooAggressiveAtOpenInterestCapRejected | Order rejected - too aggressive near OI cap |
Market Types
Orders can reference different market types via the coin field:
- Standard perpetuals:
"BTC","ETH","SOL", etc. - Prediction markets (XYZ):
"xyz:NVDA","xyz:AAPL","xyz:TSLA", etc. - Spot tokens:
"@162","@198", etc.
Time-in-Force (TIF) Types
| TIF | Description |
|---|---|
| Gtc | Good-Till-Cancel (remains active until filled or canceled) |
| Alo | Add-Liquidity-Only (will only add to book, not cross spread) |
| Ioc | Immediate-or-Cancel (executes immediately or cancels) |
| FrontendMarket | Market order from frontend interface |
Example Order Events
Open Order
{
"time": "2025-12-04T17:00:00.268701903",
"user": "0xeb6eda4756f831824cd28e568ef8adcff35016e3",
"hash": "0x81598918a9303dff82d30430bf015102068e00fe44335cd12522346b683417ea",
"builder": null,
"status": "open",
"order": {
"coin": "ZEC",
"side": "B",
"limitPx": "356.42",
"sz": "1.1",
"oid": 258166303284,
"timestamp": 1764867600268,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"children": [],
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"origSz": "1.1",
"tif": "Gtc",
"cloid": "0x89119db7aae18b90abe620888af9aadc"
}
}
Filled Order
{
"time": "2025-12-04T17:00:00.475982103",
"user": "0x4c96f9be0e7bd04bb2db2a5cdf0b8797be00b0da",
"hash": "0xace6f472128f05e4ae600430bf19350202770057ad8224b650af9fc4d182dfcf",
"builder": null,
"status": "filled",
"order": {
"coin": "ZEREBRO",
"side": "B",
"limitPx": "0.036676",
"sz": "0.0",
"oid": 258174064171,
"timestamp": 1764868092303,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"children": [],
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"origSz": "2858.0",
"tif": "Gtc",
"cloid": null
}
}
Rejected Order
{
"time": "2025-12-04T17:00:00.105982103",
"user": "0x1234567890abcdef1234567890abcdef12345678",
"hash": null,
"builder": null,
"status": "perpMarginRejected",
"order": {
"coin": "BTC",
"side": "B",
"limitPx": "95000.0",
"sz": "10.0",
"oid": 258166123456,
"timestamp": 1764867600105,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"children": [],
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"origSz": "10.0",
"tif": "Gtc",
"cloid": null
}
}
Order with Builder
{
"time": "2025-12-04T17:15:23.456789012",
"user": "0xabc123def456789abcdef0123456789abcdef012",
"hash": "0x789abc123def456789abcdef0123456789abcdef0123456789abcdef012345678",
"builder": {
"b": "0x999a4b5f268a8fbf33736feff360d462ad248dbf",
"f": 20
},
"status": "open",
"order": {
"coin": "vntl:SPACEX",
"side": "B",
"limitPx": "125.50",
"sz": "50.0",
"oid": 258166987654,
"timestamp": 1764868523456,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"children": [],
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"origSz": "50.0",
"tif": "Gtc",
"cloid": "0x12345678abcdef1234567890abcdef12"
}
}
API Usage
gRPC Streaming
// Subscribe to orders
const request = {
subscribe: {
stream_type: 'ORDERS',
filters: {
"user": {"values": ["0x123..."]},
"coin": {"values": ["BTC", "ETH"]},
"status": {"values": ["open", "filled"]},
"builder": {"values": ["*"]} // Filter for orders with any builder
}
}
};
JSON-RPC
# Get latest order blocks
curl -X POST https://your-endpoint.hype-mainnet.quiknode.pro/your-token/hypercore \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "hl_getLatestBlocks",
"params": {
"stream": "orders",
"count": 10
},
"id": 1
}'
WebSocket
// Subscribe to orders
ws.send(JSON.stringify({
"method": "hl_subscribe",
"params": {
"streamType": "orders"
}
}));
Important Notes
- High Volume: Orders stream has the highest event frequency - use filtering for specific users/coins
- Order Lifecycle: Track complete order lifecycle from placement to completion/cancellation
- Status Importance: Different status types indicate various success/failure conditions
- Partial Fills:
szfield shows remaining size,origSzshows original order size - Hash Field:
nullfor rejected orders that don't reach the blockchain - Client Order IDs: Use
cloidfor tracking your own orders
Related Streams
- Trades - See the actual fills that result from these orders
- Book Updates - See how open orders affect the order book
- Events - View system events that may cause order cancellations