Exchange Wire Formats

BitMEX (historical) wire format

How BitMEX messages become rows in our Parquet files. Each data type below shows a message next to the rows we publish for it, with the source and the rule for every column. Hover a line or a column to see how they connect.

Historical dataset

BitMEX (historical) is no longer collected. Its exchange has closed, so the messages below are rebuilt from published rows and the exchange's documented message format, and were checked against the last version of our collector. See Known Gaps & Corrections.

BitMEX settled its perpetual contracts on 2026-09-16 at 12:00 UTC, and our collection stopped on 2026-09-22. The WebSocket still accepts subscriptions, but every table is empty. In the examples, trade objects are BitMEX's REST records of the same trades; all other values come from our published rows. Fields that are not in our published data are left out. Each message's action is inferred from the rows: rows that share a receive time arrived in one message, and a row with the full instrument state came from a partial. The collector subscribed to orderBookL2:<symbol>, trade:<symbol>, instrument:<symbol> and liquidation:<symbol> on separate connections, and stored every message as it arrived. BitMEX sends numbers as JSON numbers; the pipeline read them as 64-bit floats and wrote them as shortest decimal strings.

  • Public WebSocket (one connection per table: orderBookL2, trade, instrument, liquidation): wss://ws.bitmex.com/realtime

Exchange API reference: www.bitmex.com. Conventions shared by every exchange are on the wire formats overview.

Trades

One row per trade from the trade table.

  • WebSocket trade:<symbol>

Trade (XBTUSDT)

Reconstructed: BitMEX has closed and its feed can no longer be captured. The trade object is BitMEX's REST record of this trade (GET /api/v1/trade), byte for byte; BitMEX documents WebSocket rows as identical in structure to REST rows. The table/action wrapper follows BitMEX's documented WebSocket format.

WebSocket message (reconstructed) · trade:<symbol>received 2026-09-02 12:06:40.391901 UTC
{
"table": "trade",
"action": "insert",
"data": [
{
"timestamp": "2026-09-02T12:06:40.251Z",
"symbol": "XBTUSDT",
"side": "Sell",
"size": 100000,
"price": 76674.4,
"tickDirection": "PlusTick",
"trdMatchID": "00000000-006d-1000-0000-00367d7e88f4",
"grossValue": 7667440000,
"homeNotional": 0.1,
"foreignNotional": 7667.44,
"trdType": "Regular",
"pool": "Secondary"
}
]
}

Published row

received_time1788350800391901049—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350800251data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
trade_id7994828196135390476data[].trdMatchIDNot BitMEX's ID: a hash of the trdMatchID UUID (Rust DefaultHasher, SipHash-1-3 with zero keys over the UUID's bytes followed by 0xFF, top bit cleared). To match BitMEX's trade history, hash its trdMatchID the same way.
price76674.4data[].priceConverted through a 64-bit float and printed in shortest form, so whole prices have no decimal point (76270).
quantity100000data[].sizeCopied from size, in raw instrument units: for XBTUSDT 1 = 0.000001 XBT, so 100000 is 0.1 XBT (BitMEX's homeNotional).
trade_time1788350800251data[].timestampSame as event_time. Milliseconds.
is_buyer_makertruedata[].sidetrue when side is Sell (the taker sold), false when it is Buy.
order_typeMarket—Constant Market. BitMEX does not send an order type for trades.

Two trades in one message (XBTUSD, inverse)

Reconstructed: BitMEX has closed and its feed can no longer be captured. The trade objects are BitMEX's REST records of these trades; one insert frame carried both, because both rows share one receive time.

WebSocket message (reconstructed) · trade:<symbol>received 2026-09-02 12:56:50.107284 UTC
{
"table": "trade",
"action": "insert",
"data": [
{
"timestamp": "2026-09-02T12:56:49.947Z",
"symbol": "XBTUSD",
"side": "Sell",
"size": 3000,
"price": 76591.5,
"tickDirection": "MinusTick",
"trdMatchID": "00000000-006d-1000-0000-00367d8ab963",
"grossValue": 3916890,
"homeNotional": 0.0391689,
"foreignNotional": 3000,
"trdType": "Regular",
"pool": "Primary"
},
{
"timestamp": "2026-09-02T12:56:49.947Z",
"symbol": "XBTUSD",
"side": "Sell",
"size": 800,
"price": 76584.8,
"tickDirection": "MinusTick",
"trdMatchID": "00000000-006d-1000-0000-00367d8ab964",
"grossValue": 1044592,
"homeNotional": 0.01044592,
"foreignNotional": 800,
"trdType": "Regular",
"pool": "Secondary"
}
]
}

Published rows · 2

received_time1788353810107284579—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788353809947data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDdata[].symbolCopied.
trade_id8597726609260770388data[].trdMatchIDNot BitMEX's ID: a hash of the trdMatchID UUID (Rust DefaultHasher, SipHash-1-3 with zero keys over the UUID's bytes followed by 0xFF, top bit cleared). To match BitMEX's trade history, hash its trdMatchID the same way.
price76591.5data[].priceConverted through a 64-bit float and printed in shortest form, so whole prices have no decimal point (76270).
quantity3000data[].sizeCopied from size. XBTUSD is an inverse contract: size is in USD contracts (1 contract = 1 USD), so 3000 is 3,000 USD; the BTC amount is BitMEX's homeNotional, which is not published.
trade_time1788353809947data[].timestampSame as event_time. Milliseconds.
is_buyer_makertruedata[].sidetrue when side is Sell (the taker sold), false when it is Buy.
order_typeMarket—Constant Market. BitMEX does not send an order type for trades.

Trades repeated in the subscription partial

Reconstructed: BitMEX has closed and its feed can no longer be captured. After every (re)connect, BitMEX answers the subscription with a partial that repeats recent trades. The collector stored them like new trades. In this hour both rows below share one receive time, so they arrived in one frame: the 11:11:32 trade had already been published in the 11:00 file, and is published again here. The trade objects are BitMEX's REST records; keys, types and filter are copied from a trade partial BitMEX sent on 2026-10-05. The order of the two trades in the original frame is not known.

