Service status · WebSocket
See connection, authentication and subscription limits in the WebSocket overview.
Subscription message (type: subscribe)
subscribe / statusClient → server
Receive status events: the current state when available and subsequent transitions. A status-only subscription needs no asset, quote, interval, or source parameters. With no asset fields, it can coexist with an all-asset market subscription.
Reply: subscribed
Message fields
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Always subscribe.Allowed: "subscribe" |
id | string | No | Subscription ID. Default: default. Reuse it to replace the subscription.Default: "default" |
channels | string[] | Yes | Provide this value to subscribe only to this feed. Allowed: ["status"] |
Push message (e: status)
statusServer → client
Subscribe to status to receive the current state when available, followed by later transitions. Planned maintenance includes scheduledEndAt; other states may omit it. Status events ignore symbol, quote, interval, and source filters. Monitor GET /v2/_hc independently because disconnected clients cannot receive outage messages. Source availability uses the same channel and envelope: sourceStates is a complete snapshot on subscription, reconnect and resynchronization, sourceChange is one source transition, and sourceView says how to apply them. Source identity distinguishes realtime_ws exchange/pair feeds from history_rest pair/interval capabilities, including auxiliary providers.
Message fields
| Field | Type | Required | Description |
|---|---|---|---|
e | string | Yes | Always status.Allowed: "status" |
E | integer | Yes | Oracle publish time, Unix milliseconds. |
status | string | Yes | operational, planned_maintenance, partial_outage, full_outage.Allowed: "operational", "planned_maintenance", "partial_outage", "full_outage" |
severity | string | Yes | info, warning, or critical.Allowed: "info", "warning", "critical" |
scope | object | Yes | Impact scope: system (boolean), assets (string array), sources (string array). System-wide scope does not name assets or sources. |
scope.system | boolean | No | |
scope.assets | string[] | No | |
scope.sources | string[] | No | |
occurredAt | integer | Yes | Status occurrence time, Unix milliseconds. |
scheduledEndAt | integer | No | Expected maintenance end in Unix milliseconds. Required for planned_maintenance; optional for other states. |
message | string | No | Additional status details. |
sourceStates | object[] | No | Complete snapshot of every source state, sorted by id. Sent on subscription, reconnect and resynchronization, when sourceView.kind is snapshot. |
sourceStates[].id | string | Yes | Stable scope identifier (exchange/capability[/pair[/interval]]). |
sourceStates[].scope | object | Yes | Identity of one source scope: an exchange capability, optionally narrowed to a pair and interval. |
sourceStates[].scope.exchange | string | Yes | Exchange ID, e.g. binance. |
sourceStates[].scope.capability | string | Yes | Realtime WebSocket feed or history REST capability. Allowed: "realtime_ws", "history_rest" |
sourceStates[].scope.pair | string | No | Native exchange market; omitted for an exchange-wide scope. |
sourceStates[].scope.interval | string | No | Native interval (1m, 1h, 1d); omitted for an exchange- or pair-wide scope. |
sourceStates[].state | string | Yes | Realtime scopes use starting, ok, reconnecting, reconfiguring, stale, maintenance; history scopes use healthy, observing, isolated, recovering; unknown when no fresh report is available; disabled when the operator disabled the scope; removed when a realtime scope left the authoritative inventory. |
sourceStates[].freshness | string | Yes | Whether the worker report backing this state is current. Allowed: "fresh", "stale", "unknown" |
sourceStates[].reason | string | No | Why the state is not healthy, when applicable. Allowed: "maintenance", "upstream_unavailable", "transport", "request_timeout", "message_stale", "report_stale", "report_missing", "unverified", "stream_gap" |
sourceStates[].lastKnownState | string | No | The last state seen while the report was fresh, retained while freshness is stale or unknown. |
sourceStates[].lastKnownReason | string | No | The reason recorded with lastKnownState. |
sourceStates[].base | string | No | Base asset of a pair scope. |
sourceStates[].quote | string | No | Native quote currency of a pair scope. |
sourceStates[].enabled | boolean | No | Operator enablement of the scope; automatic isolation never changes it. |
sourceStates[].observedAt | integer | Yes | When this state was observed, Unix milliseconds. |
sourceStates[].changedAt | integer | Yes | When the state last changed, Unix milliseconds. |
sourceStates[].lastMessageAt | integer | No | Realtime scopes: last upstream message, Unix milliseconds. |
sourceStates[].lastTradeAt | integer | No | Realtime scopes: last upstream trade, Unix milliseconds. |
sourceStates[].lastSuccess | integer | No | History scopes: last validated history success, Unix milliseconds. |
sourceStates[].nextProbe | integer | No | History scopes: next scheduled recovery probe, Unix milliseconds. |
sourceChange | object | No | One source transition, when sourceView.kind is change. A pair change or recovery is sent even when the overall service status is unchanged. |
sourceChange.current | object | Yes | One shared source state. REST GET /v2/source-status exposes the same states as source_states with snake_case names and RFC 3339 timestamps. |
sourceChange.current.id | string | Yes | Stable scope identifier (exchange/capability[/pair[/interval]]). |
sourceChange.current.scope | object | Yes | Identity of one source scope: an exchange capability, optionally narrowed to a pair and interval. |
sourceChange.current.scope.exchange | string | Yes | Exchange ID, e.g. binance. |
sourceChange.current.scope.capability | string | Yes | Realtime WebSocket feed or history REST capability. Allowed: "realtime_ws", "history_rest" |
sourceChange.current.scope.pair | string | No | Native exchange market; omitted for an exchange-wide scope. |
sourceChange.current.scope.interval | string | No | Native interval (1m, 1h, 1d); omitted for an exchange- or pair-wide scope. |
sourceChange.current.state | string | Yes | Realtime scopes use starting, ok, reconnecting, reconfiguring, stale, maintenance; history scopes use healthy, observing, isolated, recovering; unknown when no fresh report is available; disabled when the operator disabled the scope; removed when a realtime scope left the authoritative inventory. |
sourceChange.current.freshness | string | Yes | Whether the worker report backing this state is current. Allowed: "fresh", "stale", "unknown" |
sourceChange.current.reason | string | No | Why the state is not healthy, when applicable. Allowed: "maintenance", "upstream_unavailable", "transport", "request_timeout", "message_stale", "report_stale", "report_missing", "unverified", "stream_gap" |
sourceChange.current.lastKnownState | string | No | The last state seen while the report was fresh, retained while freshness is stale or unknown. |
sourceChange.current.lastKnownReason | string | No | The reason recorded with lastKnownState. |
sourceChange.current.base | string | No | Base asset of a pair scope. |
sourceChange.current.quote | string | No | Native quote currency of a pair scope. |
sourceChange.current.enabled | boolean | No | Operator enablement of the scope; automatic isolation never changes it. |
sourceChange.current.observedAt | integer | Yes | When this state was observed, Unix milliseconds. |
sourceChange.current.changedAt | integer | Yes | When the state last changed, Unix milliseconds. |
sourceChange.current.lastMessageAt | integer | No | Realtime scopes: last upstream message, Unix milliseconds. |
sourceChange.current.lastTradeAt | integer | No | Realtime scopes: last upstream trade, Unix milliseconds. |
sourceChange.current.lastSuccess | integer | No | History scopes: last validated history success, Unix milliseconds. |
sourceChange.current.nextProbe | integer | No | History scopes: next scheduled recovery probe, Unix milliseconds. |
sourceChange.previousState | string | No | The state before this transition; omitted for a newly observed source. |
sourceChange.recovery | boolean | Yes | True when a previously faulty source has been validated healthy again. |
sourceView | object | No | Provenance of sourceStates or sourceChange; omitted on an operational transition that carries no source view. |
sourceView.schemaVersion | integer | Yes | Always 1. |
sourceView.publisherId | string | Yes | The API publisher that produced the view. |
sourceView.epoch | string | Yes | Publisher epoch; changes when the publisher restarts its view. |
sourceView.revision | integer | Yes | Monotonic within a publisher epoch. |
sourceView.kind | string | Yes | snapshot carries sourceStates; change carries sourceChange.Allowed: "snapshot", "change" |
sourceView.complete | boolean | Yes | True when a snapshot lists every known source. |
sourceView.observedAt | integer | Yes | When the view was produced, Unix milliseconds. |
sourceView.resync | boolean | No | Set when the publisher detected a revision gap and republished a full snapshot. |
