SuperViz · AsyncAPI Specification

SuperViz Realtime Channels & Webhooks

Version 1.0.0

AsyncAPI 2.6 description of SuperViz's genuinely event/channel-based surfaces: 1. **Realtime channels** - SuperViz is a real-time synchronization platform. Clients using `@superviz/sdk` / `@superviz/react-sdk` subscribe to named channels and receive events. A backend publishes events into a channel by issuing `POST https://api.superviz.com/realtime/1.0/channels/{channel}/events` (modeled in the companion OpenAPI at `openapi/superviz-openapi.yml`); this AsyncAPI models the resulting channel event delivery. 2. **Outbound webhooks** - When configured, SuperViz POSTs event notifications to a receiver you host (for example `MEETING_STATS` when a video meeting ends, plus recording-ready and transcription-ready events). This document models the message shapes for both. The underlying client transport for realtime channels is a managed WebSocket connection handled by the SuperViz SDK; SuperViz does not publish a raw public WebSocket endpoint, so the channel is described here at the logical event level. Webhook delivery is an HTTP POST to a customer-hosted receiver.

View Spec View on GitHub Real TimeCollaborationPresenceSynchronizationVideoWebRTCSDKAsyncAPIWebhooksEvents

Channels

realtime/{channel}
subscribe onChannelEvent
Receive events published to a channel.
A named realtime channel. A backend publishes events to it via the REST publish endpoint; subscribed SDK clients receive `ChannelEvent` messages. `PresenceUpdate` messages are emitted as participants join or leave.
webhooks/meeting-stats
subscribe onWebhookEvent
Receive SuperViz outbound webhook notifications.
Outbound webhook SuperViz POSTs to your receiver when a video meeting ends and statistics are available (`MEETING_STATS`), plus recording-ready and transcription-ready notifications.

Messages

ChannelEvent
Realtime channel event
An event published to a channel and fanned out to subscribers.
PresenceUpdate
Presence update
Emitted when a participant joins or leaves the channel.
MeetingStatsWebhook
MEETING_STATS webhook
Delivered when a meeting ends and statistics are available.
RecordingReadyWebhook
Recording ready webhook
Delivered when a meeting recording has finished processing.
TranscriptionReadyWebhook
Transcription ready webhook
Delivered when a meeting transcription / AI insight is available.

Servers

https
realtime api.superviz.com/realtime/1.0
SuperViz realtime service. Events are published to a channel with `POST /channels/{channel}/events` and fanned out to subscribed SDK clients. AsyncAPI 2.6 has no dedicated identifier for the SDK-managed WebSocket delivery, so `https` is used and the transport is documented in `info.x-transport-notes`.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
id: 'urn:com:superviz:realtime'
info:
  title: SuperViz Realtime Channels & Webhooks
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 description of SuperViz's genuinely event/channel-based
    surfaces:

    1. **Realtime channels** - SuperViz is a real-time synchronization platform.
       Clients using `@superviz/sdk` / `@superviz/react-sdk` subscribe to named
       channels and receive events. A backend publishes events into a channel by
       issuing `POST https://api.superviz.com/realtime/1.0/channels/{channel}/events`
       (modeled in the companion OpenAPI at `openapi/superviz-openapi.yml`); this
       AsyncAPI models the resulting channel event delivery.

    2. **Outbound webhooks** - When configured, SuperViz POSTs event
       notifications to a receiver you host (for example `MEETING_STATS` when a
       video meeting ends, plus recording-ready and transcription-ready events).

    This document models the message shapes for both. The underlying client
    transport for realtime channels is a managed WebSocket connection handled by
    the SuperViz SDK; SuperViz does not publish a raw public WebSocket endpoint,
    so the channel is described here at the logical event level. Webhook
    delivery is an HTTP POST to a customer-hosted receiver.
  contact:
    name: API Evangelist
    email: kin@apievangelist.com
    url: https://apievangelist.com
  license:
    name: SuperViz Terms of Service
    url: https://superviz.com/terms
  x-transport-notes:
    realtimeChannels:
      publishedVia: 'POST https://api.superviz.com/realtime/1.0/channels/{channel}/events'
      deliveredVia: Managed WebSocket via the SuperViz SDK (no raw public WebSocket endpoint documented)
      direction: server-to-client fan-out
    webhooks:
      transport: HTTP POST to a customer-hosted receiver
      configuredIn: Dashboard > Developer (webhook receiver URL)
      source: https://docs.superviz.com/video-sdk/webhooks/meeting-stats
defaultContentType: application/json
servers:
  realtime:
    url: api.superviz.com/realtime/1.0
    protocol: https
    description: |
      SuperViz realtime service. Events are published to a channel with
      `POST /channels/{channel}/events` and fanned out to subscribed SDK
      clients. AsyncAPI 2.6 has no dedicated identifier for the SDK-managed
      WebSocket delivery, so `https` is used and the transport is documented in
      `info.x-transport-notes`.
    security:
      - clientSecret: []