WebSocket message (reconstructed) · trade:<symbol>received 2026-09-02 12:02:37.163259 UTC
{
"table": "trade",
"action": "partial",
"keys": [],
"types": {
"timestamp": "timestamp",
"symbol": "symbol",
"side": "symbol",
"size": "long",
"price": "float",
"tickDirection": "symbol",
"trdMatchID": "guid",
"grossValue": "long",
"homeNotional": "float",
"foreignNotional": "float",
"trdType": "symbol",
"pool": "symbol"
},
"filter": {
"pool": "Aggregated",
"symbol": "XBTUSDT"
},
"data": [
{
"timestamp": "2026-09-02T11:11:32.933Z",
"symbol": "XBTUSDT",
"side": "Buy",
"size": 10000,
"price": 76607.6,
"tickDirection": "PlusTick",
"trdMatchID": "00000000-006d-1000-0000-00367d690e16",
"grossValue": 766076000,
"homeNotional": 0.01,
"foreignNotional": 766.076,
"trdType": "Regular",
"pool": "Secondary"
},
{
"timestamp": "2026-09-02T12:02:35.598Z",
"symbol": "XBTUSDT",
"side": "Buy",
"size": 20000,
"price": 76820.1,
"tickDirection": "PlusTick",
"trdMatchID": "00000000-006d-1000-0000-00367d7d57d7",
"grossValue": 1536402000,
"homeNotional": 0.02,
"foreignNotional": 1536.402,
"trdType": "Regular",
"pool": "Primary"
}
]
}

Published rows · 2

