Skip to content

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.

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

OperationTypeScriptGoPython
LiveConnectionEventsLiveConnectionEventsDocumentSubscribeLiveConnectionEventslive_connection_events (async)

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

OperationTypeScriptGoPython
LiveConversationUpdatesLiveConversationUpdatesDocumentSubscribeLiveConversationUpdateslive_conversation_updates (async)

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

OperationTypeScriptGoPython
LiveFirehoseLiveFirehoseDocumentSubscribeLiveFirehoselive_firehose (async)

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

OperationTypeScriptGoPython
LiveIncidentUpdatesLiveIncidentUpdatesDocumentSubscribeLiveIncidentUpdateslive_incident_updates (async)

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

OperationTypeScriptGoPython
LiveMessageReceivedLiveMessageReceivedDocumentSubscribeLiveMessageReceivedlive_message_received (async)

Transcoding and processing usage events. Optionally filter by streamId.

liveProcessingEvents(
streamId: ID
): ProcessingUsageRecord!

Returns: ProcessingUsageRecord! (ProcessingUsageRecord)

Arguments

  • streamId: ID

SDK

OperationTypeScriptGoPython
LiveProcessingEventsLiveProcessingEventsDocumentSubscribeLiveProcessingEventslive_processing_events (async)

Storage events for recordings and artifacts. Optionally filter by streamId.

liveStorageEvents(
streamId: ID
): StorageEvent!

Returns: StorageEvent! (StorageEvent)

Arguments

  • streamId: ID

SDK

OperationTypeScriptGoPython
LiveStorageEventsLiveStorageEventsDocumentSubscribeLiveStorageEventslive_storage_events (async)

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

OperationTypeScriptGoPython
LiveStreamEventsLiveStreamEventsDocumentSubscribeLiveStreamEventslive_stream_events (async)

System-wide health and infrastructure events. Requires authentication; tenant-scoped updates.

liveSystemHealth: SystemHealthEvent!

Returns: SystemHealthEvent! (SystemHealthEvent)

SDK

OperationTypeScriptGoPython
LiveSystemHealthLiveSystemHealthDocumentSubscribeLiveSystemHealthlive_system_health (async)

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

OperationTypeScriptGoPython
LiveTrackListUpdatesLiveTrackListUpdatesDocumentSubscribeLiveTrackListUpdateslive_track_list_updates (async)

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

OperationTypeScriptGoPython
LiveViewerMetricsLiveViewerMetricsDocumentSubscribeLiveViewerMetricslive_viewer_metrics (async)

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

SDK

OperationTypeScriptGoPython
SkipperChatSkipperChatDocumentSubscribeSkipperChatskipper_chat (async)

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

OperationTypeScriptGoPython
TenantEventsTenantEventsDocumentSubscribeTenantEventstenant_events (async)

object

account.suspended event. Aggregate: tenants.

object

api_token.created event. Aggregate: api_tokens.

  • tokenId: ID!
  • name: String!
  • permissions: [String!]!
  • expiresAt: Time (Time)

object

api_token.revoked event. Aggregate: api_tokens.

  • tokenId: ID!

object

billing.details_updated event. Aggregate: tenants.

  • changedFields: [String!]!

object

clip.failed event. Aggregate: artifacts.

object

clip.ready event. Aggregate: artifacts.

  • artifact: EventArtifact (EventArtifact)
  • durationMs: Int!
  • sizeBytes: Int!

object

clip.requested event. Aggregate: artifacts.

object

custom_domain.failed event. Aggregate: custom_domains.

object

custom_domain.verified event. Aggregate: custom_domains.

  • domain: String!

object

Part of a public event payload (frameworks.events.public.v1.Artifact).

  • artifactId: ID!
  • kind: EventArtifactKind! (EventArtifactKind)
  • streamId: ID!
  • playbackId: ID!

enum

Values of frameworks.events.public.v1.ArtifactKind, named as in the proto and the webhook JSON.

  • ARTIFACT_KIND_UNSPECIFIED
  • ARTIFACT_KIND_CLIP
  • ARTIFACT_KIND_RECORDING
  • ARTIFACT_KIND_UPLOAD

enum

Values of frameworks.events.public.v1.CustomDomainFailureReason, named as in the proto and the webhook JSON.

  • CUSTOM_DOMAIN_FAILURE_REASON_UNSPECIFIED
  • CUSTOM_DOMAIN_FAILURE_REASON_VERIFICATION_EXPIRED
  • CUSTOM_DOMAIN_FAILURE_REASON_CERTIFICATE_FAILED

enum

Values of frameworks.events.public.v1.IngestProtocol, named as in the proto and the webhook JSON.

  • INGEST_PROTOCOL_UNSPECIFIED
  • INGEST_PROTOCOL_RTMP
  • INGEST_PROTOCOL_SRT
  • INGEST_PROTOCOL_WHIP
  • INGEST_PROTOCOL_PULL

enum

