Welcome to the Panopto Community

Please note: All new registrants to the Panopto Community Forum must be approved by a forum moderator or admin. As such, if you navigate to a feature that is members-only, you may receive an error page if your registration has not yet been approved. We apologize for any inconvenience and are approving new members as quickly as possible.

Adhoc Recordings - Panopto-Q-SYS-Epiphan-API

Hi community,

our use-case is to provide a method for a adhoc recording, initialized from Q-SYS. As remote recorder we have registered an Epiphan Nano.

We are already able to call the Panopto API REST/SOAP and provide Q-SYS the link for the users folder where the recoring should be streamed to. And the Q-SYS can request Panopto information from that Panopto requesting web server.

But, if we start an adhoc recording via the Q-SYS-Panopto Plugin, it seems to start a recording which lasts many hours and we are not able to end it.

We would like to provide just 3 Buttons: Start, Stop/Pause, End -Recording

And provide an indicator if the recording is active and running.

Would you please tell us a best practise way to achieve it?

Best Regards

Paul

Answers

  • Hi Paul,

    To achieve this you would need to use combination of SOAP and REST API.

    • Start recording: use SOAP RemoteRecorderManagement.ScheduleRecording(...) (/PublicAPI/4.2/RemoteRecorderManagement.svc or /4.6/...) with start=now and a safe future end.
    • Stop/End recording: use SOAP RemoteRecorderManagement.UpdateRecordingTime(...) and set end=UtcNow (or UtcNow+15s buffer) to finalize cleanly.
    • Pause recording (optional): use REST /PublicAPI/4.1/Pause?sessionId=... to pause and /PublicAPI/4.1/PauseDuration?... to resume; validate this in your environment since it is Crestron-oriented.
    • Recording active indicator: poll SOAP ListRecorders / GetRemoteRecordersById and treat recorder State=Recording as active.

    I hope this helps.

    Thanks,

    Adis

  • Hi @Adis Hrnjica ,

    thanks a lot for your response.

    I have trouble to execute ScheduleRecording from 4.6/RemoteRecorderManagement.svc.

    Via SoapUI I always get an 500 Internal Server Error.

    → <faultstring xml:lang="en-US">An error occurred deserializing the message. See server logs for details</faultstring>

    How can I troubleshoot it?

    What is the format for start and end?

  • Hi Paul,

    Here's a SoapUI sample request for RemoteRecorderManagement.ScheduleRecording (v4.2):

    Endpoint URL:

    https://<your-panopto-server>/Panopto/PublicAPI/4.2/RemoteRecorderManagement.svc
    

    SOAPAction:

    http://tempuri.org/IRemoteRecorderManagement/ScheduleRecording
    

    Request Body:

    <soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:tem="http://tempuri.org/"
    xmlns:ser="http://schemas.datacontract.org/2004/07/Panopto.Server.Services.PublicAPI.V40"
    xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <soapenv:Header/>
    <soapenv:Body>
    <tem:ScheduleRecording>
    <!--Auth: use either UserKey+Password or AuthCode-->
    <tem:auth>
    <ser:AuthCode></ser:AuthCode>
    <ser:Password>your-password</ser:Password>
    <ser:UserKey>your-domain\username</ser:UserKey>
    </tem:auth>
    <!--Session name-->
    <tem:name>My Scheduled Recording</tem:name>
    <!--Target folder GUID-->
    <tem:folderId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</tem:folderId>
    <!--Webcast live?-->
    <tem:isBroadcast>false</tem:isBroadcast>
    <!--Start/End in UTC-->
    <tem:start>2026-03-27T14:00:00Z</tem:start>
    <tem:end>2026-03-27T15:00:00Z</tem:end>
    <!--One or more recorders-->
    <tem:recorderSettings>
    <ser:RecorderSettings>
    <ser:RecorderId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</ser:RecorderId>
    <ser:SuppressPrimary>false</ser:SuppressPrimary>
    <ser:SuppressSecondary>false</ser:SuppressSecondary>
    </ser:RecorderSettings>
    </tem:recorderSettings>
    </tem:ScheduleRecording>
    </soapenv:Body>
    </soapenv:Envelope>

    Expected Response (v4.2 returns ScheduledRecordingResult):

    <ScheduleRecordingResult>
    <ConflictsExist>false</ConflictsExist>
    <SessionIDs>
    <guid>new-session-guid-here</guid>
    </SessionIDs>
    <ConflictingSessions/>
    </ScheduleRecordingResult>

    Key notes:

    • Dates must be UTC — the service expects DateTime in UTC format
    • SuppressPrimary/SuppressSecondary — set to true to skip recording that video source on the remote recorder
    • You can include multiple <ser:RecorderSettings> elements to schedule across multiple recorders
    • If there are time conflicts on a recorder, ConflictsExist will be true and ConflictingSessions will list the conflicting sessions
    • For v4.6, use the same body but change the endpoint to /PublicAPI/4.6/RemoteRecorderManagement.svc

    I hope this helps.

    Thanks,

    Adis

  • Hi Adis,

    that helped very much!

    Now I'm able to schedule and manage recordings via SoapUI but I'm not able to request it via PHP-SoapClient.

    While my Soap requests works fine for GetPersonalFolderForUser from "SessionManagement-single.wsdl" I tried many, many ways for ScheduleRecording from RemoteRecorderManagement.wsdl but I always get back NULL

    Someone else experienced something like that?

Sign In or Register to comment.