received_time1788350557163259883—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788347492933data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
trade_id1837481949224425487data[].trdMatchIDNot BitMEX's ID: a hash of the trdMatchID UUID (Rust DefaultHasher, SipHash-1-3 with zero keys over the UUID's bytes followed by 0xFF, top bit cleared). To match BitMEX's trade history, hash its trdMatchID the same way.
price76607.6data[].priceConverted through a 64-bit float and printed in shortest form, so whole prices have no decimal point (76270).
quantity10000data[].sizeCopied from size, in raw instrument units: for XBTUSDT 1 = 0.000001 XBT, so 100000 is 0.1 XBT (BitMEX's homeNotional).
trade_time1788347492933data[].timestampSame as event_time. Milliseconds.
is_buyer_makerfalsedata[].sidetrue when side is Sell (the taker sold), false when it is Buy.
order_typeMarket—Constant Market. BitMEX does not send an order type for trades.

Settlement at expiry (no side)

Reconstructed: BitMEX has closed and its feed can no longer be captured. The trade object is BitMEX's REST record. When BitMEX settled XBTUSDT on 2026-09-16 at 12:00 UTC it published Settlement trades that have no side. The pipeline does not read trdType, so they are published as ordinary trades.

WebSocket message (reconstructed) · trade:<symbol>received 2026-09-16 12:00:03.616529 UTC
{
"table": "trade",
"action": "insert",
"data": [
{
"timestamp": "2026-09-16T12:00:00.000Z",
"symbol": "XBTUSDT",
"size": 3618200,
"price": 76152.5,
"tickDirection": "ZeroMinusTick",
"trdMatchID": "00000000-0079-1000-0000-0000669ebc65",
"grossValue": 275534975500,
"homeNotional": 3.6182,
"foreignNotional": 275534.9755,
"trdType": "Settlement",
"pool": "Primary"
}
]
}

Published row

received_time1789560003616529503—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1789560000000data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
trade_id8132317058320258754data[].trdMatchIDNot BitMEX's ID: a hash of the trdMatchID UUID (Rust DefaultHasher, SipHash-1-3 with zero keys over the UUID's bytes followed by 0xFF, top bit cleared). To match BitMEX's trade history, hash its trdMatchID the same way.
price76152.5data[].priceConverted through a 64-bit float and printed in shortest form, so whole prices have no decimal point (76270).
quantity3618200data[].sizeCopied from size, in raw instrument units: for XBTUSDT 1 = 0.000001 XBT, so 100000 is 0.1 XBT (BitMEX's homeNotional).
trade_time1789560000000data[].timestampSame as event_time. Milliseconds.
is_buyer_makerfalse—false: settlement trades have no side, and a missing side is read as Buy. The value carries no aggressor information here.
order_typeMarket—Constant Market. BitMEX does not send an order type for trades.

Notes

  • Sizes are raw per-instrument units, not base asset: XBTUSD in USD contracts, XBTUSDT in 0.000001 XBT, ETHUSDT in 0.00001 ETH, spot pairs in 0.00000001 of the base asset. Check the instrument's multiplier before comparing with other venues.
  • Trades are deduplicated only within an hour file. A trade repeated in a partial after a reconnect is published again if its first copy is in an earlier hour; deduplicate history on (symbol, trade_id).
  • On liquid days, 5–20 % of trades are missing compared with BitMEX's own trade history; see Known Gaps & Corrections.
  • trdType is not published: Regular trades and Settlement trades at expiry look the same.

Column types and descriptions: Trades schema.

Order Book

One row per price level. A partial after every (re)connect gives the whole book as snapshot rows; insert, update and delete messages become update rows.

  • WebSocket orderBookL2:<symbol>

Partial (book image after subscribing)

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sends a partial with the whole book after every (re)connect. Each level becomes one snapshot row. keys, types and filter are copied from an orderBookL2 partial BitMEX sent on 2026-10-05.

Abridged: The original partial had 132 levels (99 bids, 33 asks); the two best asks and two best bids are shown, in the original order. BitMEX also sent timestamp and transactTime on every level; they are not published, so they are left out.

WebSocket message (reconstructed) · orderBookL2:<symbol>received 2026-09-02 12:02:36.363458 UTC
{
"table": "orderBookL2",
"action": "partial",
"keys": ["symbol", "id", "side"],
"types": {
"symbol": "symbol",
"id": "long",
"side": "symbol",
"size": "long",
"price": "float",
"pool": "symbol",
"timestamp": "timestamp",
"transactTime": "timestamp"
},
"filter": {
"pool": "Aggregated",
"symbol": "XBTUSDT"
},
"data": [
{
"symbol": "XBTUSDT",
"id": 234034598936,
"side": "Sell",
"size": 291100,
"price": 76824.2
},
{
"symbol": "XBTUSDT",
"id": 234034600390,
"side": "Sell",
"size": 267100,
"price": 76822.4
},
{
"symbol": "XBTUSDT",
"id": 234034599815,
"side": "Buy",
"size": 6778700,
"price": 76754.1
},
{
"symbol": "XBTUSDT",
"id": 234034599842,
"side": "Buy",
"size": 1900,
"price": 76745.9
}
]
}

Published rows · 4

received_time1788350556363458711—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350556363458711—Our receive time in nanoseconds, the same value as received_time. BitMEX's per-level timestamp is not published.
transaction_timenull—Null. BitMEX's transactTime is not published.
symbolXBTUSDTdata[].symbolCopied.
event_typesnapshotactionsnapshot for a partial message.
first_update_id234034598936data[].idBitMEX's price-level ID. It identifies the level; it is not a sequence number.
final_update_id234034598936data[].idSame as first_update_id.
prev_final_update_idnull—Null. BitMEX sends no sequence numbers.
last_update_id234034598936data[].idSame as first_update_id.
sideaskdata[].sidebid for Buy, ask for Sell. One row per level.
price76824.2data[].priceConverted through a 64-bit float and printed in shortest form (76754.1), so whole prices have no decimal point (240430).
quantity291100data[].sizeCopied from size: the level's new total, in raw instrument units (XBTUSDT: 1 = 0.000001 XBT).
order_countnull—Null. BitMEX does not report order counts.

Insert (new levels)

Reconstructed: BitMEX has closed and its feed can no longer be captured.

Abridged: BitMEX also sent timestamp and transactTime on every level; they are not published, so they are left out.

WebSocket message (reconstructed) · orderBookL2:<symbol>received 2026-09-02 12:00:00.314553 UTC
{
"table": "orderBookL2",
"action": "insert",
"data": [
{
"symbol": "XBTUSDT",
"id": 234034541763,
"side": "Sell",
"size": 266900,
"price": 76863.7
},
{
"symbol": "XBTUSDT",
"id": 234034541208,
"side": "Buy",
"size": 6775200,
"price": 76796.6
},
{
"symbol": "XBTUSDT",
"id": 234034541214,
"side": "Buy",
"size": 1900,
"price": 76788.9
},
{
"symbol": "XBTUSDT",
"id": 234034541226,
"side": "Buy",
"size": 8100,
"price": 76785.1
},
{
"symbol": "XBTUSDT",
"id": 234034541235,
"side": "Buy",
"size": 3200,
"price": 76787.4
}
]
}

Published rows · 5

received_time1788350400314553190—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350400314553190—Our receive time in nanoseconds, the same value as received_time. BitMEX's per-level timestamp is not published.
transaction_timenull—Null. BitMEX's transactTime is not published.
symbolXBTUSDTdata[].symbolCopied.
event_typeupdateactionupdate for insert, update and delete messages alike.
first_update_id234034541763data[].idBitMEX's price-level ID. It identifies the level; it is not a sequence number.
final_update_id234034541763data[].idSame as first_update_id.
prev_final_update_idnull—Null. BitMEX sends no sequence numbers.
last_update_id234034541763data[].idSame as first_update_id.
sideaskdata[].sidebid for Buy, ask for Sell. One row per level.
price76863.7data[].priceConverted through a 64-bit float and printed in shortest form (76754.1), so whole prices have no decimal point (240430).
quantity266900data[].sizeCopied from size: the level's new total, in raw instrument units (XBTUSDT: 1 = 0.000001 XBT).
order_countnull—Null. BitMEX does not report order counts.

Update (size change at an existing level)

Reconstructed: BitMEX has closed and its feed can no longer be captured. The level is found by id; its new size replaces the old one.

Abridged: BitMEX also sent timestamp and transactTime on every level; they are not published, so they are left out.

WebSocket message (reconstructed) · orderBookL2:<symbol>received 2026-09-02 12:02:36.964308 UTC
{
"table": "orderBookL2",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"id": 234034599806,
"side": "Buy",
"size": 11300,
"price": 76745.5
}
]
}

Published row

received_time1788350556964308401—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350556964308401—Our receive time in nanoseconds, the same value as received_time. BitMEX's per-level timestamp is not published.
transaction_timenull—Null. BitMEX's transactTime is not published.
symbolXBTUSDTdata[].symbolCopied.
event_typeupdateactionupdate for insert, update and delete messages alike.
first_update_id234034599806data[].idBitMEX's price-level ID. It identifies the level; it is not a sequence number.
final_update_id234034599806data[].idSame as first_update_id.
prev_final_update_idnull—Null. BitMEX sends no sequence numbers.
last_update_id234034599806data[].idSame as first_update_id.
sidebiddata[].sidebid for Buy, ask for Sell. One row per level.
price76745.5data[].priceConverted through a 64-bit float and printed in shortest form (76754.1), so whole prices have no decimal point (240430).
quantity11300data[].sizeCopied from size: the level's new total, in raw instrument units (XBTUSDT: 1 = 0.000001 XBT).
order_countnull—Null. BitMEX does not report order counts.

Delete (levels removed)

Reconstructed: BitMEX has closed and its feed can no longer be captured. Delete rows carry no size; the pipeline writes quantity 0.

Abridged: BitMEX also sent timestamp and transactTime on every level; they are not published, so they are left out.

