Live subscriptions
GraphQL schema reference · API guide · SDKs
Every GraphQL subscription: stream, viewer, storage, processing, incident, and tenant event feeds.
Types used by more than one domain are on Shared types.
Subscriptions
Section titled “Subscriptions”Subscription.liveConnectionEvents
Section titled “Subscription.liveConnectionEvents”Individual viewer connection/disconnection events. High volume - filter by streamId in production for performance.
liveConnectionEvents( streamId: ID): ConnectionEvent!Returns: ConnectionEvent! (ConnectionEvent)
Arguments
streamId:ID
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveConnectionEvents | LiveConnectionEventsDocument | SubscribeLiveConnectionEvents | live_connection_events (async) |
Subscription.liveConversationUpdates
Section titled “Subscription.liveConversationUpdates”Real-time conversation lifecycle updates (created/updated/status changes). Optionally filter by conversationId.
liveConversationUpdates( conversationId: ID): Conversation!Returns: Conversation! (Conversation)
Arguments
conversationId:ID— The conversation ID to watch (optional).
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveConversationUpdates | LiveConversationUpdatesDocument | SubscribeLiveConversationUpdates | live_conversation_updates (async) |
Subscription.liveFirehose
Section titled “Subscription.liveFirehose”Firehose subscription receiving ALL tenant events in a single stream. Combines stream, analytics, and system events for unified dashboards. Use the type and channel fields to filter/route events client-side.
liveFirehose: TenantEvent!Returns: TenantEvent! (TenantEvent)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveFirehose | LiveFirehoseDocument | SubscribeLiveFirehose | live_firehose (async) |
Subscription.liveIncidentUpdates
Section titled “Subscription.liveIncidentUpdates”Changes to incidents on clusters the current tenant owns. For platform operators, changes to every incident: platform scope and every tenant.
liveIncidentUpdates: IncidentUpdatedEvent!Returns: IncidentUpdatedEvent! (IncidentUpdatedEvent)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveIncidentUpdates | LiveIncidentUpdatesDocument | SubscribeLiveIncidentUpdates | live_incident_updates (async) |
Subscription.liveMessageReceived
Section titled “Subscription.liveMessageReceived”Real-time message events for a conversation. Fires when agent replies are received.
liveMessageReceived( conversationId: ID!): Message!Returns: Message! (Message)
Arguments
conversationId:ID!— The conversation ID to watch.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveMessageReceived | LiveMessageReceivedDocument | SubscribeLiveMessageReceived | live_message_received (async) |
Subscription.liveProcessingEvents
Section titled “Subscription.liveProcessingEvents”Transcoding and processing usage events. Optionally filter by streamId.
liveProcessingEvents( streamId: ID): ProcessingUsageRecord!Returns: ProcessingUsageRecord! (ProcessingUsageRecord)
Arguments
streamId:ID
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveProcessingEvents | LiveProcessingEventsDocument | SubscribeLiveProcessingEvents | live_processing_events (async) |
Subscription.liveStorageEvents
Section titled “Subscription.liveStorageEvents”Storage events for recordings and artifacts. Optionally filter by streamId.
liveStorageEvents( streamId: ID): StorageEvent!Returns: StorageEvent! (StorageEvent)
Arguments
streamId:ID
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveStorageEvents | LiveStorageEventsDocument | SubscribeLiveStorageEvents | live_storage_events (async) |
Subscription.liveStreamEvents
Section titled “Subscription.liveStreamEvents”Stream lifecycle events including start, stop, and health changes. Optionally filter to a specific stream, or receive all tenant streams.
liveStreamEvents( streamId: ID): StreamEvent!Returns: StreamEvent! (StreamEvent)
Arguments
streamId:ID
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveStreamEvents | LiveStreamEventsDocument | SubscribeLiveStreamEvents | live_stream_events (async) |
Subscription.liveSystemHealth
Section titled “Subscription.liveSystemHealth”System-wide health and infrastructure events. Requires authentication; tenant-scoped updates.
liveSystemHealth: SystemHealthEvent!Returns: SystemHealthEvent! (SystemHealthEvent)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveSystemHealth | LiveSystemHealthDocument | SubscribeLiveSystemHealth | live_system_health (async) |
Subscription.liveTrackListUpdates
Section titled “Subscription.liveTrackListUpdates”Track list updates when stream quality tiers change. Fires when tracks are added, removed, or quality changes.
liveTrackListUpdates( streamId: ID!): TrackListUpdate!Returns: TrackListUpdate! (TrackListUpdate)
Arguments
streamId:ID!
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveTrackListUpdates | LiveTrackListUpdatesDocument | SubscribeLiveTrackListUpdates | live_track_list_updates (async) |
Subscription.liveViewerMetrics
Section titled “Subscription.liveViewerMetrics”Real-time viewer count and engagement metrics for a stream. Updates every few seconds while the stream is live.
liveViewerMetrics( streamId: ID!): ViewerMetrics!Returns: ViewerMetrics! (ViewerMetrics)
Arguments
streamId:ID!
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LiveViewerMetrics | LiveViewerMetricsDocument | SubscribeLiveViewerMetrics | live_viewer_metrics (async) |
Subscription.skipperChat
Section titled “Subscription.skipperChat”Stream chat events from the Skipper AI consultant. Receives token chunks, tool lifecycle events, metadata, and completion signal. Creates a new conversation if conversationId is omitted.
skipperChat( input: SkipperChatInput!): SkipperChatEvent!Returns: SkipperChatEvent! (SkipperChatEvent)
Arguments
input:SkipperChatInput!(SkipperChatInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| SkipperChat | SkipperChatDocument | SubscribeSkipperChat | skipper_chat (async) |
Subscription.tenantEvents
Section titled “Subscription.tenantEvents”Public events of the current tenant, as webhooks deliver them: stream lifecycle, clip, recording, and upload lifecycle, multistream status, API tokens, billing, account, and custom domain events. Each event’s data is the registered payload of its type. Pass types to receive only those event types (e.g. [“clip.ready”, “clip.failed”]); pass streamId to receive only events whose payload names that stream.
tenantEvents( types: [String!] streamId: ID): PublicEvent!Returns: PublicEvent! (PublicEvent)
Arguments
types:[String!]streamId:ID
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| TenantEvents | TenantEventsDocument | SubscribeTenantEvents | tenant_events (async) |
AccountSuspended
Section titled “AccountSuspended”object
account.suspended event. Aggregate: tenants.
- reason:
EventSuspensionReason!(EventSuspensionReason)
ApiTokenCreated
Section titled “ApiTokenCreated”object
api_token.created event. Aggregate: api_tokens.
- tokenId:
ID! - name:
String! - permissions:
[String!]! - expiresAt:
Time(Time)
ApiTokenRevoked
Section titled “ApiTokenRevoked”object
api_token.revoked event. Aggregate: api_tokens.
- tokenId:
ID!
BillingDetailsUpdated
Section titled “BillingDetailsUpdated”object
billing.details_updated event. Aggregate: tenants.
- changedFields:
[String!]!
ClipFailed
Section titled “ClipFailed”object
clip.failed event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - reason:
EventMediaFailureReason!(EventMediaFailureReason)
ClipReady
Section titled “ClipReady”object
clip.ready event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - durationMs:
Int! - sizeBytes:
Int!
ClipRequested
Section titled “ClipRequested”object
clip.requested event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - durationMs:
Int!
CustomDomainFailed
Section titled “CustomDomainFailed”object
custom_domain.failed event. Aggregate: custom_domains.
- domain:
String! - reason:
EventCustomDomainFailureReason!(EventCustomDomainFailureReason)
CustomDomainVerified
Section titled “CustomDomainVerified”object
custom_domain.verified event. Aggregate: custom_domains.
- domain:
String!
EventArtifact
Section titled “EventArtifact”object
Part of a public event payload (frameworks.events.public.v1.Artifact).
- artifactId:
ID! - kind:
EventArtifactKind!(EventArtifactKind) - streamId:
ID! - playbackId:
ID!
EventArtifactKind
Section titled “EventArtifactKind”enum
Values of frameworks.events.public.v1.ArtifactKind, named as in the proto and the webhook JSON.
ARTIFACT_KIND_UNSPECIFIEDARTIFACT_KIND_CLIPARTIFACT_KIND_RECORDINGARTIFACT_KIND_UPLOAD
EventCustomDomainFailureReason
Section titled “EventCustomDomainFailureReason”enum
Values of frameworks.events.public.v1.CustomDomainFailureReason, named as in the proto and the webhook JSON.
CUSTOM_DOMAIN_FAILURE_REASON_UNSPECIFIEDCUSTOM_DOMAIN_FAILURE_REASON_VERIFICATION_EXPIREDCUSTOM_DOMAIN_FAILURE_REASON_CERTIFICATE_FAILED
EventIngestProtocol
Section titled “EventIngestProtocol”enum
Values of frameworks.events.public.v1.IngestProtocol, named as in the proto and the webhook JSON.
INGEST_PROTOCOL_UNSPECIFIEDINGEST_PROTOCOL_RTMPINGEST_PROTOCOL_SRTINGEST_PROTOCOL_WHIPINGEST_PROTOCOL_PULL
EventMediaFailureReason
Section titled “EventMediaFailureReason”enum
Values of frameworks.events.public.v1.MediaFailureReason, named as in the proto and the webhook JSON.
MEDIA_FAILURE_REASON_UNSPECIFIEDMEDIA_FAILURE_REASON_SOURCE_UNAVAILABLEMEDIA_FAILURE_REASON_PROCESSING_FAILEDMEDIA_FAILURE_REASON_STORAGE_FAILEDMEDIA_FAILURE_REASON_INVALID_INPUTMEDIA_FAILURE_REASON_QUOTA_EXCEEDEDMEDIA_FAILURE_REASON_TIMED_OUT
EventMoney
Section titled “EventMoney”object
Part of a public event payload (frameworks.events.public.v1.Money).
- amountMinor:
Int! - currency:
String!
EventMultistreamStatus
Section titled “EventMultistreamStatus”enum
Values of frameworks.events.public.v1.MultistreamStatus, named as in the proto and the webhook JSON.
MULTISTREAM_STATUS_UNSPECIFIEDMULTISTREAM_STATUS_IDLEMULTISTREAM_STATUS_PENDINGMULTISTREAM_STATUS_PUSHINGMULTISTREAM_STATUS_RETRYINGMULTISTREAM_STATUS_STOPPINGMULTISTREAM_STATUS_FAILED
EventPaymentFailureReason
Section titled “EventPaymentFailureReason”enum
Values of frameworks.events.public.v1.PaymentFailureReason, named as in the proto and the webhook JSON.
PAYMENT_FAILURE_REASON_UNSPECIFIEDPAYMENT_FAILURE_REASON_DECLINEDPAYMENT_FAILURE_REASON_INSUFFICIENT_FUNDSPAYMENT_FAILURE_REASON_EXPIRED_METHODPAYMENT_FAILURE_REASON_AUTHENTICATION_REQUIREDPAYMENT_FAILURE_REASON_PROCESSING_ERROR
EventSuspensionReason
Section titled “EventSuspensionReason”enum
Values of frameworks.events.public.v1.SuspensionReason, named as in the proto and the webhook JSON.
SUSPENSION_REASON_UNSPECIFIEDSUSPENSION_REASON_BALANCE_EXHAUSTEDSUSPENSION_REASON_PAYMENT_OVERDUESUSPENSION_REASON_POLICY
IncidentUpdatedEvent
Section titled “IncidentUpdatedEvent”object
Change to an incident the subscriber can see.
- incidentId:
ID! - clusterId:
String - status:
IncidentStatus!(IncidentStatus) - severity:
String! - title:
String! - change:
String!— Timeline change that produced the update, e.g. opened, alert_firing, acknowledged, resolved. - updatedAt:
Time!(Time)
InvoiceCreated
Section titled “InvoiceCreated”object
billing.invoice_created event. Aggregate: invoices.
- invoiceId:
ID! - amountDue:
EventMoney(EventMoney) - periodStart:
Time(Time) - periodEnd:
Time(Time) - dueAt:
Time(Time)
InvoicePaid
Section titled “InvoicePaid”object
billing.invoice_paid event. Aggregate: invoices.
- invoiceId:
ID! - amountPaid:
EventMoney(EventMoney)
MultistreamStatusChanged
Section titled “MultistreamStatusChanged”object
multistream.status_changed event. Aggregate: push_targets.
- streamId:
ID! - targetId:
ID! - targetName:
String! - status:
EventMultistreamStatus!(EventMultistreamStatus) - previousStatus:
EventMultistreamStatus!(EventMultistreamStatus)
PaymentFailed
Section titled “PaymentFailed”object
billing.payment_failed event. Aggregate: payments.
- paymentId:
ID! - invoiceId:
ID! - amount:
EventMoney(EventMoney) - reason:
EventPaymentFailureReason!(EventPaymentFailureReason) - provider:
String! - providerReferenceId:
ID!
PublicEvent
Section titled “PublicEvent”object
A public tenant event as its owning service emitted it. data is the registered message of type, unchanged; webhooks deliver the same message.
- id:
ID!— Event ID, stable across redeliveries. - type:
String!— Registered event type, e.g. stream.live. - time:
Time!(Time) — When the state change committed. - subject:
String!— The aggregate the event belongs to, as <aggregate>/<id>, e.g. streams/<stream id>. - data:
PublicEventData!(PublicEventData)
PublicEventData
Section titled “PublicEventData”union
Payload of a PublicEvent: one member per public event type. Fields of the same name can have different types across members (reason is a different enum per event family); alias them when one selection covers several.
- Member: AccountSuspended
- Member: ApiTokenCreated
- Member: ApiTokenRevoked
- Member: BillingDetailsUpdated
- Member: InvoiceCreated
- Member: InvoicePaid
- Member: PaymentFailed
- Member: TopupCredited
- Member: ClipFailed
- Member: ClipReady
- Member: ClipRequested
- Member: CustomDomainFailed
- Member: CustomDomainVerified
- Member: MultistreamStatusChanged
- Member: RecordingFailed
- Member: RecordingReady
- Member: RecordingStarted
- Member: RecordingStopped
- Member: StreamConnected
- Member: StreamCreated
- Member: StreamDeleted
- Member: StreamIdle
- Member: StreamKeyRotated
- Member: StreamLive
- Member: StreamUpdated
- Member: UploadAborted
- Member: UploadCompleted
- Member: UploadCreated
- Member: UploadFailed
- Member: UploadReady
RecordingFailed
Section titled “RecordingFailed”object
recording.failed event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - reason:
EventMediaFailureReason!(EventMediaFailureReason)
RecordingReady
Section titled “RecordingReady”object
recording.ready event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - durationMs:
Int! - sizeBytes:
Int!
RecordingStarted
Section titled “RecordingStarted”object
recording.started event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact)
RecordingStopped
Section titled “RecordingStopped”object
recording.stopped event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact)
SkipperChatEvent
Section titled “SkipperChatEvent”union
- Member: SkipperToken
- Member: SkipperToolStartEvent
- Member: SkipperToolEndEvent
- Member: SkipperMeta
- Member: SkipperDone
SkipperChatInput
Section titled “SkipperChatInput”input_object
- conversationId:
ID - message:
String! - pageUrl:
String - mode:
SkipperMode(SkipperMode)
SkipperCitation
Section titled “SkipperCitation”object
- label:
String! - url:
String!
SkipperConfidenceBlock
Section titled “SkipperConfidenceBlock”object
- content:
String! - confidence:
String! - sources:
[SkipperCitation!]!(SkipperCitation)
SkipperDone
Section titled “SkipperDone”object
- conversationId:
ID! - tokensInput:
Int! - tokensOutput:
Int!
SkipperInvestigationEvent
Section titled “SkipperInvestigationEvent”object
- reportId:
String! - resourceType:
String!
SkipperMeta
Section titled “SkipperMeta”object
- confidence:
String! - citations:
[SkipperCitation!]!(SkipperCitation) - externalLinks:
[SkipperCitation!]!(SkipperCitation) - details:
[SkipperToolDetail!]!(SkipperToolDetail) - blocks:
[SkipperConfidenceBlock!](SkipperConfidenceBlock)
SkipperMode
Section titled “SkipperMode”enum
DEFAULTDOCS
SkipperToken
Section titled “SkipperToken”object
- content:
String!
SkipperToolDetail
Section titled “SkipperToolDetail”object
- title:
String! - payload:
JSON!(JSON)
SkipperToolEndEvent
Section titled “SkipperToolEndEvent”object
- tool:
String! - error:
String
SkipperToolStartEvent
Section titled “SkipperToolStartEvent”object
- tool:
String!
StorageSnapshot
Section titled “StorageSnapshot”object
- nodeId:
String! - timestamp:
Int! - tenantId:
String - location:
String - storageScope:
String - usage:
[TenantStorageUsage!]!(TenantStorageUsage)
StreamConnected
Section titled “StreamConnected”object
stream.connected event. Aggregate: streams.
- streamId:
ID! - protocol:
EventIngestProtocol!(EventIngestProtocol) - playbackId:
ID!
StreamCreated
Section titled “StreamCreated”object
stream.created event. Aggregate: streams.
- streamId:
ID! - name:
String! - playbackId:
ID!
StreamDeleted
Section titled “StreamDeleted”object
stream.deleted event. Aggregate: streams.
- streamId:
ID!
StreamIdle
Section titled “StreamIdle”object
stream.idle event. Aggregate: streams.
- streamId:
ID! - playbackId:
ID!
StreamKeyRotated
Section titled “StreamKeyRotated”object
stream.key_rotated event. Aggregate: streams.
- streamId:
ID!
StreamLive
Section titled “StreamLive”object
stream.live event. Aggregate: streams.
- streamId:
ID! - playbackId:
ID!
StreamUpdated
Section titled “StreamUpdated”object
stream.updated event. Aggregate: streams.
- streamId:
ID! - changedFields:
[String!]!
SystemHealthEvent
Section titled “SystemHealthEvent”object
- nodeId:
ID - node:
String! - location:
String! - status:
NodeStatus!(NodeStatus) - cpuTenths:
Int! - isHealthy:
Boolean! - ramMax:
Float - ramCurrent:
Float - diskTotalBytes:
Float - diskUsedBytes:
Float - shmTotalBytes:
Float - shmUsedBytes:
Float - timestamp:
Time!(Time)
TenantEvent
Section titled “TenantEvent”object
- type:
String! - channel:
String! - timestamp:
Time!(Time) - streamEvent:
StreamEvent(StreamEvent) - viewerMetrics:
ViewerMetrics(ViewerMetrics) - connectionEvent:
ConnectionEvent(ConnectionEvent) - trackListUpdate:
TrackListUpdate(TrackListUpdate) - storageEvent:
StorageEvent(StorageEvent) - storageSnapshot:
StorageSnapshot(StorageSnapshot) - processingEvent:
ProcessingUsageRecord(ProcessingUsageRecord) - routingEvent:
RoutingEvent(RoutingEvent) - systemHealthEvent:
SystemHealthEvent(SystemHealthEvent) - skipperInvestigation:
SkipperInvestigationEvent(SkipperInvestigationEvent) - incidentUpdated:
IncidentUpdatedEvent(IncidentUpdatedEvent)
TenantStorageUsage
Section titled “TenantStorageUsage”object
- tenantId:
String! - totalBytes:
Float! - fileCount:
Int! - dvrBytes:
Float! - clipBytes:
Float! - vodBytes:
Float! - frozenDvrBytes:
Float! - frozenClipBytes:
Float! - frozenVodBytes:
Float!
TopupCredited
Section titled “TopupCredited”object
billing.topup_credited event. Aggregate: topups.
- topupId:
ID! - amount:
EventMoney(EventMoney)
TrackListUpdate
Section titled “TrackListUpdate”object
- streamId:
ID! - stream:
Stream(Stream) - tracks:
[StreamTrack!](StreamTrack) - totalTracks:
Int - videoTrackCount:
Int - audioTrackCount:
Int - qualityTier:
String - primaryWidth:
Int - primaryHeight:
Int - primaryFps:
Float - primaryVideoBitrate:
Int - primaryVideoCodec:
String - primaryAudioBitrate:
Int - primaryAudioCodec:
String - primaryAudioChannels:
Int - primaryAudioSampleRate:
Int
UploadAborted
Section titled “UploadAborted”object
upload.aborted event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact)
UploadCompleted
Section titled “UploadCompleted”object
upload.completed event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - sizeBytes:
Int!
UploadCreated
Section titled “UploadCreated”object
upload.created event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - filename:
String! - expectedSizeBytes:
Int!
UploadFailed
Section titled “UploadFailed”object
upload.failed event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - reason:
EventMediaFailureReason!(EventMediaFailureReason)
UploadReady
Section titled “UploadReady”object
upload.ready event. Aggregate: artifacts.
- artifact:
EventArtifact(EventArtifact) - durationMs:
Int! - sizeBytes:
Int!
ViewerMetrics
Section titled “ViewerMetrics”object
- nodeId:
String! - streamId:
ID! - stream:
Stream(Stream) - action:
String! - protocol:
String! - host:
String - sessionId:
String - connectionTime:
Float - position:
Float - bandwidthInBps:
Int - bandwidthOutBps:
Int - bytesDownloaded:
Float - bytesUploaded:
Float - packetsSent:
Int - packetsLost:
Int - packetsRetransmitted:
Int - timestamp:
Int! - clientCountry:
String - clientCity:
String - clientLatitude:
Float - clientLongitude:
Float