channels:
  realtime/{channel}:
    description: |
      A named realtime channel. A backend publishes events to it via the REST
      publish endpoint; subscribed SDK clients receive `ChannelEvent` messages.
      `PresenceUpdate` messages are emitted as participants join or leave.
    parameters:
      channel:
        description: The realtime channel name.
        schema:
          type: string
    subscribe:
      operationId: onChannelEvent
      summary: Receive events published to a channel.
      description: |
        Delivered to SDK clients subscribed to the channel. Carries either a
        user-published event (`ChannelEvent`) or a presence change
        (`PresenceUpdate`).
      message:
        oneOf:
          - $ref: '#/components/messages/ChannelEvent'
          - $ref: '#/components/messages/PresenceUpdate'
  webhooks/meeting-stats:
    description: |
      Outbound webhook SuperViz POSTs to your receiver when a video meeting ends
      and statistics are available (`MEETING_STATS`), plus recording-ready and
      transcription-ready notifications.
    subscribe:
      operationId: onWebhookEvent
      summary: Receive SuperViz outbound webhook notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        oneOf:
          - $ref: '#/components/messages/MeetingStatsWebhook'
          - $ref: '#/components/messages/RecordingReadyWebhook'
          - $ref: '#/components/messages/TranscriptionReadyWebhook'
components:
  securitySchemes:
    clientSecret:
      type: httpApiKey
      in: header
      name: secret
      description: |
        SuperViz Secret Key (paired with the `client_id` header) used to
        authenticate the REST publish request that drives channel events.
  messages:
    ChannelEvent:
      name: ChannelEvent
      title: Realtime channel event
      summary: An event published to a channel and fanned out to subscribers.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ChannelEvent'
      examples:
        - name: priceUpdate
          payload:
            name: price-update
            channel: my-channel
            data:
              symbol: ACME
              price: 42.5
            timestamp: 1751328000000
    PresenceUpdate:
      name: PresenceUpdate
      title: Presence update
      summary: Emitted when a participant joins or leaves the channel.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PresenceUpdate'
      examples:
        - name: joined
          payload:
            type: participant.joined
            channel: my-channel
            participant:
              id: user-123
              name: Ada Lovelace
              connectionId: conn_01habc
              timestamp: 1751328000000
    MeetingStatsWebhook:
      name: MeetingStatsWebhook
      title: MEETING_STATS webhook
      summary: Delivered when a meeting ends and statistics are available.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/MeetingStatsWebhook'
      examples:
        - name: meetingStats
          payload:
            type: MEETING_STATS
            message:
              - uuid: mtg_01hxyz
                meetingId: meeting-01hxyz
                groupId: group-1
                startedAt: '2026-07-01T14:00:00Z'
                endedAt: '2026-07-01T14:32:00Z'
                meetingMinutes: 32
                recordingMinutes: 32
                price: 0.64
                participants:
                  - uuid: p_1
                    name: Ada Lovelace
                    userId: user-123
                    permission: host
                    joinedAt: '2026-07-01T14:00:05Z'
    RecordingReadyWebhook:
      name: RecordingReadyWebhook
      title: Recording ready webhook
      summary: Delivered when a meeting recording has finished processing.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/RecordingReadyWebhook'
      examples:
        - name: recordingReady
          payload:
            type: RECORDING
            message:
              meetingId: meeting-01hxyz
              recordingId: rec_01hxyz
              url: https://recordings.superviz.com/rec_01hxyz.mp4
              durationMinutes: 32
    TranscriptionReadyWebhook:
      name: TranscriptionReadyWebhook
      title: Transcription ready webhook
      summary: Delivered when a meeting transcription / AI insight is available.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/TranscriptionReadyWebhook'
      examples:
        - name: transcriptionReady
          payload:
            type: TRANSCRIPTION
            message:
              meetingId: meeting-01hxyz
              transcriptionId: tr_01hxyz
              language: en
              url: https://recordings.superviz.com/tr_01hxyz.json
  schemas:
    ChannelEvent:
      type: object
      required:
        - name
        - channel
        - data
      properties:
        name:
          type: string
          description: The event name subscribers listen for.
        channel:
          type: string
          description: The channel the event was published to.
        data:
          description: Arbitrary JSON payload delivered to subscribers.
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp (milliseconds) of publication.
    PresenceUpdate:
      type: object
      required:
        - type
        - channel
        - participant
      properties:
        type:
          type: string
          enum:
            - participant.joined
            - participant.left
          description: Whether the participant joined or left the channel.
        channel:
          type: string
        participant:
          type: object
          properties:
            id:
              type: string
            name:
              type: string
            connectionId:
              type: string
              nullable: true
            timestamp:
              type: integer
              format: int64
          required:
            - id
    MeetingStatsWebhook:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - MEETING_STATS
        message:
          type: array
          description: Array of meeting statistics objects.
          items:
            type: object
            properties:
              uuid:
                type: string
              meetingId:
                type: string
              groupId:
                type: string
                nullable: true
              startedAt:
                type: string
                format: date-time
              endedAt:
                type: string
                format: date-time
                nullable: true
              meetingMinutes:
                type: number
              recordingMinutes:
                type: number
              price:
                type: number
              participants:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                    name:
                      type: string
                    userId:
                      type: string
                      nullable: true
                    permission:
                      type: string
                    joinedAt:
                      type: string
                      format: date-time
    RecordingReadyWebhook:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - RECORDING
        message:
          type: object
          properties:
            meetingId:
              type: string
            recordingId:
              type: string
            url:
              type: string
              format: uri
            durationMinutes:
              type: number
    TranscriptionReadyWebhook:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - TRANSCRIPTION
        message:
          type: object
          properties:
            meetingId:
              type: string
            transcriptionId:
              type: string
            language:
              type: string
            url:
              type: string
              format: uri