Skip to content

Service status · WebSocket ​

See connection, authentication and subscription limits in the WebSocket overview.

Unsubscribe

Subscription message (type: subscribe) ​

SENDsubscribe / status

Client → 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 ​

FieldTypeRequiredDescription
typestringYesAlways subscribe.
Allowed: "subscribe"
idstringNoSubscription ID. Default: default. Reuse it to replace the subscription.
Default: "default"
channelsstring[]YesProvide this value to subscribe only to this feed.
Allowed: ["status"]

Push message (e: status) ​

RECEIVEstatus

Server → 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 ​

FieldTypeRequiredDescription
estringYesAlways status.
Allowed: "status"
EintegerYesOracle publish time, Unix milliseconds.
statusstringYesoperational, planned_maintenance, partial_outage, full_outage.
Allowed: "operational", "planned_maintenance", "partial_outage", "full_outage"
severitystringYesinfo, warning, or critical.
Allowed: "info", "warning", "critical"
scopeobjectYesImpact scope: system (boolean), assets (string array), sources (string array). System-wide scope does not name assets or sources.
scope.systembooleanNo
scope.assetsstring[]No
scope.sourcesstring[]No
occurredAtintegerYesStatus occurrence time, Unix milliseconds.
scheduledEndAtintegerNoExpected maintenance end in Unix milliseconds. Required for planned_maintenance; optional for other states.
messagestringNoAdditional status details.
sourceStatesobject[]NoComplete snapshot of every source state, sorted by id. Sent on subscription, reconnect and resynchronization, when sourceView.kind is snapshot.
sourceStates[].idstringYesStable scope identifier (exchange/capability[/pair[/interval]]).
sourceStates[].scopeobjectYesIdentity of one source scope: an exchange capability, optionally narrowed to a pair and interval.
sourceStates[].scope.exchangestringYesExchange ID, e.g. binance.
sourceStates[].scope.capabilitystringYesRealtime WebSocket feed or history REST capability.
Allowed: "realtime_ws", "history_rest"
sourceStates[].scope.pairstringNoNative exchange market; omitted for an exchange-wide scope.
sourceStates[].scope.intervalstringNoNative interval (1m, 1h, 1d); omitted for an exchange- or pair-wide scope.
sourceStates[].statestringYesRealtime 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[].freshnessstringYesWhether the worker report backing this state is current.
Allowed: "fresh", "stale", "unknown"
sourceStates[].reasonstringNoWhy the state is not healthy, when applicable.
Allowed: "maintenance", "upstream_unavailable", "transport", "request_timeout", "message_stale", "report_stale", "report_missing", "unverified", "stream_gap"
sourceStates[].lastKnownStatestringNoThe last state seen while the report was fresh, retained while freshness is stale or unknown.
sourceStates[].lastKnownReasonstringNoThe reason recorded with lastKnownState.
sourceStates[].basestringNoBase asset of a pair scope.
sourceStates[].quotestringNoNative quote currency of a pair scope.
sourceStates[].enabledbooleanNoOperator enablement of the scope; automatic isolation never changes it.
sourceStates[].observedAtintegerYesWhen this state was observed, Unix milliseconds.
sourceStates[].changedAtintegerYesWhen the state last changed, Unix milliseconds.
sourceStates[].lastMessageAtintegerNoRealtime scopes: last upstream message, Unix milliseconds.
sourceStates[].lastTradeAtintegerNoRealtime scopes: last upstream trade, Unix milliseconds.
sourceStates[].lastSuccessintegerNoHistory scopes: last validated history success, Unix milliseconds.
sourceStates[].nextProbeintegerNoHistory scopes: next scheduled recovery probe, Unix milliseconds.
sourceChangeobjectNoOne source transition, when sourceView.kind is change. A pair change or recovery is sent even when the overall service status is unchanged.
sourceChange.currentobjectYesOne 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.idstringYesStable scope identifier (exchange/capability[/pair[/interval]]).
sourceChange.current.scopeobjectYesIdentity of one source scope: an exchange capability, optionally narrowed to a pair and interval.
sourceChange.current.scope.exchangestringYesExchange ID, e.g. binance.
sourceChange.current.scope.capabilitystringYesRealtime WebSocket feed or history REST capability.
Allowed: "realtime_ws", "history_rest"
sourceChange.current.scope.pairstringNoNative exchange market; omitted for an exchange-wide scope.
sourceChange.current.scope.intervalstringNoNative interval (1m, 1h, 1d); omitted for an exchange- or pair-wide scope.
sourceChange.current.statestringYesRealtime 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.freshnessstringYesWhether the worker report backing this state is current.
Allowed: "fresh", "stale", "unknown"
sourceChange.current.reasonstringNoWhy 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.lastKnownStatestringNoThe last state seen while the report was fresh, retained while freshness is stale or unknown.
sourceChange.current.lastKnownReasonstringNoThe reason recorded with lastKnownState.
sourceChange.current.basestringNoBase asset of a pair scope.
sourceChange.current.quotestringNoNative quote currency of a pair scope.
sourceChange.current.enabledbooleanNoOperator enablement of the scope; automatic isolation never changes it.
sourceChange.current.observedAtintegerYesWhen this state was observed, Unix milliseconds.
sourceChange.current.changedAtintegerYesWhen the state last changed, Unix milliseconds.
sourceChange.current.lastMessageAtintegerNoRealtime scopes: last upstream message, Unix milliseconds.
sourceChange.current.lastTradeAtintegerNoRealtime scopes: last upstream trade, Unix milliseconds.
sourceChange.current.lastSuccessintegerNoHistory scopes: last validated history success, Unix milliseconds.
sourceChange.current.nextProbeintegerNoHistory scopes: next scheduled recovery probe, Unix milliseconds.
sourceChange.previousStatestringNoThe state before this transition; omitted for a newly observed source.
sourceChange.recoverybooleanYesTrue when a previously faulty source has been validated healthy again.
sourceViewobjectNoProvenance of sourceStates or sourceChange; omitted on an operational transition that carries no source view.
sourceView.schemaVersionintegerYesAlways 1.
sourceView.publisherIdstringYesThe API publisher that produced the view.
sourceView.epochstringYesPublisher epoch; changes when the publisher restarts its view.
sourceView.revisionintegerYesMonotonic within a publisher epoch.
sourceView.kindstringYessnapshot carries sourceStates; change carries sourceChange.
Allowed: "snapshot", "change"
sourceView.completebooleanYesTrue when a snapshot lists every known source.
sourceView.observedAtintegerYesWhen the view was produced, Unix milliseconds.
sourceView.resyncbooleanNoSet when the publisher detected a revision gap and republished a full snapshot.