Real-time order updates with initial snapshot.
Channel: orders
Authentication: Required
Subscribe
{
"method": "subscribe",
"params": {
"channel": "orders",
"market_ids": [1, 2]
}
}| Parameter | Type | Required | Description |
|---|---|---|---|
market_ids | number[] | No | Filter by market IDs. Empty = all markets |
makers | string[] | No | Account filter. Omit it — an authenticated client is scoped to its own account |
Authenticate before subscribing: for an authenticated client the subscription is scoped to its own account.
Message Format
Snapshot
Sent immediately after subscribing. Contains your currently open orders.
{
"method": "snapshot",
"channel": "orders",
"type": "snapshot",
"data": [
{
"id": "0x0000000400001157000000000126f0fc000000000000026d",
"wide_order_id": "17179873623",
"resting_order_id": "8589936811",
"client_order_id": "1786935033988075033",
"market_id": "1",
"sender": "0x36Dc0d99DCaEe443cEbaa5FB8c11877d157C26df",
"side": "SELL",
"type": "LIMIT",
"time_in_force": "GTC",
"status": "ORDER_STATUS_OPEN",
"price": "63232.6",
"size": "1.316786",
"filled_size": "0.015356",
"avg_price": "63232.6",
"fee_bps": "150",
"expiry": "0",
"post_only": true,
"reduce_only": false,
"is_liquidation": false,
"stop_type": "TAKE_PROFIT",
"stop_price": "",
"stop_price_option": "LAST_TRADED_PRICE",
"stp_mode": "EXPIRE_MAKER",
"cancel_reason": "",
"cancel_requested": false,
"cancel_requested_at": "0",
"cancel_tx_hash": "",
"created_at": "1786935035000000000",
"tx_hash": "0x4c0c4591888718a4a5cb6a94bf1b30b0ec676f53ce93d16989ff2582a9e25135",
"block_number": "19329289",
"log_index": "634"
}
],
"order_count": 1,
"worker_timestamp": "1786935049123456789"
}Update
Sent when one of your orders is placed, filled, or cancelled.
{
"channel": "orders",
"type": "update",
"market_id": "1",
"data": [
{
"id": "0x00000000000058c8000000000126f109000000000000027b",
"wide_order_id": "22728",
"resting_order_id": "11364",
"client_order_id": "4078518646",
"market_id": "1",
"sender": "0xc8303Dc1a06EC10d69DF9C7B65D17395C83B1Aa6",
"side": "BUY",
"type": "MARKET",
"time_in_force": "IOC",
"status": "ORDER_STATUS_FILLED",
"price": "0",
"size": "0.000273",
"filled_size": "0.000273",
"avg_price": "63232.6",
"fee_bps": "300",
"expiry": "0",
"post_only": false,
"reduce_only": false,
"is_liquidation": false,
"cancel_reason": "filled",
"cancel_requested": false,
"cancel_requested_at": "0",
"cancel_tx_hash": "",
"created_at": "1786935048000000000",
"tx_hash": "0x68327dc379122ea0caf5572e2aec8d4ec3ce3b2df4ccc44d73f20755c25e3d05",
"block_number": "19329289",
"log_index": "634"
}
],
"tx_hash": "0x68327dc379122ea0caf5572e2aec8d4ec3ce3b2df4ccc44d73f20755c25e3d05",
"block_number": 19329289,
"log_index": 634,
"worker_timestamp": "1786935049200112233"
}data is always an array — one message can carry several orders touched by the same transaction.
Snapshot Message Fields
| Field | Type | Description |
|---|---|---|
method | string | Always "snapshot" |
channel | string | Always "orders" |
type | string | Always "snapshot" |
data | array | Array of order objects |
order_count | number | Number of orders in the array |
worker_timestamp | string | Server time in nanoseconds |
The snapshot carries no market_id and no block metadata.
Update Message Fields
| Field | Type | Description |
|---|---|---|
channel | string | Always "orders" |
type | string | Always "update" |
market_id | string | Market ID |
data | array | Array of order objects |
tx_hash | string | Transaction hash |
block_number | number | Blockchain block number |
log_index | number | Log index within the block |
worker_timestamp | string | Server time in nanoseconds |
There is no timestamp or block_timestamp field on this channel.
Order Object Fields
| Field | Type | Description |
|---|---|---|
id | string | Composite order ID — 24-byte hex (0x…), the ID used by POST /v1/orders/cancel |
wide_order_id | string | Contract-side wide order ID (decimal string) |
resting_order_id | string | Resting order ID on the book (wide_order_id >> 1, decimal string) |
client_order_id | string | Your client order ID, if one was sent |
market_id | string | Market ID |
sender | string | Account that owns the order |
side | string | "BUY" or "SELL" |
type | string | "LIMIT" or "MARKET" |
time_in_force | string | "GTC", "GTT", "IOC" or "FOK" |
status | string | "ORDER_STATUS_OPEN", "ORDER_STATUS_FILLED", "ORDER_STATUS_CANCELLED" |
price | string | Limit price, decimal. "0" on market orders |
size | string | Order size, decimal |
filled_size | string | Filled so far, decimal |
avg_price | string | Average fill price so far, decimal. "0" if nothing filled |
fee_bps | string | Fee rate with denominator 1,000,000 — "300" = 0.03 %, "150" = 0.015 % |
expiry | string | Expiry for GTT orders (nanoseconds), "0" otherwise |
post_only | boolean | Order was placed post-only |
reduce_only | boolean | Order can only reduce a position |
is_liquidation | boolean | Order was created by the liquidation engine |
stop_type | string | "TAKE_PROFIT" or "STOP_LOSS" — only meaningful when stop_price is non-empty |
stop_price | string | Trigger price, decimal. Empty string on a non-stop order |
stop_price_option | string | Trigger reference: "LAST_TRADED_PRICE", "MARK_PRICE", "PRICE_OPTION_NONE" |
stp_mode | string | Self-trade prevention: "EXPIRE_MAKER", "EXPIRE_TAKER", "EXPIRE_BOTH" |
cancel_reason | string | Free-text reason, e.g. "cancelled", "filled". Empty while the order is open |
cancel_requested | boolean | A cancel has been submitted for this order |
cancel_requested_at | string | When the cancel was requested (nanoseconds), "0" if never |
cancel_tx_hash | string | Transaction hash of the cancel, empty if never |
created_at | string | Block time when the order was placed (nanoseconds) |
tx_hash | string | Transaction that placed the order |
block_number | string | Block of the last update to this order (string, unlike the envelope's number) |
log_index | string | Log index of the last update (string, unlike the envelope's number) |
stop_typeandstop_price_optionare always populatedBoth fields render their enum's zero value on ordinary orders, so an unrelated limit order still reports
"TAKE_PROFIT"/"LAST_TRADED_PRICE". Treat the order as a stop order only whenstop_priceis a non-empty string.
Examples
Subscribe to all markets
{
"method": "subscribe",
"params": {
"channel": "orders"
}
}Subscribe to specific markets
{
"method": "subscribe",
"params": {
"channel": "orders",
"market_ids": [1, 2]
}
}Unsubscribe
{
"method": "unsubscribe",
"params": {
"channel": "orders"
}
}Notes
Price Format
All price and size fields are decimal strings, not wei.
Private Channel
Authenticate before subscribing. The channel is meant to carry your own orders only.