Panopto RemoteRecorderAPI API

Remote Recorder Device API. Warning: this endpoint is for Panopto's hardware partners only and cannot be used without a partner API key.

OpenAPI Specification

panopto-remoterecorderapi-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: Panopto Public Accessibility RemoteRecorderAPI API
  description: The public API for Panopto. OpenID & OAuth information can be found at Panopto/oauth2/.well-known/openid-configuration
  version: '1'
host: <PanoptoServerURL>(i.e. example.hosted.panopto.com)
basePath: /Panopto
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: RemoteRecorderAPI
  description: 'Remote Recorder Device API. Warning: this endpoint is for Panopto''s hardware partners only and cannot be used without a partner API key.'
paths:
  /api/v1/remoteRecorderAPI/remoteRecorder:
    put:
      tags:
      - RemoteRecorderAPI
      summary: Register a new remote recorder
      description: "Retrieves the remote recorder public ID and credentials to access the RR API.\r\n                  Uses BasicAuth requiring a remote recorder registration key from an admin"
      operationId: RemoteRecorderAPI_RegisterRemoteRecorder
      parameters:
      - name: registrationRequest
        in: body
        schema:
          $ref: '#/definitions/RemoteRecorderRegistrationRequest'
        x-nullable: true
      responses:
        '200':
          x-nullable: false
          description: The provided client credentials should be used with an oauth2 client flow for the rest of the API, using the 'api' and 'remoteRecorderApi' scopes
          schema:
            $ref: '#/definitions/RemoteRecorderRegistrationResponse'
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/connect:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Connect as the provided remote recorder
      description: "Remote recorder is identified via the GUID public id\r\n                recorderVersion is a version identifier in the form of \"<vendor>.<product>.<major>.<minor>.<servicing>\"\r\n                buildVersion is the vendor specific build string"
      operationId: RemoteRecorderAPI_Connect
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - type: string
        name: recorderVersion
        in: query
        required: true
        x-nullable: true
      - type: string
        name: recorderBuild
        in: query
        required: true
        x-nullable: true
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/disconnect:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Disconnect as the provided remote recorder, identified via the GUID public id
      operationId: RemoteRecorderAPI_Disconnect
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/heartbeat:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Heartbeat and preview as the provided remote recorder
      description: "Remote recorder is identified via the GUID public id\r\n                Include options: defaults (provides default quality settings and folder), extendedConfigurations (provides extended configurations)"
      operationId: RemoteRecorderAPI_Heartbeat
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: updateData
        in: body
        schema:
          $ref: '#/definitions/RemoteRecorderHeartbeatData'
        x-nullable: true
      - type: array
        name: include
        in: query
        collectionFormat: multi
        x-nullable: true
        items:
          type: string
      responses:
        '200':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/RemoteRecorderHeartbeatResponse'
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/schedule:
    get:
      tags:
      - RemoteRecorderAPI
      summary: Retrieve a schedule for the next 7 days for the provided remote recorder.As a best practice a new scheduled should be fetched every day even if the schedule version in the heartbeat hasn't changed
      operationId: RemoteRecorderAPI_GetSchedule
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - type: array
        name: include
        in: query
        collectionFormat: multi
        x-nullable: true
        items:
          type: string
      responses:
        '200':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/RemoteRecorderSchedule'
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
    post:
      tags:
      - RemoteRecorderAPI
      summary: Update or add a set of scheduled recordings for the provided remote recorder. To add a scheduled recording, the recording should have all relevant fields filled in but an empty (all zeros) guid
      operationId: RemoteRecorderAPI_UpdateSchedule
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: recordingsToUpdate
        in: body
        schema:
          type: array
          items:
            $ref: '#/definitions/RemoteRecorderScheduledRecording'
        x-nullable: true
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/error:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Register an error with the provided remote recorder on the server
      operationId: RemoteRecorderAPI_Error
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: remoteRecorderError
        in: body
        schema:
          $ref: '#/definitions/RemoteRecorderError'
        x-nullable: true
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/legacyLogin:
    get:
      tags:
      - RemoteRecorderAPI
      summary: Retrieve a legacy ASPXAUTH cookie
      operationId: RemoteRecorderAPI_LegacyLogin
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      responses:
        '401':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/session/{sessionId}/pause:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Pause the recording of the specified session on the server
      operationId: RemoteRecorderAPI_PauseRecording
      parameters:
      - type: string
        name: sessionId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: pauseRecordingRequest
        in: body
        schema:
          $ref: '#/definitions/RemoteRecorderPauseRecordingRequest'
        x-nullable: true
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/session/{sessionId}/resume:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Resume the recording of the specified session on the server
      operationId: RemoteRecorderAPI_ResumeRecording
      parameters:
      - type: string
        name: sessionId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: resumeRecordingRequest
        in: body
        schema:
          $ref: '#/definitions/RemoteRecorderResumeRecordingRequest'
        x-nullable: true
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/urls:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Provides a list of URLs and URL types to present to administrators to help them manage this remote recorder.Calling this replaces all previously reported URLs. URLs are preserved until replaced, so this only needs to be called when they have changed
      operationId: RemoteRecorderAPI_ReportRemoteRecorderURLs
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: urlUpdateRequest
        in: body
        schema:
          $ref: '#/definitions/RemoteRecorderURLsUpdateRequest'
        x-nullable: true
      responses:
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/connect:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Establishes a new connection which enables the WebRTC-based media preview feature.  After this, the client should commence WebRTC session negotiation by sending us an SDP offer.
      operationId: RemoteRecorderAPI_WebRtcConnect
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: postData
        in: body
        schema:
          $ref: '#/definitions/WebRtcConnectPostData'
        x-nullable: true
      responses:
        '200':
          x-nullable: false
          description: ''
          schema: {}
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
        '401':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
        '503':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/disconnect:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Destroys the connection which enables the WebRTC-based media preview feature.
      operationId: RemoteRecorderAPI_WebRtcDisconnect
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: postData
        in: body
        schema:
          $ref: '#/definitions/WebRtcDisconnectPostData'
        x-nullable: true
      responses:
        '200':
          x-nullable: false
          description: ''
          schema: {}
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
        '401':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/events:
    get:
      tags:
      - RemoteRecorderAPI
      summary: After the client has sent us an SDP offer, they should poll this  endpoint periodically to receive messages.
      description: "After sending the SDP offer, the client should check here for events periodically.  This is not a long-polling call,\r\nso it will return quickly.\r\n\r\nPrior to receiving the SDP answer, the client should wait `PingFastInterval` seconds between requests.  Five seconds\r\nafter receiving the SDP answer, the client should wait `PingSlowInterval` seconds between requests.\r\n\r\n# Event Types\r\nThere are several types of events, each of which has a distinct payload.\r\n\r\n## IceCandidate\r\nThis event describes a single ICE candidate related to the SDP answer document.  Each ICE candidate\r\ndescribes a possible endpoint where the client can send SRTP (and SRTCP) payloads.\r\n\r\n  The payload is a **JSON serialized** object containing 2 fields.\r\n  1.  `Index`: This is a non-negative integer.  This is a zero-based index, corresponding to a specific\r\n      section within an SDP answer, where each section begins with an 'm='  line.\r\n  2.  `Candidate`:  A single line of text representing the ICE candidate, the format of which is consistent\r\n      with the standard definition for ICE Candidates as defined by SDP standard.\r\n\r\n## SdpAnswer\r\nThis event notifies of a the SDP answer. It is the final description of the session provided by the WebRTC\r\nsignaling service.\r\n\r\n  The payload is a Session Description document, as defined by the SDP protocol.\r\n\r\n## TemporaryFailure\r\nThis event notifies of a warning or error, but recovery may still be possible.  This is only\r\ninformational and the remote recorder is expected to take no action.\r\n\r\n  The payload is human readable additional information about the situation.\r\n\r\n## PermanentFailure\r\nThis event notifies that the WebRTC session is in unrecoverable state.  The remote recorder should\r\nrelease any resource associated with this WebRTC session.  It does not need to call the REST endpoint to explicitly\r\ndisconnect because the server is already aware that WebRTC session is in a bad state, and the standard method for\r\ngraceful cleanup is no longer possible.\r\n\r\n  The payload is human readable additional information about the situation."
      operationId: RemoteRecorderAPI_WebRtcGetEvents
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      responses:
        '200':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/WebRtcEventsResponse'
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
        '401':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/iceCandidates:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Sends a batch of ICE candidates from client to signaling server.
      description: "Sends a batch of ICE candidates from client (the RTP sender) to signaling server.  ICE Candidates are used for the\r\ntransmission of RTP and RTCP payloads.\r\n\r\nThis is a JSON array of ICE candidates, where each ICE candidate is an object containing 2 fields.\r\n\r\n1.  `Index`: This is a non-negative integer.  This is a zero-based index, corresponding to a specific section within an\r\n    SDP offer, where each section begins with an `m=`  line.\r\n2.  `Candidate`:  A single line of text representing the ICE candidate, the format of which is consistent with the\r\n    standard definition for ICE Candidates as defined by SDP standard.  For example:\r\n    `candidate:8 1 TCP 1015022335 fe80::52d3:1968:14ec:8246 9 typ host tcptype active`"
      operationId: RemoteRecorderAPI_WebRtcIceCandidates
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: postData
        in: body
        schema:
          $ref: '#/definitions/WebRtcIceCandidates'
        x-nullable: true
      responses:
        '200':
          x-nullable: false
          description: ''
          schema: {}
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
        '401':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/sdpOffer:
    post:
      tags:
      - RemoteRecorderAPI
      summary: The client begins WebRTC session negotiation by submitting an SDP offer.
      description: "This is the next step after starting a new WebRTC connection.  The client submits an SDP offer to describe the session\r\nit hopes to create.  After this is sent, the client should begin 2 other activities:\r\n1.  The client should send ICE candidates as soon as they are known (using another REST endpoint).\r\n2.  The client should begin polling for events (using another REST endpoint).\r\n\r\n## SessionDescription\r\nThe SDP offer is sent as the  `SessionDescription` string which is a multi-line string, as defined\r\nby the SDP standard.  An example of a `SessionDescription` string is as follows:\r\n\r\n```\r\nv=0\r\no=- 2954795159668969744 0 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\na=ice-options:trickle\r\nm=audio 9 UDP/TLS/RTP/SAVPF 97\r\nc=IN IP4 0.0.0.0\r\na=setup:actpass\r\na=ice-ufrag:JAXcdSTGPa8I57dqpu8zggosj53FsI1P\r\na=ice-pwd:2bC1EVxNEIqNYm+Id1s7sw7RBmyAbNS2\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=sendrecv\r\na=rtpmap:97 OPUS/48000/2\r\na=rtcp-fb:97 nack pli\r\na=fmtp:97 sprop-maxcapturerate=48000;sprop-stereo=0\r\na=ssrc:2876771208 msid:user3992408561@host-b8077b5 webrtctransceiver0\r\na=ssrc:2876771208 cname:user3992408561@host-b8077b5\r\na=mid:audio0\r\na=fingerprint:sha-256 66:CD:30:01:9B:76:7E:4D:CA:F2:EF:BC:7C:61:BA:AC:AF:01:E8:72:37:92:9B:28:15:04:D8:D6:6B:0C:78:8B\r\n```"
      operationId: RemoteRecorderAPI_WebRtcSdpOffer
      parameters:
      - type: string
        name: remoteRecorderPublicId
        in: path
        required: true
        format: guid
        x-nullable: false
      - name: postData
        in: body
        schema:
          $ref: '#/definitions/WebRtcSdpOfferPostData'
        x-nullable: true
      responses:
        '200':
          x-nullable: false
          description: ''
          schema: {}
        '400':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
        '401':
          x-nullable: false
          description: ''
          schema:
            $ref: '#/definitions/APIError'
