Skip to content
Alchemy Logo

userOrderUpdates stream

This API is in private preview. Target September 2026; timing is subject to change.

{
  "method": "subscribe",
  "subscription": {
    "type": "userOrderUpdates",
    "users": ["0x1111111111111111111111111111111111111111"]
  }
}

{
  "channel": "subscriptionResponse",
  "data": {
    "subscriptionId": "sub_01",
    "type": "userOrderUpdates"
  }
}

{
  "channel": "userOrderUpdates",
  "subscriptionId": "sub_01",
  "blockHeight": 123456,
  "blockTime": 1780000000000,
  "cursor": "<opaque cursor>",
  "data": {
    "orders": [{
      "time": "2024-01-01T00:00:00.000000000",
      "user": "0x1111111111111111111111111111111111111111",
      "hash": "0xabc...def",
      "builder": { "b": "0x2222222222222222222222222222222222222222", "f": 100 },
      "status": "open",
      "txIndex": 3,
      "statusTimestamp": 1780000000000,
      "order": {
        "oid": 12345,
        "coin": "BTC",
        "side": "B",
        "limitPx": "100000.0",
        "sz": "0.10",
        "timestamp": 1780000000000,
        "triggerCondition": "N/A",
        "isTrigger": false,
        "triggerPx": "0.0",
        "children": [],
        "isPositionTpsl": false,
        "reduceOnly": false,
        "orderType": "Limit",
        "origSz": "0.10",
        "tif": "Gtc",
        "cloid": null
      }
    }]
  }
}

FieldTypeDescription
ordersarrayOrder status records.
orders[]objectOrder status record.
orders[].timestringTime the node recorded the order-status event.
orders[].userstringUser identifier.
orders[].hashstring | nullPopulated for open; null for every other observed status. Rejected and canceled orders have no submitted transaction.
orders[].builderobject | nullBuilder metadata when the order was placed through a builder; null otherwise.
orders[].statusstringCurrent state of the order. See the observed values below.
orders[].txIndexintegerIndex of the transaction within its block.
orders[].statusTimestampintegerMilliseconds timestamp for the status update.
orders[].orderobjectOrder fields.
orders[].order.oidintegerIdentifier assigned to the order.
orders[].order.coinstringMarket symbol for the order.
orders[].order.sidestringSide code: A is ask/sell; B is bid/buy.
orders[].order.limitPxstringLimit price for the order.
orders[].order.szstringCurrent resting size of the order.
orders[].order.timestampintegerMilliseconds timestamp when the order was created.
orders[].order.triggerConditionstringHuman-readable trigger condition, not a programmatic enum. Non-trigger orders use the literal "N/A"; use triggerPx for the machine-readable price.
orders[].order.isTriggerbooleanWhether the order is a trigger order.
orders[].order.triggerPxstringMachine-readable trigger price; "0.0" when isTrigger is false.
orders[].order.childrenarrayChild orders associated with the order.
orders[].order.isPositionTpslbooleanWhether the order is a position take-profit or stop-loss order.
orders[].order.reduceOnlybooleanWhether execution can only reduce the position.
orders[].order.orderTypestringDisplay string: Limit, Stop Limit, Stop Market, Market, Take Profit Market, or Take Profit Limit.
orders[].order.origSzstringOriginal order size.
orders[].order.tifstring | nullTime-in-force: Alo, Ioc, Gtc, FrontendMarket, or LiquidationMarket; null when not set.
orders[].order.cloidstring | nullClient-supplied order identifier, when present.

This list reflects values observed in node output and is not guaranteed exhaustive. Clients must tolerate unknown status strings rather than branch exhaustively.

StatusMeaning
openOrder is open.
canceledOrder was canceled.
badAloPxRejectedRejected under add-liquidity-only price handling.
perpMarginRejectedRejected by perpetual-margin checks.
iocCancelRejectedObserved immediate-or-cancel rejection status; the precise condition is not documented here.
filledOrder was filled.
insufficientSpotBalanceRejectedRejected for insufficient spot balance.
tooManyOpenOrdersRejectedRejected because too many orders were already open.
positionIncreaseAtOpenInterestCapRejectedRejected because it would increase position at the open-interest cap.
reduceOnlyCanceledCanceled because its reduce-only condition could no longer be met.
reduceOnlyRejectedRejected because its reduce-only condition could not be met.
minTradeNtlRejectedRejected below the minimum trade notional.
selfTradeCanceledCanceled to prevent a self-trade.
tooAggressiveAtOpenInterestCapRejectedRejected as too aggressive at the open-interest cap.
positionFlipAtOpenInterestCapRejectedRejected because it would flip position at the open-interest cap.
triggeredTrigger condition was met.
siblingFilledCanceledCanceled after a paired order filled.
openInterestCapCanceledCanceled at the open-interest cap.
marginCanceledCanceled for margin reasons.
liquidatedCanceledCanceled because the position was liquidated.
outcomeSettledCanceledCanceled because the outcome market settled.
openInterestIncreaseRejectedRejected because it would increase open interest.

{
  "method": "unsubscribe",
  "subscription": {
    "type": "userOrderUpdates",
    "users": ["0x1111111111111111111111111111111111111111"]
  }
}

To resume a stream, supply cursor in the subscription object. The cursor is opaque: clients store and return it unmodified, and its format may change.

Was this page helpful?