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.

Operations 16

PUT /api/v1/remoteRecorderAPI/remoteRecorder Register a new remote recorder #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/connect Connect as the provided remote recorder #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/disconnect Disconnect as the provided remote recorder, identified via the GUID public id #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/heartbeat Heartbeat and preview as the provided remote recorder #
GET /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/schedule 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 heartbea #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/schedule 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 (al #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/error Register an error with the provided remote recorder on the server #
GET /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/legacyLogin Retrieve a legacy ASPXAUTH cookie #
POST /api/v1/remoteRecorderAPI/session/{sessionId}/pause Pause the recording of the specified session on the server #
POST /api/v1/remoteRecorderAPI/session/{sessionId}/resume Resume the recording of the specified session on the server #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/urls 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 u #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/connect 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. #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/disconnect Destroys the connection which enables the WebRTC-based media preview feature. #
GET /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/events After the client has sent us an SDP offer, they should poll this endpoint periodically to receive messages. #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/iceCandidates Sends a batch of ICE candidates from client to signaling server. #
POST /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/liveMonitoring/webRtc/sdpOffer The client begins WebRTC session negotiation by submitting an SDP offer. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/panopto-remoterecorderapi-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

panopto-remoterecorderapi-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Panopto Public Accessibility Remote Recorder API
  description: The public API for Panopto. OpenID & OAuth information can be found at Panopto/oauth2/.well-known/openid-configuration
  version: '1'