WebSocket message (reconstructed) · orderBookL2:<symbol>received 2026-09-02 12:00:00.314243 UTC
{
"table": "orderBookL2",
"action": "delete",
"data": [
{
"symbol": "XBTUSDT",
"id": 234034541192,
"side": "Sell",
"price": 76864.3
},
{
"symbol": "XBTUSDT",
"id": 234034540919,
"side": "Buy",
"price": 76778.2
},
{
"symbol": "XBTUSDT",
"id": 234034540922,
"side": "Buy",
"price": 76774.8
},
{
"symbol": "XBTUSDT",
"id": 234034541040,
"side": "Buy",
"price": 76787.1
}
]
}

Published rows · 4

received_time1788350400314243121—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350400314243121—Our receive time in nanoseconds, the same value as received_time. BitMEX's per-level timestamp is not published.
transaction_timenull—Null. BitMEX's transactTime is not published.
symbolXBTUSDTdata[].symbolCopied.
event_typeupdateactionupdate for insert, update and delete messages alike.
first_update_id234034541192data[].idBitMEX's price-level ID. It identifies the level; it is not a sequence number.
final_update_id234034541192data[].idSame as first_update_id.
prev_final_update_idnull—Null. BitMEX sends no sequence numbers.
last_update_id234034541192data[].idSame as first_update_id.
sideaskdata[].sidebid for Buy, ask for Sell. One row per level.
price76864.3data[].priceConverted through a 64-bit float and printed in shortest form (76754.1), so whole prices have no decimal point (240430).
quantity0—0 for every level of a delete message: the level is removed.
order_countnull—Null. BitMEX does not report order counts.

Notes

  • Apply rows by level ID (last_update_id), not by price: an update row sets the size of the level with that ID, and quantity 0 removes it. IDs are not sequence numbers, so gaps cannot be detected from them.
  • Files do not start with a checkpoint of the book. Continue from the previous hour's book, or start at the next snapshot rows.
  • event_time is our receive time in nanoseconds, like received_time.
  • Sizes are raw per-instrument units, not base asset: XBTUSD in USD contracts, XBTUSDT in 0.000001 XBT, ETHUSDT in 0.00001 ETH, spot pairs in 0.00000001 of the base asset. Check the instrument's multiplier before comparing with other venues.

Column types and descriptions: Order Book schema.

Ticker

One row per instrument message.

  • WebSocket instrument:<symbol>

Partial (full instrument state after subscribing)

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sends a partial with every instrument field after every (re)connect; this is the only kind of message that carries every field the pipeline reads. keys, types and filter are copied from an instrument partial BitMEX sent on 2026-10-05.

Abridged: A partial carries every instrument field (the types header lists 100). Only the fields the pipeline reads are shown; the others are not in our published data.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:34.983233 UTC
{
"table": "instrument",
"action": "partial",
"keys": ["symbol"],
"types": {
"symbol": "symbol",
"rootSymbol": "symbol",
"instrumentID": "int",
"state": "symbol",
"typ": "symbol",
"listing": "timestamp",
"front": "timestamp",
"expiry": "timestamp",
"settle": "timestamp",
"listedSettle": "timestamp",
"relistInterval": "timespan",
"positionCurrency": "symbol",
"underlying": "symbol",
"quoteCurrency": "symbol",
"underlyingSymbol": "symbol",
"reference": "symbol",
"referenceSymbol": "symbol",
"calcInterval": "timespan",
"publishInterval": "timespan",
"publishTime": "timespan",
"maxOrderQty": "long",
"minPrice": "float",
"maxPrice": "float",
"lotSize": "long",
"tickSize": "float",
"multiplier": "long",
"settlCurrency": "symbol",
"underlyingToPositionMultiplier": "long",
"underlyingToSettleMultiplier": "long",
"quoteToSettleMultiplier": "long",
"isQuanto": "boolean",
"isInverse": "boolean",
"initMargin": "float",
"maintMargin": "float",
"riskLimit": "long",
"riskStep": "long",
"limit": "float",
"taxed": "boolean",
"deleverage": "boolean",
"makerFee": "float",
"takerFee": "float",
"settlementFee": "float",
"fundingBaseSymbol": "symbol",
"fundingQuoteSymbol": "symbol",
"fundingPremiumSymbol": "symbol",
"fundingTimestamp": "timestamp",
"fundingInterval": "timespan",
"fundingRate": "float",
"indicativeFundingRate": "float",
"rebalanceTimestamp": "timestamp",
"rebalanceInterval": "timespan",
"launchingTimestamp": "timestamp",
"prevClosePrice": "float",
"limitDownPrice": "float",
"limitUpPrice": "float",
"prevTotalVolume": "long",
"totalVolume": "long",
"volume": "long",
"volume24h": "long",
"prevTotalTurnover": "long",
"totalTurnover": "long",
"turnover": "long",
"turnover24h": "long",
"homeNotional24h": "float",
"foreignNotional24h": "float",
"prevPrice24h": "float",
"vwap": "float",
"highPrice": "float",
"lowPrice": "float",
"lastPrice": "float",
"lastPriceProtected": "float",
"lastTickDirection": "symbol",
"lastChangePcnt": "float",
"bidPrice": "float",
"midPrice": "float",
"askPrice": "float",
"impactBidPrice": "float",
"impactMidPrice": "float",
"impactAskPrice": "float",
"hasLiquidity": "boolean",
"openInterest": "long",
"openValue": "long",
"fairMethod": "symbol",
"fairBasisRate": "float",
"fairBasis": "float",
"fairPrice": "float",
"markMethod": "symbol",
"markPrice": "float",
"referencePrice": "float",
"indicativeSettlePrice": "float",
"settledPriceAdjustmentRate": "float",
"settledPrice": "float",
"instantPnl": "boolean",
"minTick": "float",
"fundingBaseRate": "float",
"fundingQuoteRate": "float",
"farLegSymbol": "symbol",
"nearLegSymbol": "symbol",
"tags": "symbol",
"timestamp": "timestamp"
},
"filter": {
"symbol": "XBTUSDT"
},
"data": [
{
"symbol": "XBTUSDT",
"fundingTimestamp": "2026-09-02T20:00:00.000Z",
"fundingRate": 0.0001,
"volume24h": 6131600,
"turnover24h": 473010789790,
"prevPrice24h": 77932.3,
"highPrice": 78375.2,
"lowPrice": 76270,
"lastPrice": 76607.6,
"lastChangePcnt": -0.0166,
"openInterest": 60628400,
"markPrice": 76820.3,
"indicativeSettlePrice": 76812.65,
"timestamp": "2026-09-02T12:02:32.653Z"
}
]
}

