Skip to main content
Subscribe to changes in a particular user’s orders. You will receive updates when orders are filled, cancelled, or posted. Note that for performance reasons, updates are delayed by at most 100ms. CHANNEL NAME FORMAT active_orders:{maker}
NameTypeDescription
makerstringThe maker address to subscribe to
The channel no longer includes a baseToken parameter. Updates for all tokens are now broadcast on a single channel per maker address.
MESSAGE PAYLOAD FORMAT The message payload is an array of JSON objects. These are the same fields as in the orders section, with additional status and updateTime fields.
NameTypeDescription
orderHashstringA unique identifier for this order
marketHashstringThe market for this order
statusstring"ACTIVE" if still valid, "INACTIVE" if cancelled
fillAmountstringHow much this order has been filled in Ethereum units. See unit conversion.
pendingFillAmountstringAmount pending fill in Ethereum units. See unit conversion.
totalBetSizestringTotal size of this order in Ethereum units. See unit conversion.
percentageOddsstringThe odds the maker receives in the sportx protocol format. To convert to implied odds divide by 10^20. To get taker implied odds: takerOdds = 1 - percentageOdds / 10^20. See unit conversion.
expirynumberDeprecated. Always 2209006800.
apiExpirynumberThe time in unix seconds after which this order is no longer valid
saltstringA random number to differentiate identical orders
isMakerBettingOutcomeOnebooleantrue if the maker is betting outcome one
signaturestringSignature of the maker on this order
updateTimestringServer-side clock time for the last modification of this order
sportXeventIdstringThe event related to this order
Messages are sent in batches as an array. If you receive two updates for the same orderHash, order them by updateTime after converting to a BigInt.
// To subscribe
const maker = "0x082605F78dD03A8423113ecbEB794Fb3FFE478a2";
const sub = client.newSubscription(`active_orders:${maker}`, { positioned: true, recoverable: true });

sub.on("publication", (ctx) => {
  const data = ctx.data;
  // message handler logic
});

sub.subscribe();
The above returns JSON structured like this:
[
  {
    "orderHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890",
    "marketHash": "0x1234567890abcdef1234567890abcdef1234567890abcd",
    "status": "INACTIVE",
    "fillAmount": "100000000000000000",
    "pendingFillAmount": "500000000000000000",
    "totalBetSize": "2000000000000000000",
    "percentageOdds": "750000000000000000000",
    "expiry": 1747500000000,
    "apiExpiry": 1747500000000,
    "salt": "12345678901234567890123456789012345678901",
    "isMakerBettingOutcomeOne": false,
    "signature": "0xbf099ab02255d5e2a9e063dc43a7afe96e65f5e8fc2ed3d2ba60b0a3fcadb3441bf32271293e85b7a795c9d86a2384035a0da3285113e746547e236bc58885e0",
    "updateTime": 1747490000000,
    "sportXeventId": "L13772588"
  }
]