SuperViz Rooms API

Collaboration REST surface for rooms - retrieve a room's participants and related collaboration context, with cursor-style pagination on list responses.

OpenAPI Specification

superviz-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: SuperViz REST API
  description: >-
    Representative OpenAPI description of the SuperViz server-side REST API.


    SuperViz is SDK-first: real-time collaboration and communication features
    (presence, realtime data channels, video huddle, contextual comments, mouse
    pointers) are implemented in the browser with the `@superviz/sdk` and
    `@superviz/react-sdk` client libraries, initialized with a developer key.


    This REST API at `https://api.superviz.com` is the supporting server-side
    surface. It lets a backend read presence and participants, introspect
    channels, publish events into realtime channels, read room participants and
    contextual comments, and retrieve video meeting statistics. All REST
    requests authenticate with a Client ID and Secret Key issued from
    Dashboard > Developer > Keys, sent as the `client_id` and `secret` request
    headers.


    Endpoints, paths, and field shapes here are modeled from the public SuperViz
    documentation at https://docs.superviz.com and are intended as a faithful,
    representative specification rather than an exhaustive dump of every field.
  version: '1.0'
  contact:
    name: SuperViz Support
    url: https://docs.superviz.com
  license:
    name: SuperViz Terms of Service
    url: https://superviz.com/terms
servers:
  - url: https://api.superviz.com
    description: SuperViz REST API base URL
security:
  - clientId: []
    secret: []
tags:
  - name: Presence
    description: Participants currently connected to realtime channels.
  - name: Channels
    description: Realtime channels active for a room.
  - name: Realtime
    description: Publishing events into realtime channels from a backend.
  - name: Rooms
    description: Collaboration rooms and their participants.
  - name: Comments
    description: Contextual comments (annotations) created via the Collaboration SDK.
  - name: Meetings
    description: Video huddle / meeting statistics.