Published row

received_time1788350554983233849—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350552653data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
price_change-1324.699999999997data[].lastPricedata[].prevPrice24hlastPrice − prevPrice24h, computed in 64-bit floats, so it can carry float noise (-1324.699999999997). Null unless the message has both fields.
price_change_percent-1.66data[].lastChangePcntlastChangePcnt × 100, in percent: BitMEX sends a fraction (-0.0166 becomes -1.66). Computed in 64-bit floats, so it can carry float noise (-1.6099999999999999).
weighted_average_pricenull—Null. BitMEX's vwap is not published.
last_price76607.6data[].lastPriceCopied from lastPrice.
last_quantitynull—Null. The instrument table has no last trade size.
open_price77932.3data[].prevPrice24hCopied from prevPrice24h, the price 24 hours earlier.
high_price78375.2data[].highPriceCopied from highPrice.
low_price76270data[].lowPriceCopied from lowPrice.
base_asset_volume6131600data[].volume24hCopied from volume24h, in raw instrument units, not base asset: for XBTUSDT 1 = 0.000001 XBT (6131600 is 6.1316 XBT).
quote_asset_volume473010789790data[].turnover24hCopied from turnover24h, in BitMEX's settlement units: for XBTUSDT 1 = 0.000001 USDT (473010789790 is about 473,011 USDT).
statistics_open_timenull—Null. Not sent by BitMEX.
statistics_close_timenull—Null. Not sent by BitMEX.
first_trade_idnull—Null. Not sent by BitMEX.
last_trade_idnull—Null. Not sent by BitMEX.
total_tradesnull—Null. Not sent by BitMEX.

Update after a trade

Reconstructed: BitMEX has closed and its feed can no longer be captured. Updates carry only the fields that changed. Columns whose fields are absent are null, not carried forward.

Abridged: Only the fields the pipeline reads are shown. Other fields are not in our published data, so any others BitMEX sent in this message are unknown.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:35.747710 UTC
{
"table": "instrument",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"lastPrice": 76820.1,
"lastChangePcnt": -0.0143,
"timestamp": "2026-09-02T12:02:35.599Z"
}
]
}

Published row

received_time1788350555747710878—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350555599data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
price_changenulldata[].lastPricelastPrice − prevPrice24h, computed in 64-bit floats, so it can carry float noise (-1324.699999999997). Null unless the message has both fields.
price_change_percent-1.43data[].lastChangePcntlastChangePcnt × 100, in percent: BitMEX sends a fraction (-0.0166 becomes -1.66). Computed in 64-bit floats, so it can carry float noise (-1.6099999999999999).
weighted_average_pricenull—Null. BitMEX's vwap is not published.
last_price76820.1data[].lastPriceCopied from lastPrice.
last_quantitynull—Null. The instrument table has no last trade size.
open_pricenull—Copied from prevPrice24h, the price 24 hours earlier.
high_pricenull—Copied from highPrice.
low_pricenull—Copied from lowPrice.
base_asset_volumenull—Copied from volume24h, in raw instrument units, not base asset: for XBTUSDT 1 = 0.000001 XBT (6131600 is 6.1316 XBT).
quote_asset_volumenull—Copied from turnover24h, in BitMEX's settlement units: for XBTUSDT 1 = 0.000001 USDT (473010789790 is about 473,011 USDT).
statistics_open_timenull—Null. Not sent by BitMEX.
statistics_close_timenull—Null. Not sent by BitMEX.
first_trade_idnull—Null. Not sent by BitMEX.
last_trade_idnull—Null. Not sent by BitMEX.
total_tradesnull—Null. Not sent by BitMEX.

Update with no ticker fields

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sent fields in this update that the pipeline does not read; which fields they were is not in our published data, so only symbol and timestamp are shown. The message still produces a row in all three files, with every value null.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:32.796552 UTC
{
"table": "instrument",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"timestamp": "2026-09-02T12:02:32.653Z"
}
]
}

Published row

received_time1788350552796552489—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350552653data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
price_changenull—lastPrice − prevPrice24h, computed in 64-bit floats, so it can carry float noise (-1324.699999999997). Null unless the message has both fields.
price_change_percentnull—lastChangePcnt × 100, in percent: BitMEX sends a fraction (-0.0166 becomes -1.66). Computed in 64-bit floats, so it can carry float noise (-1.6099999999999999).
weighted_average_pricenull—Null. BitMEX's vwap is not published.
last_pricenull—Copied from lastPrice.
last_quantitynull—Null. The instrument table has no last trade size.
open_pricenull—Copied from prevPrice24h, the price 24 hours earlier.
high_pricenull—Copied from highPrice.
low_pricenull—Copied from lowPrice.
base_asset_volumenull—Copied from volume24h, in raw instrument units, not base asset: for XBTUSDT 1 = 0.000001 XBT (6131600 is 6.1316 XBT).
quote_asset_volumenull—Copied from turnover24h, in BitMEX's settlement units: for XBTUSDT 1 = 0.000001 USDT (473010789790 is about 473,011 USDT).
statistics_open_timenull—Null. Not sent by BitMEX.
statistics_close_timenull—Null. Not sent by BitMEX.
first_trade_idnull—Null. Not sent by BitMEX.
last_trade_idnull—Null. Not sent by BitMEX.
total_tradesnull—Null. Not sent by BitMEX.

Notes

  • The instrument table feeds the ticker, mark price and open interest files: every message becomes one row in each of the three, with the same received_time.
  • BitMEX sends only changed fields, and the pipeline does not carry values forward. Most rows are null in every value column (XBTUSDT, 2026-09-02 12:00 UTC: 2,085 of 2,101 rows). Forward-fill per symbol, starting from a partial row.

