AsyncAPI 2.6 description of the Quix **Streaming Reader API**, a real-time, bidirectional surface delivered over a **Microsoft SignalR hub**. SignalR negotiates the best available transport and, for the vast majority of clients, uses **WebSockets** (`wss://`), falling back to Long Polling only when WebSockets are unavailable. Unlike many providers that only stream over one-way HTTP Server-Sent Events, Quix exposes a genuine WebSocket API here: the client both invokes hub methods (to subscribe / unsubscribe) and receives server-pushed events (parameter data, events, active-stream changes, topic metrics, raw packages) over the same persistent connection. Hub endpoint (environment-specific): https://reader-{environmentId}.cloud.quix.io/hub Authentication is by Quix Personal Access Token (PAT), supplied to the SignalR connection via `accessTokenFactory` (which sets the bearer token on the negotiate/connect requests). Invalid or missing tokens raise an `UnAuthorizedHubError`. Only the Streaming Reader API is SignalR-based. The Streaming Writer API (HTTP ingest) and the Portal API (management) are HTTP/REST and are modeled in the companion OpenAPI document at openapi/quix-openapi.yml.
View SpecView on GitHubStream ProcessingReal TimeKafkaPythonStreaming DataAsyncAPIWebhooksEvents
Channels
ParameterData
publishsubscribeToParameter
Invoke hub method to subscribe to parameter data.
Live time-series parameter data for a subscribed topic / stream / parameter. The client opens the subscription by invoking the hub method `SubscribeToParameter(topicName, streamId, parameterId)` (wildcard `*` is supported for topic, stream, and parameter), and the server pushes a `ParameterDataReceived` event for each matching batch of samples until `UnsubscribeFromParameter(...)` is invoked.
EventData
publishsubscribeToEvent
Invoke hub method to subscribe to event data.
Live discrete events for a subscribed topic / stream / event. Opened with hub method `SubscribeToEvent(topicName, streamId, eventId)`; the server pushes `EventDataReceived` events. Closed with `UnsubscribeFromEvent(...)`.
ActiveStreams
publishsubscribeToActiveStreams
Invoke hub method to subscribe to active-stream changes.
Notifications about streams becoming active or inactive on a topic. Opened with `SubscribeToActiveStreams(topicName)`; the server pushes `ActiveStreamsChanged` events with an action of `AddUpdate` or `Remove`. Closed with `UnsubscribeFromActiveStreams(topicName)`.
TopicMetrics
publishsubscribeToTopicMetrics
Invoke hub method to subscribe to topic metrics.
Periodic topic metrics such as bytes-per-second and active stream count. Opened with `SubscribeToTopicMetrics(topicName)`; the server pushes `TopicMetricsUpdated` events. Closed with `UnsubscribeFromTopicMetrics(topicName)`.
Packages
publishsubscribeToPackages
Invoke hub method to subscribe to raw packages.
Raw messages (packages) received on a topic. Opened with `SubscribeToPackages(topicName)`; the server pushes `PackageReceived` events. Closed with `UnsubscribeFromPackages(topicName)`.
Messages
✉
SubscribeToParameter
Hub invocation - SubscribeToParameter
Client-to-server SignalR invocation to subscribe to parameter data.
✉
ParameterDataReceived
Server event - ParameterDataReceived
A batch of time-series parameter samples pushed by the hub.
✉
SubscribeToEvent
Hub invocation - SubscribeToEvent
Client-to-server SignalR invocation to subscribe to event data.
✉
EventDataReceived
Server event - EventDataReceived
A discrete event pushed by the hub.
✉
SubscribeToActiveStreams
Hub invocation - SubscribeToActiveStreams
Client-to-server SignalR invocation to subscribe to active-stream changes.
✉
ActiveStreamsChanged
Server event - ActiveStreamsChanged
A stream was added/updated or removed on the topic.
✉
SubscribeToTopicMetrics
Hub invocation - SubscribeToTopicMetrics
Client-to-server SignalR invocation to subscribe to topic metrics.
✉
TopicMetricsUpdated
Server event - TopicMetricsUpdated
Periodic topic metrics pushed by the hub.
✉
SubscribeToPackages
Hub invocation - SubscribeToPackages
Client-to-server SignalR invocation to subscribe to raw packages.
✉
PackageReceived
Server event - PackageReceived
A raw message received on the topic.
Servers
wss
readerHubreader-{environmentId}.cloud.quix.io/hub
The Quix Streaming Reader SignalR hub for a specific environment. `{environmentId}` is the URL-friendly combination of organization, project, and environment names. SignalR upgrades the connection to WebSockets (`wss://`) when supported, with Long Polling fallback.
asyncapi: '2.6.0'
id: 'urn:io:quix:streaming-reader-api:signalr'
info:
title: Quix Streaming Reader API (SignalR / WebSocket)
version: '1.0.0'
description: |
AsyncAPI 2.6 description of the Quix **Streaming Reader API**, a real-time,
bidirectional surface delivered over a **Microsoft SignalR hub**. SignalR
negotiates the best available transport and, for the vast majority of
clients, uses **WebSockets** (`wss://`), falling back to Long Polling only
when WebSockets are unavailable.
Unlike many providers that only stream over one-way HTTP Server-Sent
Events, Quix exposes a genuine WebSocket API here: the client both invokes
hub methods (to subscribe / unsubscribe) and receives server-pushed events
(parameter data, events, active-stream changes, topic metrics, raw
packages) over the same persistent connection.
Hub endpoint (environment-specific):
https://reader-{environmentId}.cloud.quix.io/hub
Authentication is by Quix Personal Access Token (PAT), supplied to the
SignalR connection via `accessTokenFactory` (which sets the bearer token on
the negotiate/connect requests). Invalid or missing tokens raise an
`UnAuthorizedHubError`.
Only the Streaming Reader API is SignalR-based. The Streaming Writer API
(HTTP ingest) and the Portal API (management) are HTTP/REST and are modeled
in the companion OpenAPI document at openapi/quix-openapi.yml.
contact:
name: API Evangelist
email: kin@apievangelist.com
url: https://apievangelist.com
license:
name: API documentation - Quix Terms
url: https://quix.io/terms/
x-transport-notes:
transport: Microsoft SignalR
primaryProtocol: WebSocket (wss)
fallbackProtocol: HTTP Long Polling
direction: bidirectional (client invokes hub methods; server pushes events)
hubUrl: 'https://reader-{environmentId}.cloud.quix.io/hub'
auth: 'PAT bearer via SignalR accessTokenFactory'
isWebSocket: true
source: https://quix.io/docs/quix-cloud/apis/streaming-reader-api/overview.html
defaultContentType: application/json
servers:
readerHub:
url: 'reader-{environmentId}.cloud.quix.io/hub'
protocol: wss
protocolVersion: 'SignalR'
description: |
The Quix Streaming Reader SignalR hub for a specific environment.
`{environmentId}` is the URL-friendly combination of organization,
project, and environment names. SignalR upgrades the connection to
WebSockets (`wss://`) when supported, with Long Polling fallback.
variables:
environmentId:
default: myorg-myproject-production
description: Quix environment (workspace) identifier.
security:
- patAuth: []
channels:
ParameterData:
description: |
Live time-series parameter data for a subscribed topic / stream /
parameter. The client opens the subscription by invoking the hub method
`SubscribeToParameter(topicName, streamId, parameterId)` (wildcard `*` is
supported for topic, stream, and parameter), and the server pushes a
`ParameterDataReceived` event for each matching batch of samples until
`UnsubscribeFromParameter(...)` is invoked.
bindings:
ws:
bindingVersion: '0.1.0'
publish:
operationId: subscribeToParameter
summary: Invoke hub method to subscribe to parameter data.
description: |
SignalR hub invocation: `SubscribeToParameter(topicName, streamId,
parameterId)`. After this call the server begins pushing
`ParameterDataReceived` events on this channel.
message:
$ref: '#/components/messages/SubscribeToParameter'
subscribe:
operationId: onParameterDataReceived
summary: Receive pushed parameter data (ParameterDataReceived).
message:
$ref: '#/components/messages/ParameterDataReceived'
EventData:
description: |
Live discrete events for a subscribed topic / stream / event. Opened with
hub method `SubscribeToEvent(topicName, streamId, eventId)`; the server
pushes `EventDataReceived` events. Closed with
`UnsubscribeFromEvent(...)`.
bindings:
ws:
bindingVersion: '0.1.0'
publish:
operationId: subscribeToEvent
summary: Invoke hub method to subscribe to event data.
message:
$ref: '#/components/messages/SubscribeToEvent'
subscribe:
operationId: onEventDataReceived
summary: Receive pushed event data (EventDataReceived).
message:
$ref: '#/components/messages/EventDataReceived'
ActiveStreams:
description: |
Notifications about streams becoming active or inactive on a topic.
Opened with `SubscribeToActiveStreams(topicName)`; the server pushes
`ActiveStreamsChanged` events with an action of `AddUpdate` or `Remove`.
Closed with `UnsubscribeFromActiveStreams(topicName)`.
bindings:
ws:
bindingVersion: '0.1.0'
publish:
operationId: subscribeToActiveStreams
summary: Invoke hub method to subscribe to active-stream changes.
message:
$ref: '#/components/messages/SubscribeToActiveStreams'
subscribe:
operationId: onActiveStreamsChanged
summary: Receive active-stream change notifications (ActiveStreamsChanged).
message:
$ref: '#/components/messages/ActiveStreamsChanged'
TopicMetrics:
description: |
Periodic topic metrics such as bytes-per-second and active stream count.
Opened with `SubscribeToTopicMetrics(topicName)`; the server pushes
`TopicMetricsUpdated` events. Closed with
`UnsubscribeFromTopicMetrics(topicName)`.
bindings:
ws:
bindingVersion: '0.1.0'
publish:
operationId: subscribeToTopicMetrics
summary: Invoke hub method to subscribe to topic metrics.
message:
$ref: '#/components/messages/SubscribeToTopicMetrics'
subscribe:
operationId: onTopicMetricsUpdated
summary: Receive topic metrics (TopicMetricsUpdated).
message:
$ref: '#/components/messages/TopicMetricsUpdated'
Packages:
description: |
Raw messages (packages) received on a topic. Opened with
`SubscribeToPackages(topicName)`; the server pushes `PackageReceived`
events. Closed with `UnsubscribeFromPackages(topicName)`.
bindings:
ws:
bindingVersion: '0.1.0'
publish:
operationId: subscribeToPackages
summary: Invoke hub method to subscribe to raw packages.
message:
$ref: '#/components/messages/SubscribeToPackages'
subscribe:
operationId: onPackageReceived
summary: Receive raw packages (PackageReceived).
message:
$ref: '#/components/messages/PackageReceived'
components:
securitySchemes:
patAuth:
type: httpApiKey
in: header
name: Authorization
description: |
Quix Personal Access Token (PAT) bearer token. In SignalR clients it is
supplied through `accessTokenFactory: () => 'YOUR_PAT'`, which attaches
the token to the negotiate and connect requests. A missing or invalid
token results in `UnAuthorizedHubError`.
messages:
SubscribeToParameter:
name: SubscribeToParameter
title: Hub invocation - SubscribeToParameter
summary: Client-to-server SignalR invocation to subscribe to parameter data.
contentType: application/json
payload:
$ref: '#/components/schemas/ParameterSubscriptionArgs'
ParameterDataReceived:
name: ParameterDataReceived
title: Server event - ParameterDataReceived
summary: A batch of time-series parameter samples pushed by the hub.
contentType: application/json
payload:
$ref: '#/components/schemas/ParameterData'
SubscribeToEvent:
name: SubscribeToEvent
title: Hub invocation - SubscribeToEvent
summary: Client-to-server SignalR invocation to subscribe to event data.
contentType: application/json
payload:
$ref: '#/components/schemas/EventSubscriptionArgs'
EventDataReceived:
name: EventDataReceived
title: Server event - EventDataReceived
summary: A discrete event pushed by the hub.
contentType: application/json
payload:
$ref: '#/components/schemas/EventData'
SubscribeToActiveStreams:
name: SubscribeToActiveStreams
title: Hub invocation - SubscribeToActiveStreams
summary: Client-to-server SignalR invocation to subscribe to active-stream changes.
contentType: application/json
payload:
$ref: '#/components/schemas/TopicArg'
ActiveStreamsChanged:
name: ActiveStreamsChanged
title: Server event - ActiveStreamsChanged
summary: A stream was added/updated or removed on the topic.
contentType: application/json
payload:
$ref: '#/components/schemas/ActiveStreamChange'
SubscribeToTopicMetrics:
name: SubscribeToTopicMetrics
title: Hub invocation - SubscribeToTopicMetrics
summary: Client-to-server SignalR invocation to subscribe to topic metrics.
contentType: application/json
payload:
$ref: '#/components/schemas/TopicArg'
TopicMetricsUpdated:
name: TopicMetricsUpdated
title: Server event - TopicMetricsUpdated
summary: Periodic topic metrics pushed by the hub.
contentType: application/json
payload:
$ref: '#/components/schemas/TopicMetrics'
SubscribeToPackages:
name: SubscribeToPackages
title: Hub invocation - SubscribeToPackages
summary: Client-to-server SignalR invocation to subscribe to raw packages.
contentType: application/json
payload:
$ref: '#/components/schemas/TopicArg'
PackageReceived:
name: PackageReceived
title: Server event - PackageReceived
summary: A raw message received on the topic.
contentType: application/json
payload:
$ref: '#/components/schemas/Package'
schemas:
ParameterSubscriptionArgs:
type: object
description: Positional SignalR arguments for SubscribeToParameter.
required:
- topicName
- streamId
- parameterId
properties:
topicName:
type: string
description: Topic name, or `*` for all topics.
streamId:
type: string
description: Stream id, or `*` for all streams.
parameterId:
type: string
description: Parameter id, or `*` for all parameters.
EventSubscriptionArgs:
type: object
description: Positional SignalR arguments for SubscribeToEvent.
required:
- topicName
- streamId
- eventId
properties:
topicName:
type: string
streamId:
type: string
eventId:
type: string
TopicArg:
type: object
description: Positional SignalR argument carrying just the topic name.
required:
- topicName
properties:
topicName:
type: string
ParameterData:
type: object
description: A batch of time-series parameter samples.
properties:
topicName:
type: string
streamId:
type: string
timestamps:
type: array
items:
type: integer
format: int64
description: Nanosecond epoch timestamps, one per sample.
numericValues:
type: object
additionalProperties:
type: array
items:
type: number
stringValues:
type: object
additionalProperties:
type: array
items:
type: string
binaryValues:
type: object
additionalProperties:
type: array
items:
type: string
format: byte
tagValues:
type: object
additionalProperties:
type: array
items:
type: string
EventData:
type: object
description: A single discrete event.
properties:
topicName:
type: string
streamId:
type: string
id:
type: string
timestamp:
type: integer
format: int64
value:
type: string
tags:
type: object
additionalProperties:
type: string
ActiveStreamChange:
type: object
description: Notification that a stream was added/updated or removed.
properties:
stream:
type: object
properties:
streamId:
type: string
name:
type: string
topicName:
type: string
status:
type: string
action:
type: string
enum:
- AddUpdate
- Remove
description: Whether the stream was added/updated or removed.
TopicMetrics:
type: object
description: Periodic metrics for a topic.
properties:
topicName:
type: string
bytesPerSecond:
type: number
activeStreamCount:
type: integer
Package:
type: object
description: A raw message received on the topic.
properties:
topicName:
type: string
streamId:
type: string
timestamp:
type: integer
format: int64
value:
type: string
format: byte
description: Raw message payload.