servers:
- url: https://<PanoptoServerURL>(i.e. example.hosted.panopto.com)/Panopto
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.\n                  Uses BasicAuth requiring a remote recorder registration key from an admin"
      operationId: RemoteRecorderAPI_RegisterRemoteRecorder
      responses:
        '200':
          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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RemoteRecorderRegistrationResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteRecorderRegistrationRequest'
  /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\n                recorderVersion is a version identifier in the form of \"<vendor>.<product>.<major>.<minor>.<servicing>\"\n                buildVersion is the vendor specific build string"
      operationId: RemoteRecorderAPI_Connect
      parameters:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      - name: recorderVersion
        in: query
        required: true
        schema:
          type: string
      - name: recorderBuild
        in: query
        required: true
        schema:
          type: string
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/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\n                Include options: defaults (provides default quality settings and folder), extendedConfigurations (provides extended configurations)"
      operationId: RemoteRecorderAPI_Heartbeat
      parameters:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      - name: include
        in: query
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RemoteRecorderHeartbeatResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteRecorderHeartbeatData'
  /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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      - name: include
        in: query
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RemoteRecorderSchedule'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/RemoteRecorderScheduledRecording'
  /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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteRecorderError'
  /api/v1/remoteRecorderAPI/remoteRecorder/{remoteRecorderPublicId}/legacyLogin:
    get:
      tags:
      - RemoteRecorderAPI
      summary: Retrieve a legacy ASPXAUTH cookie
      operationId: RemoteRecorderAPI_LegacyLogin
      parameters:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/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:
      - name: sessionId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteRecorderPauseRecordingRequest'
  /api/v1/remoteRecorderAPI/session/{sessionId}/resume:
    post:
      tags:
      - RemoteRecorderAPI
      summary: Resume the recording of the specified session on the server
      operationId: RemoteRecorderAPI_ResumeRecording
      parameters:
      - name: sessionId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteRecorderResumeRecordingRequest'
  /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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoteRecorderURLsUpdateRequest'
  /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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema: {}
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '503':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebRtcConnectPostData'
  /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:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema: {}
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebRtcDisconnectPostData'
  /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,\nso it will return quickly.\n\nPrior to receiving the SDP answer, the client should wait `PingFastInterval` seconds between requests.  Five seconds\nafter receiving the SDP answer, the client should wait `PingSlowInterval` seconds between requests.\n\n# Event Types\nThere are several types of events, each of which has a distinct payload.\n\n## IceCandidate\nThis event describes a single ICE candidate related to the SDP answer document.  Each ICE candidate\ndescribes a possible endpoint where the client can send SRTP (and SRTCP) payloads.\n\n  The payload is a **JSON serialized** object containing 2 fields.\n  1.  `Index`: This is a non-negative integer.  This is a zero-based index, corresponding to a specific\n      section within an SDP answer, where each section begins with an 'm='  line.\n  2.  `Candidate`:  A single line of text representing the ICE candidate, the format of which is consistent\n      with the standard definition for ICE Candidates as defined by SDP standard.\n\n## SdpAnswer\nThis event notifies of a the SDP answer. It is the final description of the session provided by the WebRTC\nsignaling service.\n\n  The payload is a Session Description document, as defined by the SDP protocol.\n\n## TemporaryFailure\nThis event notifies of a warning or error, but recovery may still be possible.  This is only\ninformational and the remote recorder is expected to take no action.\n\n  The payload is human readable additional information about the situation.\n\n## PermanentFailure\nThis event notifies that the WebRTC session is in unrecoverable state.  The remote recorder should\nrelease any resource associated with this WebRTC session.  It does not need to call the REST endpoint to explicitly\ndisconnect because the server is already aware that WebRTC session is in a bad state, and the standard method for\ngraceful cleanup is no longer possible.\n\n  The payload is human readable additional information about the situation."
      operationId: RemoteRecorderAPI_WebRtcGetEvents
      parameters:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebRtcEventsResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/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\ntransmission of RTP and RTCP payloads.\n\nThis is a JSON array of ICE candidates, where each ICE candidate is an object containing 2 fields.\n\n1.  `Index`: This is a non-negative integer.  This is a zero-based index, corresponding to a specific section within an\n    SDP offer, where each section begins with an `m=`  line.\n2.  `Candidate`:  A single line of text representing the ICE candidate, the format of which is consistent with the\n    standard definition for ICE Candidates as defined by SDP standard.  For example:\n    `candidate:8 1 TCP 1015022335 fe80::52d3:1968:14ec:8246 9 typ host tcptype active`"
      operationId: RemoteRecorderAPI_WebRtcIceCandidates
      parameters:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema: {}
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebRtcIceCandidates'
  /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

        it hopes to create.  After this is sent, the client should begin 2 other activities:

        1.  The client should send ICE candidates as soon as they are known (using another REST endpoint).

        2.  The client should begin polling for events (using another REST endpoint).


        ## SessionDescription

        The SDP offer is sent as the  `SessionDescription` string which is a multi-line string, as defined

        by the SDP standard.  An example of a `SessionDescription` string is as follows:


        ```

        v=0

        o=- 2954795159668969744 0 IN IP4 0.0.0.0

        s=-

        t=0 0

        a=ice-options:trickle

        m=audio 9 UDP/TLS/RTP/SAVPF 97

        c=IN IP4 0.0.0.0

        a=setup:actpass

        a=ice-ufrag:JAXcdSTGPa8I57dqpu8zggosj53FsI1P

        a=ice-pwd:2bC1EVxNEIqNYm+Id1s7sw7RBmyAbNS2

        a=rtcp-mux

        a=rtcp-rsize

        a=sendrecv

        a=rtpmap:97 OPUS/48000/2

        a=rtcp-fb:97 nack pli

        a=fmtp:97 sprop-maxcapturerate=48000;sprop-stereo=0

        a=ssrc:2876771208 msid:user3992408561@host-b8077b5 webrtctransceiver0

        a=ssrc:2876771208 cname:user3992408561@host-b8077b5

        a=mid:audio0

        a=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

        ```'
      operationId: RemoteRecorderAPI_WebRtcSdpOffer
      parameters:
      - name: remoteRecorderPublicId
        in: path
        required: true
        schema:
          type: string
          format: guid
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema: {}
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebRtcSdpOfferPostData'
components:
  schemas:
    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: '#/components/schemas/QualitySettings'
        SecondaryQualitySettings:
          $ref: '#/components/schemas/QualitySettings'
        Configuration:
          $ref: '#/components/schemas/RemoteRecorderConfiguration'
    WebRtcConnectPostData:
      type: object
      required:
      - OperationType
      properties:
        OperationType:
          $ref: '#/components/schemas/WebRtcConnectOperationType'
    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
    RemoteRecorderError:
      type: object
      required:
      - Severity
      - ErrorType
      - ErrorCode
      properties:
        Severity:
          description: Error severity, must be a value other than Invalid
          $ref: '#/components/schemas/RemoteRecorderErrorSeverity'
        ErrorType:
          description: Error category, must be a value other than Invalid
          $ref: '#/components/schemas/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
    RemoteRecorderURLType:
      type: string
      description: ''
      x-enumNames:
      - Management
      - PrimaryPreview
      - SecondaryPreview
      - Support
      - SecondaryPreview2
      - SecondaryPreview3
      - SecondaryPreview4
      enum:
      - Management
      - PrimaryPreview
      - SecondaryPreview
      - Support
      - SecondaryPreview2
      - SecondaryPreview3
      - SecondaryPreview4
    WebRtcEventType:
      type: string
      description: ''
      x-enumNames:
      - Unknown
      - IceCandidate
      - SdpAnswer
      - TemporaryFailure
      - PermanentFailure
      enum:
      - Unknown
      - IceCandidate
      - SdpAnswer
      - TemporaryFailure
      - PermanentFailure
    RemoteRecorderPauseRecordingRequest:
      type: object
      required:
      - PauseRecordingTime
      properties:
        PauseRecordingTime:
          type: number
          description: Pause recording time in UTC file time seconds
          format: double
    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
    DeviceDescriptionWithPreview:
      type: object
      properties:
        Device:
          $ref: '#/components/schemas/Device'
        Preview:
          $ref: '#/components/schemas/RemoteRecorderDevicePreview'
    DeviceType:
      type: string
      description: ''
      x-enumNames:
      - Unknown
      - Audio
      - Video
      - AudioVideo
      enum:
      - Unknown
      - Audio
      - Video
      - AudioVideo
    RemoteRecorderState:
      type: string
      description: ''
      x-enumNames:
      - Stopped
      - Previewing
      - Recording
      - Paused
      - Faulted
      - Disconnected
      - RecorderRunning
      enum:
      - Stopped
      - Previewing
      - Recording
      - Paused
      - Faulted
      - Disconnected
      - RecorderRunning
    WebRtcIceCandidate:
      type: object
      required:
      - Index
      properties:
        Candidate:
          type: string
        Index:
          type: integer
    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
    WebRtcEvent:
      type: object
      required:
      - EventType
      properties:
        EventType:
          $ref: '#/components/schemas/WebRtcEventType'
        Payload:
          type: string
    RemoteRecorderResumeRecordingRequest:
      type: object
      required:
      - ResumeRecordingTime
      properties:
        ResumeRecordingTime:
          type: number
          description: Resume recording time in UTC file time seconds
          format: double
    APIError:
      type: object
      properties:
        Error:
          description: Error result returned if an error occurs in Panopto, otherwise null or missing
          $ref: '#/components/schemas/APIErrorInternal'
    RemoteRecorderSchedule:
      allOf:
      - $ref: '#/components/schemas/APIError'
      - type: object
        required:
        - ScheduleId
        - ServerTime
        properties:
          ScheduleId:
            type: string
            format: guid
          ServerTime:
            type: number
            format: double
          Recordings:
            type: array
            items:
              $ref: '#/components/schemas/RemoteRecorderScheduledRecording'
    RemoteRecorderHeartbeatData:
      type: object
      required:
      - State
      - DiskSpaceFreeMegabytes
      - LiveMonitoringBlocked
      properties:
        State:
          $ref: '#/components/schemas/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: '#/components/schemas/DeviceDescriptionWithPreview'
        LiveMonitoringBlocked:
          type: boolean
          description: If supported, whether or not live audio monitoring is currently blocked.
    RemoteRecorderRegistrationResponse:
      allOf:
      - $ref: '#/components/schemas/APIError'
      - type: object
        required:
        - RemoteRecorderPublicId
        - ClientKey
        properties:
          RemoteRecorderPublicId:
            type: string
            format: guid
          ClientKey:
            type: string
            format: guid
          ClientSecret:
            type: string
    Device:
      type: object
      required:
      - Type
      properties:
        DeviceId:
          type: string
        Name:
          type: string
        Type:
          $ref: '#/components/schemas/DeviceType'
    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
    RemoteRecorderExtendedConfiguration:
      type: object
      required:
      - AudioHistogramModeType
      properties:
        SecondsToUseNextRecordingTemplate:
          type: number
          description: The number of seconds prior to the start of the next scheduled recording to apply the recording's template configurations.
          format: double
        SecondsToDeleteRecordingAfterUpload:
          type: number
          description: The number of seconds to retain the recording on the client after successful upload of the recording
          format: double
        ServerTime:
          type: number
          description: The server time in UTC file seconds
          format: double
        AudioHistogramModeType:
          description: Preferred audio histogram type
          $ref: '#/components/schemas/RemoteRecorderAudioHistogramType'
    RemoteRecorderURLsUpdateRequest:
      type: object
      properties:
        URLs:
          type: array
          items:
            $ref: '#/components/schemas/RemoteRecorderURL'
    RemoteRecorderErrorType:
      type: string
      description: ''
      x-enumNames:
      - Invalid
      - General
      - Device
      - Network
      - Storage
      enum:
      - Invalid
      - General
      - Device
      - Network
      - Storage
    WebRtcSdpOfferPostData:
      type: object
      properties:
        SessionDescription:
          type: string
          description: The session description document, as defined by the Session Description Protocol (SDP) standard.
    RemoteRecorderErrorSeverity:
      type: string
      description: ''
      x-enumNames:
      - Invalid
      - Critical
      - Error
      - Warning
      enum:
      - Invalid
      - Critical
      - Error
      - Warning
    RemoteRecorderHeartbeatResponse:
      allOf:
      - $ref: '#/components/schemas/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: '#/components/schemas/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\nshould NOT perform live monitoring.  This object has 2 fields:\n  \n'Mode': The type of live monitoring to perform.\n\n'Id': This is a string id.  If this string changes, then the Remote Recorder needs to shut down\n    its existing WebRTC session (if there is one) and negotiate a new one."
            $ref: '#/components/schemas/LiveMonitoringHeartbeatResponseData'
          DefaultFolder:
            type: string
            format: guid
          DefaultPrimaryQualitySettings:
            $ref: '#/components/schemas/QualitySettings'
          DefaultSecondaryQualitySettings:
            $ref: '#/compo

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