Column types and descriptions: Ticker schema.

Mark Price

One row per instrument message.

  • WebSocket instrument:<symbol>

Partial (full instrument state after subscribing)

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sends a partial with every instrument field after every (re)connect; this is the only kind of message that carries every field the pipeline reads. keys, types and filter are copied from an instrument partial BitMEX sent on 2026-10-05.

Abridged: A partial carries every instrument field (the types header lists 100). Only the fields the pipeline reads are shown; the others are not in our published data.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:34.983233 UTC
{
"table": "instrument",
"action": "partial",
"keys": ["symbol"],
"types": {
"symbol": "symbol",
"rootSymbol": "symbol",
"instrumentID": "int",
"state": "symbol",
"typ": "symbol",
"listing": "timestamp",
"front": "timestamp",
"expiry": "timestamp",
"settle": "timestamp",
"listedSettle": "timestamp",
"relistInterval": "timespan",
"positionCurrency": "symbol",
"underlying": "symbol",
"quoteCurrency": "symbol",
"underlyingSymbol": "symbol",
"reference": "symbol",
"referenceSymbol": "symbol",
"calcInterval": "timespan",
"publishInterval": "timespan",
"publishTime": "timespan",
"maxOrderQty": "long",
"minPrice": "float",
"maxPrice": "float",
"lotSize": "long",
"tickSize": "float",
"multiplier": "long",
"settlCurrency": "symbol",
"underlyingToPositionMultiplier": "long",
"underlyingToSettleMultiplier": "long",
"quoteToSettleMultiplier": "long",
"isQuanto": "boolean",
"isInverse": "boolean",
"initMargin": "float",
"maintMargin": "float",
"riskLimit": "long",
"riskStep": "long",
"limit": "float",
"taxed": "boolean",
"deleverage": "boolean",
"makerFee": "float",
"takerFee": "float",
"settlementFee": "float",
"fundingBaseSymbol": "symbol",
"fundingQuoteSymbol": "symbol",
"fundingPremiumSymbol": "symbol",
"fundingTimestamp": "timestamp",
"fundingInterval": "timespan",
"fundingRate": "float",
"indicativeFundingRate": "float",
"rebalanceTimestamp": "timestamp",
"rebalanceInterval": "timespan",
"launchingTimestamp": "timestamp",
"prevClosePrice": "float",
"limitDownPrice": "float",
"limitUpPrice": "float",
"prevTotalVolume": "long",
"totalVolume": "long",
"volume": "long",
"volume24h": "long",
"prevTotalTurnover": "long",
"totalTurnover": "long",
"turnover": "long",
"turnover24h": "long",
"homeNotional24h": "float",
"foreignNotional24h": "float",
"prevPrice24h": "float",
"vwap": "float",
"highPrice": "float",
"lowPrice": "float",
"lastPrice": "float",
"lastPriceProtected": "float",
"lastTickDirection": "symbol",
"lastChangePcnt": "float",
"bidPrice": "float",
"midPrice": "float",
"askPrice": "float",
"impactBidPrice": "float",
"impactMidPrice": "float",
"impactAskPrice": "float",
"hasLiquidity": "boolean",
"openInterest": "long",
"openValue": "long",
"fairMethod": "symbol",
"fairBasisRate": "float",
"fairBasis": "float",
"fairPrice": "float",
"markMethod": "symbol",
"markPrice": "float",
"referencePrice": "float",
"indicativeSettlePrice": "float",
"settledPriceAdjustmentRate": "float",
"settledPrice": "float",
"instantPnl": "boolean",
"minTick": "float",
"fundingBaseRate": "float",
"fundingQuoteRate": "float",
"farLegSymbol": "symbol",
"nearLegSymbol": "symbol",
"tags": "symbol",
"timestamp": "timestamp"
},
"filter": {
"symbol": "XBTUSDT"
},
"data": [
{
"symbol": "XBTUSDT",
"fundingTimestamp": "2026-09-02T20:00:00.000Z",
"fundingRate": 0.0001,
"volume24h": 6131600,
"turnover24h": 473010789790,
"prevPrice24h": 77932.3,
"highPrice": 78375.2,
"lowPrice": 76270,
"lastPrice": 76607.6,
"lastChangePcnt": -0.0166,
"openInterest": 60628400,
"markPrice": 76820.3,
"indicativeSettlePrice": 76812.65,
"timestamp": "2026-09-02T12:02:32.653Z"
}
]
}

Published row

received_time1788350554983233849—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350552653data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
mark_price76820.3data[].markPriceCopied from markPrice. Null when the message has no markPrice.
index_pricenull—Null. The pipeline does not take an index price from the instrument table.
estimated_settle_price76812.65data[].indicativeSettlePriceCopied from indicativeSettlePrice. Null when the message does not carry it.
funding_rate0.0001data[].fundingRateCopied from fundingRate. A fraction per funding period (8 hours for XBTUSDT): 0.0001 is 0.01 %. Null when the message does not carry it.
next_funding_time1788379200000data[].fundingTimestampParsed from fundingTimestamp, the next funding time. Milliseconds. Null when the message does not carry it.

Mark price at the funding time

Reconstructed: BitMEX has closed and its feed can no longer be captured. At the 12:00 UTC funding time, the update carried a new markPrice and the next fundingTimestamp.

Abridged: Only the fields the pipeline reads are shown. Other fields are not in our published data, so any others BitMEX sent in this message are unknown.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:00:00.184573 UTC
{
"table": "instrument",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"fundingTimestamp": "2026-09-02T20:00:00.000Z",
"markPrice": 76837.13,
"timestamp": "2026-09-02T12:00:00.000Z"
}
]
}

Published row