definitions:
  LiveMonitoringHeartbeatResponseData:
    type: object
    required:
    - Mode
    properties:
      Mode:
        $ref: '#/definitions/LiveMonitoringMode'
      Id:
        type: string
  WebRtcEventType:
    type: string
    description: ''
    x-enumNames:
    - Unknown
    - IceCandidate
    - SdpAnswer
    - TemporaryFailure
    - PermanentFailure
    enum:
    - Unknown
    - IceCandidate
    - SdpAnswer
    - TemporaryFailure
    - PermanentFailure
  LiveMonitoringMode:
    type: string
    description: ''
    x-enumNames:
    - Disabled
    - WebRtcPrimaryAudio
    enum:
    - Disabled
    - WebRtcPrimaryAudio
  WebRtcIceCandidates:
    type: object
    properties:
      Candidates:
        type: array
        items:
          $ref: '#/definitions/WebRtcIceCandidate'
  RemoteRecorderDevicePreview:
    type: object
    required:
    - AudioFormat
    - VideoFormat
    properties:
      AudioFormat:
        $ref: '#/definitions/DeviceThumbnailFormat'
      AudioPreviewData:
        type: string
      VideoFormat:
        $ref: '#/definitions/DeviceThumbnailFormat'
      VideoPreviewData:
        type: string
      StreamID:
        type: string
        format: guid
  Device:
    type: object
    required:
    - Type
    properties:
      DeviceId:
        type: string
      Name:
        type: string
      Type:
        $ref: '#/definitions/DeviceType'
  RemoteRecorderAudioHistogramType:
    type: string
    description: ''
    x-enumNames:
    - Automatic
    - AlwaysStereoHistograms
    - AlwaysMonoHistograms
    enum:
    - Automatic
    - AlwaysStereoHistograms
    - AlwaysMonoHistograms
  RemoteRecorderPauseRecordingRequest:
    type: object
    required:
    - PauseRecordingTime
    properties:
      PauseRecordingTime:
        type: number
        description: Pause recording time in UTC file time seconds
        format: double
  RemoteRecorderErrorType:
    type: string
    description: ''
    x-enumNames:
    - Invalid
    - General
    - Device
    - Network
    - Storage
    enum:
    - Invalid
    - General
    - Device
    - Network
    - Storage
  WebRtcDisconnectPostData:
    type: object
    required:
    - OperationType
    properties:
      OperationType:
        description: The type of operation.
        $ref: '#/definitions/WebRtcDisconnectOperationType'
  RemoteRecorderSchedule:
    allOf:
    - $ref: '#/definitions/APIError'
    - type: object
      required:
      - ScheduleId
      - ServerTime
      properties:
        ScheduleId:
          type: string
          format: guid
        ServerTime:
          type: number
          format: double
        Recordings:
          type: array
          items:
            $ref: '#/definitions/RemoteRecorderScheduledRecording'
  WebRtcSdpOfferPostData:
    type: object
    properties:
      SessionDescription:
        type: string
        description: The session description document, as defined by the Session Description Protocol (SDP) standard.
  RemoteRecorderState:
    type: string
    description: ''
    x-enumNames:
    - Stopped
    - Previewing
    - Recording
    - Paused
    - Faulted
    - Disconnected
    - RecorderRunning
    enum:
    - Stopped
    - Previewing
    - Recording
    - Paused
    - Faulted
    - Disconnected
    - RecorderRunning
  RemoteRecorderURL:
    type: object
    required:
    - URLType
    properties:
      URLType:
        $ref: '#/definitions/RemoteRecorderURLType'
      URL:
        type: string
        description: Must be a well formed URL
  RemoteRecorderHeartbeatData:
    type: object
    required:
    - State
    - DiskSpaceFreeMegabytes
    - LiveMonitoringBlocked
    properties:
      State:
        $ref: '#/definitions/RemoteRecorderState'
      DiskSpaceFreeMegabytes:
        type: integer
        format: int32
      CurrentRecordingSessionId:
        type: string
        format: guid
      ConnectedDevicesWithPreviews:
        type: array
        description: List of connected devices and available previews. If excluded or null, the list of connected devices will not be updated.
        items:
          $ref: '#/definitions/DeviceDescriptionWithPreview'
      LiveMonitoringBlocked:
        type: boolean
        description: If supported, whether or not live audio monitoring is currently blocked.
  WebRtcIceCandidate:
    type: object
    required:
    - Index
    properties:
      Candidate:
        type: string
      Index:
        type: integer
  RemoteRecorderHeartbeatResponse:
    allOf:
    - $ref: '#/definitions/APIError'
    - type: object
      required:
      - ScheduleVersion
      - SettingsVersion
      - PingInterval
      properties:
        ScheduleVersion:
          type: string
          format: guid
        SettingsVersion:
          type: string
          format: guid
        PingInterval:
          type: integer
          format: int32
        Configuration:
          $ref: '#/definitions/RemoteRecorderConfiguration'
        RecordingSessionIsPaused:
          type: boolean
          description: Indicates whether the current recording (as per CurrentRecordingSessionId) is in a paused state. This parameter will not be emitted if no CurrentRecordingSessionId is provided.
        LiveMonitoring:
          description: "This is an object that tells the Remote Recorder how to perform live monitoring.  If null then the Remote Recorder\r\nshould NOT perform live monitoring.  This object has 2 fields:\r\n  \r\n'Mode': The type of live monitoring to perform.\r\n\r\n'Id': This is a string id.  If this string changes, then the Remote Recorder needs to shut down\r\n    its existing WebRTC session (if there is one) and negotiate a new one."
          $ref: '#/definitions/LiveMonitoringHeartbeatResponseData'
        DefaultFolder:
          type: string
          format: guid
        DefaultPrimaryQualitySettings:
          $ref: '#/definitions/QualitySettings'
        DefaultSecondaryQualitySettings:
          $ref: '#/definitions/QualitySettings'
        ExtendedConfiguration:
          description: Extended configuration for the client. The configuration is only returned if the client specified 'extendedConfigurations' in the request's included options.
          $ref: '#/definitions/RemoteRecorderExtendedConfiguration'
  DeviceType:
    type: string
    description: ''
    x-enumNames:
    - Unknown
    - Audio
    - Video
    - AudioVideo
    enum:
    - Unknown
    - Audio
    - Video
    - AudioVideo
  RemoteRecorderRegistrationResponse:
    allOf:
    - $ref: '#/definitions/APIError'
    - type: object
      required:
      - RemoteRecorderPublicId
      - ClientKey
      properties:
        RemoteRecorderPublicId:
          type: string
          format: guid
        ClientKey:
          type: string
          format: guid
        ClientSecret:
          type: string
  RemoteRecorderURLType:
    type: string
    description: ''
    x-enumNames:
    - Management
    - PrimaryPreview
    - SecondaryPreview
    - Support
    - SecondaryPreview2
    - SecondaryPreview3
    - SecondaryPreview4
    enum:
    - Management
    - PrimaryPreview
    - SecondaryPreview
    - Support
    - SecondaryPreview2
    - SecondaryPreview3
    - SecondaryPreview4
  WebRtcEventsResponse:
    allOf:
    - $ref: '#/definitions/APIError'
    - type: object
      required:
      - PingFastInterval
      - PingSlowInterval
      properties:
        Events:
          type: array
          items:
            $ref: '#/definitions/WebRtcEvent'
        PingFastInterval:
          type: integer
          format: int32
        PingSlowInterval:
          type: integer
          format: int32
  RemoteRecorderError:
    type: object
    required:
    - Severity
    - ErrorType
    - ErrorCode
    properties:
      Severity:
        description: Error severity, must be a value other than Invalid
        $ref: '#/definitions/RemoteRecorderErrorSeverity'
      ErrorType:
        description: Error category, must be a value other than Invalid
        $ref: '#/definitions/RemoteRecorderErrorType'
      ErrorCode:
        type: integer
        description: Vendor-specific error code
        format: int32
      Message:
        type: string
        description: Error message with a maximum length of 250 characters
      AssociatedSessionId:
        type: string
        description: If this error is associated with a session, which session
        format: guid
  RemoteRecorderRegistrationRequest:
    type: object
    properties:
      MachineUniqueIdentifier:
        type: string
        description: Static, non-changing value uniquely identifing this remote recorder
      RecorderVersion:
        type: string
        description: Must be in the format of "Vendor.Product.Major.Minor.Servicing"
      RecorderBuild:
        type: string
        description: Vendor specfic build version. Format is up to the vendor but must be less than 255 characters
      Capabilities:
        type: array
        description: 'Capabilities of this recorder. Options include: screencapture, slidecapture, highlightmousecursor, capturesystemaudio, 1080p, devicetemplates'
        items:
          type: string
      Description:
        type: string
        description: Description of this remote recorder - the name presented to users
  DeviceDescriptionWithPreview:
    type: object
    properties:
      Device:
        $ref: '#/definitions/Device'
      Preview:
        $ref: '#/definitions/RemoteRecorderDevicePreview'
  RemoteRecorderErrorSeverity:
    type: string
    description: ''
    x-enumNames:
    - Invalid
    - Critical
    - Error
    - Warning
    enum:
    - Invalid
    - Critical
    - Error
    - Warning
  RemoteRecorderScheduledRecording:
    type: object
    required:
    - SessionId
    - FolderId
    - StartTime
    - EndTime
    - IsBroadcast
    - SuppressPrimaryDevices
    - SuppressSecondaryDevices
    properties:
      Id:
        type: string
        format: guid
      SessionId:
        type: string
        format: guid
      SessionName:
        type: string
      FolderId:
        type: string
        format: guid
      FolderName:
        type: string
      UserId:
        type: string
        format: guid
      StartTime:
        type: number
        format: double
      EndTime:
        type: number
        format: double
      IsBroadcast:
        type: boolean
      SuppressPrimaryDevices:
        type: boolean
      SuppressSecondaryDevices:
        type: boolean
      PrimaryQualitySettings:
        $ref: '#/definitions/QualitySettings'
      SecondaryQualitySettings:
        $ref: '#/definitions/QualitySettings'
      Configuration:
        $ref: '#/definitions/RemoteRecorderConfiguration'
  RemoteRecorderResumeRecordingRequest:
    type: object
    required:
    - ResumeRecordingTime
    properties:
      ResumeRecordingTime:
        type: number
        description: Resume recording time in UTC file time seconds
        format: double
  QualitySettings:
    type: object
    required:
    - AudioBitrate
    - Framerate
    - MultipleBitrateCount
    - PixelCount
    - VideoBitrate
    properties:
      AudioBitrate:
        type: integer
        format: int32
      Framerate:
        type: integer
        format: int32
      MultipleBitrateCount:
        type: integer
        format: int32
      PixelCount:
        type: integer
        format: int32
      VideoBitrate:
        type: integer
        format: int32
  WebRtcDisconnectOperationType:
    type: string
    description: ''
    x-enumNames:
    - Unknown
    - Destroy
    enum:
    - Unknown
    - Destroy
  WebRtcConnectPostData:
    type: object
    required:
    - OperationType
    properties:
      OperationType:
        $ref: '#/definitions/WebRtcConnectOperationType'
  WebRtcConnectOperationType:
    type: string
    description: ''
    x-enumNames:
    - Unknown
    - Initialize
    enum:
    - Unknown
    - Initialize
  APIErrorInternal:
    type: object
    required:
    - Success
    properties:
      ErrorCode:
        type: string
        description: Internal error code
      Message:
        type: string
      Success:
        type: boolean
        description: If true the call succeed and this is a partial failure (or warning). If false the call failed overall
      ErrorSource:
        type: string
        description: Unique identifier of what caused this error
  RemoteRecorderURLsUpdateRequest:
    type: object
    properties:
      URLs:
        type: array
        items:
          $ref: '#/definitions/RemoteRecorderURL'
  RemoteRecorderConfiguration:
    type: object
    required:
    - CaptureScreen
    - CaptureSlides
    - CaptureSystemAudio
    - HighlightMouseCursor
    properties:
      PrimaryVideoDevice:
        type: string
      PrimaryAudioDevice:
        type: string
      DevicesToIgnore:
        type: array
        items:
          type: string
      DevicesToCapture:
        type: array
        items:
          type: string
      CaptureScreen:
        type: boolean
      CaptureSlides:
        type: boolean
      CaptureSystemAudio:
        type: boolean
      HighlightMouseCursor:
        type: boolean
  APIError:
    type: object
    properties:
      Error:
        description: Error result returned if an error occurs in Panopto, otherwise null or missing
        $ref: '#/definitions/APIErrorInternal'
  WebRtcEvent:
    type: object
    required:
    - EventType
    properties:
      EventType:
        $ref: '#/definitions/WebRtcEventType'
      Payload:
        type: string
  DeviceThumbnailFormat:
    type: string
    description: ''
    x-enumNames:
    - None
    - AudioHist
    - VideoJpeg
    - AudioHist2Channel
    enum:
    - None
    - AudioHist
    - VideoJpeg
    - AudioHist2C

# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/panopto/refs/heads/main/openapi/panopto-remoterecorderapi-api-openapi.yml