Skip to main content
Subscribe to WebSocket topics by sending a subscribe message. Topic names are case-insensitive for the pair segment at input time and are normalized by Stabyl. Examples use the canonical topic key USD_NGN.

Topic Catalog

Supported candle intervals are 1m, 5m, 15m, 1h, 4h, and 1d. Subscribing to a private topic without the required scope returns an error with code forbidden.
orderbook.* is not supported. Subscribe to exact order book topics such as orderbook.USD_NGN.

Subscription Response

When a subscription succeeds, the server responds with subscribed.
Snapshots are best effort and currently apply to exact order book topics. If a snapshot is omitted, fetch the REST order book snapshot before applying live deltas.

Data Envelope

All topic updates use the same outer envelope:
Use the envelope seq for WebSocket recovery. Payloads may also include their own domain sequence fields.

Order Book Payloads

An orderbook.{pair_key} message can carry either a snapshot-style payload or a delta batch. Snapshot style payload:
Delta batch payload:
Recommended recovery:
  1. Fetch GET /partner/exchange/orderbook/USD%2FNGN/snapshot.
  2. Subscribe to orderbook.USD_NGN with snapshot: true.
  3. Apply updates in seq order.
  4. If a gap is detected, fetch a fresh REST snapshot and resume from the new baseline.

Trade Payload

trades.{pair_key} and trades.* carry public trade tape updates.
Use GET /partner/exchange/trades for backfills and WebSocket trades for live updates.

Ticker Payload

ticker.{pair_key} and ticker.* carry current 24-hour market statistics.
Every field is always present. open, high, low, last, price_change, price_change_pct, best_bid, and best_ask are null when there is no data for them.

Candle Payload

candles.{pair_key}.{interval} and candles.* carry OHLCV candle updates.

Private Order Update

user.orders carries order updates for your account. Subscribe with an API key that has trades:view.
order_id is a deprecated alias of id; read id. status is one of pending, cancelling, replacing, accepted, partially_filled, filled, cancelled, rejected, or expired. Treat filled, cancelled, rejected, and expired as terminal. Confirm final state with GET /partner/exchange/orders/{order_id} when needed.

Private Fill Update

user.fills carries fills for your account. It does not expose counterparty identity.
applied_fee_bps and maker_rebate are present only when they apply to the fill.

Resume

Send resume when reconnecting:
Resume is supported for exact topics, including user.orders, user.fills, user.balances, and user.credit. Wildcard topics such as trades.* and the user.fills.batch topic are not replayed. If the server cannot resume, it may omit replayed messages or send connection_reset. Rebuild the affected topic from REST, then continue processing new data messages.