Error surfaces
| Surface | Where it appears | Meaning |
|---|
| Subscription-control failure | ACKNOWLEDGE.result.error | The server rejected a SUBSCRIBE or UNSUBSCRIBE request; correlate with the echoed nonce when present, but keep outstanding request bookkeeping because the payload schema only requires result |
| Order-domain rejection | ORDER_UPDATE payload fields such as orderRejection or cancelRejection | The WebSocket connection stayed alive, but an order-related event was rejected |
| Strategy-domain rejection | STRATEGY_UPDATE.withdrawRejection | A collateral or insurance-fund withdrawal action was rejected |
| Trader-domain rejection | TRADER_UPDATE.withdrawDDXRejection | A DDX withdrawal action was rejected |
Current public contract
ACKNOWLEDGE.result is the required acknowledgement field. The published subscribe and unsubscribe descriptions show the acknowledgement flow echoing the client nonce, but the payload schema does not require that echo.
ACKNOWLEDGE.result.error means the control message failed; an empty result means the control-plane request succeeded, not that later business-domain events cannot still reject.
- User-data updates can carry rejection enums even when the connection itself is healthy.
- Recovery logic should distinguish between reconnect-and-resubscribe problems, bootstrap or continuity repair, and business-level rejections inside a feed update.
- The current published AsyncAPI family does not define a signed WebSocket command error channel.
Recovery split
| Failure class | Recovery posture |
|---|
ACKNOWLEDGE.result.error on subscribe control | Repair the feed list or filter set, resend the control request, and do not assume the subscription state changed |
| Socket close or disconnect | Reconnect, resubscribe, and restore client bookkeeping before consuming new updates |
| Missing or suspect continuity after reconnect | Reconcile one update family at a time from REST/history plus the documented ordinal fields; do not compare globalOrdinal across different update types |
Rejection fields inside ORDER_UPDATE, STRATEGY_UPDATE, or TRADER_UPDATE | Keep the connection alive, then handle the business rejection in the affected trading, withdrawal, or trader-state flow |
Adjacent routes
Last modified on April 13, 2026