received_time1788350400184573173—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350400000data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
mark_price76837.13data[].markPriceCopied from markPrice. Null when the message has no markPrice.
index_pricenull—Null. The pipeline does not take an index price from the instrument table.
estimated_settle_pricenull—Copied from indicativeSettlePrice. Null when the message does not carry it.
funding_ratenull—Copied from fundingRate. A fraction per funding period (8 hours for XBTUSDT): 0.0001 is 0.01 %. Null when the message does not carry it.
next_funding_time1788379200000data[].fundingTimestampParsed from fundingTimestamp, the next funding time. Milliseconds. Null when the message does not carry it.

Indicative settle price update

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sends markPrice and indicativeSettlePrice in separate updates, so each row has one of them and the other is null.

Abridged: Only the fields the pipeline reads are shown. Other fields are not in our published data, so any others BitMEX sent in this message are unknown.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:00:00.228274 UTC
{
"table": "instrument",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"indicativeSettlePrice": 76827.79,
"timestamp": "2026-09-02T12:00:00.057Z"
}
]
}

Published row

received_time1788350400228274616—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788350400057data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.
symbolXBTUSDTdata[].symbolCopied.
mark_pricenull—Copied from markPrice. Null when the message has no markPrice.
index_pricenull—Null. The pipeline does not take an index price from the instrument table.
estimated_settle_price76827.79data[].indicativeSettlePriceCopied from indicativeSettlePrice. Null when the message does not carry it.
funding_ratenull—Copied from fundingRate. A fraction per funding period (8 hours for XBTUSDT): 0.0001 is 0.01 %. Null when the message does not carry it.
next_funding_timenull—Parsed from fundingTimestamp, the next funding time. Milliseconds. Null when the message does not carry it.

Notes

  • The same instrument messages also produce the ticker and open interest rows.
  • BitMEX sends only changed fields, and the pipeline does not carry values forward. Most rows have only mark_price, only estimated_settle_price or no value at all (XBTUSDT, 2026-09-02 12:00 UTC: 684, 685 and 729 of 2,101 rows). Forward-fill per symbol.

Column types and descriptions: Mark Price schema.

Open Interest

One row per instrument message.

  • WebSocket instrument:<symbol>

Partial (full instrument state after subscribing)

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sends a partial with every instrument field after every (re)connect; this is the only kind of message that carries every field the pipeline reads. keys, types and filter are copied from an instrument partial BitMEX sent on 2026-10-05.

Abridged: A partial carries every instrument field (the types header lists 100). Only the fields the pipeline reads are shown; the others are not in our published data.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:34.983233 UTC
{
"table": "instrument",
"action": "partial",
"keys": ["symbol"],
"types": {
"symbol": "symbol",
"rootSymbol": "symbol",
"instrumentID": "int",
"state": "symbol",
"typ": "symbol",
"listing": "timestamp",
"front": "timestamp",
"expiry": "timestamp",
"settle": "timestamp",
"listedSettle": "timestamp",
"relistInterval": "timespan",
"positionCurrency": "symbol",
"underlying": "symbol",
"quoteCurrency": "symbol",
"underlyingSymbol": "symbol",
"reference": "symbol",
"referenceSymbol": "symbol",
"calcInterval": "timespan",
"publishInterval": "timespan",
"publishTime": "timespan",
"maxOrderQty": "long",
"minPrice": "float",
"maxPrice": "float",
"lotSize": "long",
"tickSize": "float",
"multiplier": "long",
"settlCurrency": "symbol",
"underlyingToPositionMultiplier": "long",
"underlyingToSettleMultiplier": "long",
"quoteToSettleMultiplier": "long",
"isQuanto": "boolean",
"isInverse": "boolean",
"initMargin": "float",
"maintMargin": "float",
"riskLimit": "long",
"riskStep": "long",
"limit": "float",
"taxed": "boolean",
"deleverage": "boolean",
"makerFee": "float",
"takerFee": "float",
"settlementFee": "float",
"fundingBaseSymbol": "symbol",
"fundingQuoteSymbol": "symbol",
"fundingPremiumSymbol": "symbol",
"fundingTimestamp": "timestamp",
"fundingInterval": "timespan",
"fundingRate": "float",
"indicativeFundingRate": "float",
"rebalanceTimestamp": "timestamp",
"rebalanceInterval": "timespan",
"launchingTimestamp": "timestamp",
"prevClosePrice": "float",
"limitDownPrice": "float",
"limitUpPrice": "float",
"prevTotalVolume": "long",
"totalVolume": "long",
"volume": "long",
"volume24h": "long",
"prevTotalTurnover": "long",
"totalTurnover": "long",
"turnover": "long",
"turnover24h": "long",
"homeNotional24h": "float",
"foreignNotional24h": "float",
"prevPrice24h": "float",
"vwap": "float",
"highPrice": "float",
"lowPrice": "float",
"lastPrice": "float",
"lastPriceProtected": "float",
"lastTickDirection": "symbol",
"lastChangePcnt": "float",
"bidPrice": "float",
"midPrice": "float",
"askPrice": "float",
"impactBidPrice": "float",
"impactMidPrice": "float",
"impactAskPrice": "float",
"hasLiquidity": "boolean",
"openInterest": "long",
"openValue": "long",
"fairMethod": "symbol",
"fairBasisRate": "float",
"fairBasis": "float",
"fairPrice": "float",
"markMethod": "symbol",
"markPrice": "float",
"referencePrice": "float",
"indicativeSettlePrice": "float",
"settledPriceAdjustmentRate": "float",
"settledPrice": "float",
"instantPnl": "boolean",
"minTick": "float",
"fundingBaseRate": "float",
"fundingQuoteRate": "float",
"farLegSymbol": "symbol",
"nearLegSymbol": "symbol",
"tags": "symbol",
"timestamp": "timestamp"
},
"filter": {
"symbol": "XBTUSDT"
},
"data": [
{
"symbol": "XBTUSDT",
"fundingTimestamp": "2026-09-02T20:00:00.000Z",
"fundingRate": 0.0001,
"volume24h": 6131600,
"turnover24h": 473010789790,
"prevPrice24h": 77932.3,
"highPrice": 78375.2,
"lowPrice": 76270,
"lastPrice": 76607.6,
"lastChangePcnt": -0.0166,
"openInterest": 60628400,
"markPrice": 76820.3,
"indicativeSettlePrice": 76812.65,
"timestamp": "2026-09-02T12:02:32.653Z"
}
]
}