Values of frameworks.events.public.v1.MediaFailureReason, named as in the proto and the webhook JSON.

  • MEDIA_FAILURE_REASON_UNSPECIFIED
  • MEDIA_FAILURE_REASON_SOURCE_UNAVAILABLE
  • MEDIA_FAILURE_REASON_PROCESSING_FAILED
  • MEDIA_FAILURE_REASON_STORAGE_FAILED
  • MEDIA_FAILURE_REASON_INVALID_INPUT
  • MEDIA_FAILURE_REASON_QUOTA_EXCEEDED
  • MEDIA_FAILURE_REASON_TIMED_OUT

object

Part of a public event payload (frameworks.events.public.v1.Money).

  • amountMinor: Int!
  • currency: String!

enum

Values of frameworks.events.public.v1.MultistreamStatus, named as in the proto and the webhook JSON.

  • MULTISTREAM_STATUS_UNSPECIFIED
  • MULTISTREAM_STATUS_IDLE
  • MULTISTREAM_STATUS_PENDING
  • MULTISTREAM_STATUS_PUSHING
  • MULTISTREAM_STATUS_RETRYING
  • MULTISTREAM_STATUS_STOPPING
  • MULTISTREAM_STATUS_FAILED

enum

Values of frameworks.events.public.v1.PaymentFailureReason, named as in the proto and the webhook JSON.

  • PAYMENT_FAILURE_REASON_UNSPECIFIED
  • PAYMENT_FAILURE_REASON_DECLINED
  • PAYMENT_FAILURE_REASON_INSUFFICIENT_FUNDS
  • PAYMENT_FAILURE_REASON_EXPIRED_METHOD
  • PAYMENT_FAILURE_REASON_AUTHENTICATION_REQUIRED
  • PAYMENT_FAILURE_REASON_PROCESSING_ERROR

enum

Values of frameworks.events.public.v1.SuspensionReason, named as in the proto and the webhook JSON.

  • SUSPENSION_REASON_UNSPECIFIED
  • SUSPENSION_REASON_BALANCE_EXHAUSTED
  • SUSPENSION_REASON_PAYMENT_OVERDUE
  • SUSPENSION_REASON_POLICY

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)

object

billing.invoice_created event. Aggregate: invoices.

  • invoiceId: ID!
  • amountDue: EventMoney (EventMoney)
  • periodStart: Time (Time)
  • periodEnd: Time (Time)
  • dueAt: Time (Time)

object

billing.invoice_paid event. Aggregate: invoices.

  • invoiceId: ID!
  • amountPaid: EventMoney (EventMoney)

object

multistream.status_changed event. Aggregate: push_targets.

object

billing.payment_failed event. Aggregate: payments.

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)

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.

object

recording.failed event. Aggregate: artifacts.

object

recording.ready event. Aggregate: artifacts.

  • artifact: EventArtifact (EventArtifact)
  • durationMs: Int!
  • sizeBytes: Int!

object

recording.started event. Aggregate: artifacts.

object

recording.stopped event. Aggregate: artifacts.

union

input_object

  • conversationId: ID
  • message: String!
  • pageUrl: String
  • mode: SkipperMode (SkipperMode)

object

  • label: String!
  • url: String!

object

  • content: String!
  • confidence: String!
  • sources: [SkipperCitation!]! (SkipperCitation)

object

  • conversationId: ID!
  • tokensInput: Int!
  • tokensOutput: Int!

object

  • reportId: String!
  • resourceType: String!

object

enum

  • DEFAULT
  • DOCS

object

  • content: String!

object

  • title: String!
  • payload: JSON! (JSON)

object

  • tool: String!
  • error: String

object

  • tool: String!

object

  • nodeId: String!
  • timestamp: Int!
  • tenantId: String
  • location: String
  • storageScope: String
  • usage: [TenantStorageUsage!]! (TenantStorageUsage)

object

stream.connected event. Aggregate: streams.

object

stream.created event. Aggregate: streams.

  • streamId: ID!
  • name: String!
  • playbackId: ID!

object

stream.deleted event. Aggregate: streams.

  • streamId: ID!

object

stream.idle event. Aggregate: streams.

  • streamId: ID!
  • playbackId: ID!

object

stream.key_rotated event. Aggregate: streams.

  • streamId: ID!

object

stream.live event. Aggregate: streams.

  • streamId: ID!
  • playbackId: ID!

object

stream.updated event. Aggregate: streams.

  • streamId: ID!
  • changedFields: [String!]!

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)

object

object

  • tenantId: String!
  • totalBytes: Float!
  • fileCount: Int!
  • dvrBytes: Float!
  • clipBytes: Float!
  • vodBytes: Float!
  • frozenDvrBytes: Float!
  • frozenClipBytes: Float!
  • frozenVodBytes: Float!

object

billing.topup_credited event. Aggregate: topups.

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

object

upload.aborted event. Aggregate: artifacts.

object

upload.completed event. Aggregate: artifacts.

object

upload.created event. Aggregate: artifacts.

  • artifact: EventArtifact (EventArtifact)
  • filename: String!
  • expectedSizeBytes: Int!

object

upload.failed event. Aggregate: artifacts.

object

upload.ready event. Aggregate: artifacts.

  • artifact: EventArtifact (EventArtifact)
  • durationMs: Int!
  • sizeBytes: Int!

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