Request Snapshots
Request fresh snapshots for one or more subscriptions.
/wsAuthorization
UDX-Access-KeyAPI key · headerrequiredOpaque API key ID.
UDX-Access-TimestampAPI key · headerrequiredUnix time in milliseconds, within 30 seconds of server time.
UDX-Access-SignatureAPI key · headerrequiredStandard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt. Sign timestamp + "GET" + "/ws"; the upgrade request has no body hash and no idempotency key.
snapshotRequest fresh snapshots for the given subscriptions.
idCommandIdrequiredClient-assigned command correlation identifier, unique among commands in flight on this connection.
cmdstringrequiredSelects the snapshot command.
paramsSnapshotCommandParamsrequiredSelects subscriptions as a canonical array.
Show propertiesHide properties
sidsSubscriptionIdListrequiredCanonical non-empty list of distinct subscription identifiers.
orderbook_snapshotReturn one snapshot correlated to a snapshot command.
idCommandIdrequiredClient-assigned command correlation identifier, unique among commands in flight on this connection.
typestringrequiredIdentifies a complete order book snapshot.
sidSubscriptionIdrequiredExchange-assigned subscription ID whose lifetime is this WebSocket connection.
seqSequenceNumberrequiredGap-detection sequence local to one subscription. It starts at 1 and increments once per frame on that subscription.
msgOrderbookSnapshotPayloadrequiredComplete visible L1, L2, or L3 order book state for one market.
Show propertiesHide properties
tickerTickerrequiredA human-meaningful natural key naming a single-leg or multi-leg market.
bidsPriceLevel[]requiredBid levels in best-first order as [price, quantity] pairs.
asksPriceLevel[]requiredAsk levels in best-first order as [price, quantity] pairs.
tickerTickerrequiredA human-meaningful natural key naming a single-leg or multi-leg market.
bidsL3OrderbookEntry[]requiredAnonymous bid orders in best-price, FIFO order across the requested price-level depth.
Show propertiesHide properties
L3OrderbookEntryentry_idstringrequiredStable market-data entry handle. It is deliberately not the exchange order ID returned to the order owner.
priceFixedPointPricerequiredYES-side price in dollars as an exact fixed-point decimal string with at most six decimal places.
quantityFixedPointQuantityrequiredA quantity in contracts as a fixed-point decimal string.
asksL3OrderbookEntry[]requiredAnonymous ask orders in best-price, FIFO order across the requested price-level depth.
Show propertiesHide properties
L3OrderbookEntryentry_idstringrequiredStable market-data entry handle. It is deliberately not the exchange order ID returned to the order owner.
priceFixedPointPricerequiredYES-side price in dollars as an exact fixed-point decimal string with at most six decimal places.
quantityFixedPointQuantityrequiredA quantity in contracts as a fixed-point decimal string.
rate_limitobjectPresent only on the first snapshot in this command's finite result series; later snapshots from the same command omit it.
Show propertiesHide properties
bucketstringrequiredShared member bucket consulted for this command.
readwritecancelcapacityinteger<int64>requiredMaximum tokens held by the bucket.
refill_tokens_per_minuteinteger<int64>requiredTokens restored per minute.
remaininginteger<int64>requiredTokens remaining after th decision.
full_after_msinteger<int64>requiredMilliseconds until the bucket is full if no more work is admitted.
invalid_messageThe JSON or common command envelope is invalid.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
fieldstringJSON path to the invalid field when one can be identified.
invalid_paramsCommand params fail schema or semantic validation.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
fieldstringJSON path to the invalid param when one can be identified.
command_id_in_useAnother command with the supplied identifier is still in flight.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
subscription_not_foundThe subscription identifier is not active on this connection.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
sidSubscriptionIdrequiredExchange-assigned subscription ID whose lifetime is this WebSocket connection.
subscription_not_readyCurrent state is not yet established for the requested operation.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
snapshot_in_progressThe subscription already has a snapshot command in flight.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
channel_unavailableThe channel's upstream source cannot serve the operation right now. Retry with backoff; the connection stays usable.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
capacity_exceededA standing-resource limit prevents command admission.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
scopestringrequiredBoundary at which the standing-resource limit applies.
connectionmemberprocessresourcestringrequiredRetained or concurrent resource that reached its limit.
in_flight_commandsactive_subscriptionsmarket_data_streamslimitinteger<int64>requiredEnforced maximum for the identified scope and resource.
rate_limit_exceededA command rate limit was exceeded.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
retry_after_msinteger<int64>requiredMinimum delay in milliseconds before another attempt.
admission_unavailableShared admission policy or state is temporarily unavailable.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
internal_errorAn unexpected failure left connection state safe to continue.
codestringrequiredStable machine-readable error code.
detailErrorDetailrequiredHuman-readable occurrence detail that clients must not parse.
instanceErrorInstancerequiredRequest identifier for troubleshooting with exchange support.
Channel Bindings
wsmethodGETheadersUDX-Access-KeystringrequiredOpaque API key ID.
UDX-Access-TimestampstringrequiredUnix time in milliseconds, within 30 seconds of server time.
UDX-Access-SignaturestringrequiredStandard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt. Sign timestamp + "GET" + "/ws"; the upgrade request has no body hash and no idempotency key.
Sec-WebSocket-ProtocolstringrequiredNegotiated dated WebSocket API version.
snapshot
{
"id": 3,
"cmd": "snapshot",
"params": {
"sids": [
7,
8
]
}
}orderbook_snapshot
{
"id": 3,
"type": "orderbook_snapshot",
"sid": 7,
"seq": 18,
"msg": {
"ticker": "UDX-EXAMPLE-MARKET-A",
"bids": [
[
"0.45",
"100"
]
],
"asks": [
[
"0.47",
"80"
]
]
},
"rate_limit": {
"bucket": "read",
"capacity": 30,
"refill_tokens_per_minute": 900,
"remaining": 9,
"full_after_ms": 1400
}
}invalid_message
{
"type": "error",
"msg": {
"code": "invalid_message",
"detail": "WebSocket command is not a valid JSON object",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}invalid_params
{
"id": 4,
"type": "error",
"msg": {
"code": "invalid_params",
"detail": "the orderbook channel requires tickers",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef",
"field": "params.channels"
}
}command_id_in_use
{
"id": 4,
"type": "error",
"msg": {
"code": "command_id_in_use",
"detail": "WebSocket command ID is already in flight",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}subscription_not_found
{
"id": 4,
"type": "error",
"msg": {
"code": "subscription_not_found",
"detail": "subscription is not active on this connection",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef",
"sid": 9
}
}subscription_not_ready
{
"id": 4,
"type": "error",
"sid": 7,
"msg": {
"code": "subscription_not_ready",
"detail": "subscription has not established current state",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}snapshot_in_progress
{
"id": 4,
"type": "error",
"sid": 7,
"msg": {
"code": "snapshot_in_progress",
"detail": "subscription already has a snapshot command in flight",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}channel_unavailable
{
"id": 4,
"type": "error",
"msg": {
"code": "channel_unavailable",
"detail": "current market data is unavailable",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}capacity_exceeded
{
"id": 4,
"type": "error",
"msg": {
"code": "capacity_exceeded",
"detail": "WebSocket connection command capacity is exhausted",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef",
"scope": "connection",
"resource": "in_flight_commands",
"limit": 32
}
}rate_limit_exceeded
{
"id": 4,
"type": "error",
"msg": {
"code": "rate_limit_exceeded",
"detail": "member read rate limit is exhausted",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef",
"retry_after_ms": 1200
},
"rate_limit": {
"bucket": "read",
"capacity": 30,
"refill_tokens_per_minute": 900,
"remaining": 0,
"full_after_ms": 2000
}
}admission_unavailable
{
"id": 4,
"type": "error",
"msg": {
"code": "admission_unavailable",
"detail": "shared WebSocket admission is temporarily unavailable",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}internal_error
{
"id": 4,
"type": "error",
"msg": {
"code": "internal_error",
"detail": "WebSocket command failed",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}
}