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 DataAsyncAPIEventsWebSockets
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.
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.