paths:
  /realtime/1.0/participants/{channel}:
    get:
      operationId: getChannelParticipants
      tags:
        - Presence
      summary: Get participants connected to a channel
      description: >-
        Returns the list of participants currently connected to the named
        realtime channel. This is the presence surface used to render "who is
        here" experiences from a backend.
      parameters:
        - name: channel
          in: path
          required: true
          description: The name of the realtime channel to query.
          schema:
            type: string
          example: my-channel
      responses:
        '200':
          description: A list of connected participants.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Participant'
              example:
                - id: user-123
                  name: Ada Lovelace
                  connectionId: conn_01habc
                  timestamp: 1751328000000
                  channel: my-channel
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /realtime/1.0/channels:
    get:
      operationId: listChannels
      tags:
        - Channels
      summary: List realtime channels
      description: >-
        Lists the realtime channels that are active for the authenticated
        account / room, so a backend can discover where presence and messages
        are flowing.
      responses:
        '200':
          description: A list of active channels.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Channel'
              example:
                - name: my-channel
                  connections: 4
        '401':
          $ref: '#/components/responses/Unauthorized'
  /realtime/1.0/channels/{channel}/events:
    post:
      operationId: publishEvent
      tags:
        - Realtime
      summary: Publish an event to a channel
      description: >-
        Publishes (posts) an event with an arbitrary JSON payload to the named
        realtime channel. Connected SDK clients subscribed to that channel and
        event name receive the payload in real time. This is how a backend
        pushes synchronized data to clients.
      parameters:
        - name: channel
          in: path
          required: true
          description: The name of the realtime channel to publish to.
          schema:
            type: string
          example: my-channel
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublishEventRequest'
            example:
              name: price-update
              data:
                symbol: ACME
                price: 42.5
      responses:
        '200':
          description: Event accepted and published to the channel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublishEventResponse'
              example:
                success: true
                channel: my-channel
                name: price-update
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /rooms/{roomId}/participants:
    get:
      operationId: getRoomParticipants
      tags:
        - Rooms
      summary: Get participants in a collaboration room
      description: >-
        Returns the participants associated with a collaboration room. List
        responses use cursor-style pagination via the `limit` and `startAfter`
        query parameters.
      parameters:
        - name: roomId
          in: path
          required: true
          description: The identifier of the collaboration room.
          schema:
            type: string
          example: room-abc
        - name: limit
          in: query
          required: false
          description: Maximum number of participants to return per page.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 100
        - name: startAfter
          in: query
          required: false
          description: Pagination cursor - return participants after this participant id.
          schema:
            type: string
      responses:
        '200':
          description: A paginated list of room participants.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedParticipants'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /rooms/{roomId}/comments:
    get:
      operationId: listRoomComments
      tags:
        - Comments
      summary: List contextual comments for a room
      description: >-
        Returns the contextual comments (annotations pinned to elements of a web
        application or 3D scene) created through the Collaboration SDK for the
        given room.
      parameters:
        - name: roomId
          in: path
          required: true
          description: The identifier of the collaboration room.
          schema:
            type: string
          example: room-abc
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 100
        - name: startAfter
          in: query
          required: false
          description: Pagination cursor - return comments after this comment id.
          schema:
            type: string
      responses:
        '200':
          description: A paginated list of contextual comments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedComments'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /meetings/{meetingId}:
    get:
      operationId: getMeetingStats
      tags:
        - Meetings
      summary: Get video meeting statistics
      description: >-
        Retrieves statistics for a video huddle / meeting created with the Video
        SDK, including duration in minutes, recording minutes, price, and
        per-participant join detail. The same statistics payload is delivered
        via the MEETING_STATS webhook when a meeting ends.
      parameters:
        - name: meetingId
          in: path
          required: true
          description: The identifier of the meeting.
          schema:
            type: string
          example: meeting-01hxyz
      responses:
        '200':
          description: Meeting statistics.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingStats'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    clientId:
      type: apiKey
      in: header
      name: client_id
      description: >-
        Client ID issued from the SuperViz Dashboard under Developer > Keys.
        Sent on every REST request alongside the `secret` header.
    secret:
      type: apiKey
      in: header
      name: secret
      description: >-
        Secret Key issued from the SuperViz Dashboard under Developer > Keys.
        Displayed only once at creation; store it securely and never commit it
        to version control.
  responses:
    BadRequest:
      description: The request was malformed or a parameter was invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            statusCode: 400
            message: Invalid request body.
    Unauthorized:
      description: Missing or invalid client_id / secret credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            statusCode: 401
            message: Unauthorized.
    NotFound:
      description: The requested resource does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            statusCode: 404
            message: Not found.
  schemas:
    Participant:
      type: object
      description: A participant connected to a realtime channel.
      properties:
        id:
          type: string
          description: Participant identifier supplied when the SDK was initialized.
        name:
          type: string
          description: Display name of the participant.
        connectionId:
          type: string
          nullable: true
          description: Identifier of the participant's current connection.
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp (milliseconds) of when the participant connected.
        channel:
          type: string
          description: The channel the participant is connected to.
      required:
        - id
        - channel
    Channel:
      type: object
      description: A realtime channel active for the account or room.
      properties:
        name:
          type: string
          description: The channel name.
        connections:
          type: integer
          description: Number of connections currently on the channel.
      required:
        - name
    PublishEventRequest:
      type: object
      description: Request body to publish an event to a channel.
      properties:
        name:
          type: string
          description: The event name subscribers listen for.
        data:
          description: Arbitrary JSON payload delivered to subscribers.
      required:
        - name
        - data
    PublishEventResponse:
      type: object
      properties:
        success:
          type: boolean
        channel:
          type: string
        name:
          type: string
    Comment:
      type: object
      description: A contextual comment (annotation) created via the Collaboration SDK.
      properties:
        id:
          type: string
        text:
          type: string
          description: Body of the comment.
        participantId:
          type: string
          description: Identifier of the participant who authored the comment.
        position:
          type: object
          description: >-
            Anchor of the comment within the host application or 3D scene
            (implementation-specific coordinates).
          additionalProperties: true
        resolved:
          type: boolean
          description: Whether the comment thread has been resolved.
        createdAt:
          type: string
          format: date-time
      required:
        - id
        - text
    MeetingStats:
      type: object
      description: Statistics for a completed or in-progress video meeting.
      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
          description: Total meeting duration in minutes.
        recordingMinutes:
          type: number
          description: Minutes of recording produced.
        price:
          type: number
          description: Computed cost of the meeting.
        participants:
          type: array
          items:
            $ref: '#/components/schemas/MeetingParticipant'
      required:
        - meetingId
    MeetingParticipant:
      type: object
      properties:
        uuid:
          type: string
        name:
          type: string
        userId:
          type: string
          nullable: true
        permission:
          type: string
          description: Permission level of the participant in the meeting.
        joinedAt:
          type: string
          format: date-time
      required:
        - uuid
    PaginatedParticipants:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Participant'
        limit:
          type: integer
        next:
          type: string
          nullable: true
          description: Cursor to pass as `startAfter` to fetch the next page, or null.
      required:
        - data
    PaginatedComments:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        limit:
          type: integer
        next:
          type: string
          nullable: true
          description: Cursor to pass as `startAfter` to fetch the next page, or null.
      required:
        - data
    Error:
      type: object
      properties:
        statusCode:
          type: integer
        message:
          type: string
      required:
        - statusCode
        - message