Published row

received_time1788350554983233849—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
symbolXBTUSDTdata[].symbolCopied.
sum_open_interest60628400data[].openInterestCopied from openInterest, in raw instrument units: for XBTUSDT 1 = 0.000001 XBT (60628400 is 60.6284 XBT). Null when the message has no openInterest.
sum_open_interest_valuenull—Null. BitMEX's openValue is not published.
timestamp1788350552653data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.

Open interest update

Reconstructed: BitMEX has closed and its feed can no longer be captured.

Abridged: Only the fields the pipeline reads are shown. Other fields are not in our published data, so any others BitMEX sent in this message are unknown.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:36.595997 UTC
{
"table": "instrument",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"openInterest": 60608400,
"timestamp": "2026-09-02T12:02:36.454Z"
}
]
}

Published row

received_time1788350556595997632—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
symbolXBTUSDTdata[].symbolCopied.
sum_open_interest60608400data[].openInterestCopied from openInterest, in raw instrument units: for XBTUSDT 1 = 0.000001 XBT (60628400 is 60.6284 XBT). Null when the message has no openInterest.
sum_open_interest_valuenull—Null. BitMEX's openValue is not published.
timestamp1788350556454data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.

Update without open interest

Reconstructed: BitMEX has closed and its feed can no longer be captured. BitMEX sent fields in this update that the pipeline does not read; which fields they were is not in our published data, so only symbol and timestamp are shown. The message still produces a row in all three files, with every value null.

WebSocket message (reconstructed) · instrument:<symbol>received 2026-09-02 12:02:32.796552 UTC
{
"table": "instrument",
"action": "update",
"data": [
{
"symbol": "XBTUSDT",
"timestamp": "2026-09-02T12:02:32.653Z"
}
]
}

Published row

received_time1788350552796552489—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
symbolXBTUSDTdata[].symbolCopied.
sum_open_interestnull—Copied from openInterest, in raw instrument units: for XBTUSDT 1 = 0.000001 XBT (60628400 is 60.6284 XBT). Null when the message has no openInterest.
sum_open_interest_valuenull—Null. BitMEX's openValue is not published.
timestamp1788350552653data[].timestampParsed from the ISO 8601 timestamp. Milliseconds.

Notes

  • Open interest is null in most rows, because BitMEX sends it only when it changes (XBTUSDT, 2026-09-02 12:00 UTC: 8 of 2,101 rows have a value). Drop null rows and forward-fill.
  • Sizes are raw per-instrument units, not base asset: XBTUSD in USD contracts, XBTUSDT in 0.000001 XBT, ETHUSDT in 0.00001 ETH, spot pairs in 0.00000001 of the base asset. Check the instrument's multiplier before comparing with other venues.

Column types and descriptions: Open Interest schema.

Liquidations

One row per row of the liquidation table, which lists liquidation orders as BitMEX enters them into the book.

  • WebSocket liquidation:<symbol>

Reconstructed: BitMEX has closed and its feed can no longer be captured.

Abridged: BitMEX also sent the order's orderID (the table's key); it is not published, so it is left out.

WebSocket message (reconstructed) · liquidation:<symbol>received 2026-09-01 12:01:26.784605 UTC
{
"table": "liquidation",
"action": "insert",
"data": [
{
"symbol": "XBTUSDT",
"side": "Sell",
"price": 78007,
"leavesQty": 14800
}
]
}

Published row

received_time1788264086784605200—Our collector's clock when the message arrived, in nanoseconds since the Unix epoch. Not sent by BitMEX.
event_time1788264086784—BitMEX liquidation messages carry no timestamp, so this is our receive time. The pipeline wrote it in nanoseconds; published history was converted to milliseconds on 2026-10-04.
symbolXBTUSDTdata[].symbolCopied.
sideSELLdata[].sideUppercased. The side of BitMEX's liquidation order: SELL closes a liquidated long, BUY a liquidated short.
order_typeMarket—Constant Market. A placeholder; BitMEX does not send an order type here.
time_in_forceIOC—Constant IOC. A placeholder; BitMEX does not send a time in force here.
quantity14800data[].leavesQtyCopied from leavesQty (the table has no orderQty), in raw instrument units: for XBTUSDT 1 = 0.000001 XBT (14800 is 0.0148 XBT).
price78007data[].priceCopied: the liquidation order's price. Converted through a 64-bit float and printed in shortest form.
average_price78007data[].priceSame value as price. Not an average fill price.
order_statusFILLED—Constant FILLED. A placeholder; the message says nothing about fills.
last_filled_quantity14800data[].leavesQtySame value as quantity. Not a fill.
filled_quantity14800data[].leavesQtySame value as quantity. Not a fill.
trade_time1788264086784—Same as event_time. Our receive time; milliseconds since the 2026-10-04 correction, nanoseconds before it.

Notes

  • BitMEX sent a second message for most liquidation orders, a few seconds after the first, with the same side, price and quantity. The collector stored both, so about 95 % of liquidations were published twice. On 2026-10-04 published history was corrected: the second of two identical rows (symbol, side, price, quantity) within 30 seconds was removed, and event_time and trade_time were converted from nanoseconds to milliseconds.
  • The 2026-09-01 12:00 UTC example hour originally had two identical rows, received 10 seconds apart; the second was removed by the correction.
  • order_type, time_in_force and order_status are placeholders, and the fill columns repeat quantity.
  • Sizes are raw per-instrument units, not base asset: XBTUSD in USD contracts, XBTUSDT in 0.000001 XBT, ETHUSDT in 0.00001 ETH, spot pairs in 0.00000001 of the base asset. Check the instrument's multiplier before comparing with other venues.

Column types and descriptions: Liquidations schema.