diff --git a/src/PepperDash.Essentials.Devices.Common/Recording/ICourtSession.cs b/src/PepperDash.Essentials.Devices.Common/Recording/ICourtSession.cs
new file mode 100644
index 00000000..b2096b30
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Recording/ICourtSession.cs
@@ -0,0 +1,172 @@
+using System;
+using System.Collections.Generic;
+using PepperDash.Essentials.Core;
+
+namespace PepperDash.Essentials.Plugin
+{
+ ///
+ /// Defines the contract for court session management including
+ /// session lifecycle, recording control, case management, and status feedback.
+ ///
+ public interface ICourtSession
+ {
+ #region Session Lifecycle
+
+ ///
+ /// Create a new court session with the given title.
+ ///
+ bool CreateCourtSession(string title);
+
+ ///
+ /// Get the active court session payload and cache it locally.
+ ///
+ bool GetActiveCourtSession();
+
+ ///
+ /// Check whether an active court session exists.
+ ///
+ bool HasActiveCourtSession();
+
+ ///
+ /// Edit the active court session title.
+ ///
+ bool EditCourtSessionTitle(string title);
+
+ ///
+ /// Close the active court session.
+ ///
+ bool CloseCourtSession();
+
+ ///
+ /// Force close the active court session.
+ ///
+ bool ForceCloseCourtSession();
+
+ #endregion
+
+ #region Recording Control
+
+ ///
+ /// Start recording the active court session.
+ ///
+ bool StartRecording();
+
+ ///
+ /// Stop the current recording.
+ ///
+ bool StopRecording();
+
+ ///
+ /// Seal the current recording (protect/read-only).
+ ///
+ bool Seal();
+
+ ///
+ /// Unseal the current recording.
+ ///
+ bool Unseal();
+
+ ///
+ /// Get the current recording status from the API.
+ ///
+ bool GetRecordingStatus();
+
+ ///
+ /// Get the current seal status from the API.
+ ///
+ bool GetSealStatus();
+
+ #endregion
+
+
+
+
+ #region Status
+
+ ///
+ /// Get current session information (case ID and name).
+ ///
+ Dictionary GetCurrentSessionInfo();
+
+
+ ///
+ /// Get the activation status from the API.
+ ///
+ bool GetActivationStatus();
+
+ #endregion
+
+ #region Feedbacks
+
+ ///
+ /// True when currently recording.
+ ///
+ BoolFeedback IsRecording { get; }
+
+ ///
+ /// True when the recording is sealed.
+ ///
+ BoolFeedback IsSealed { get; }
+
+ ///
+ /// Recording duration in milliseconds.
+ ///
+ StringFeedback RecordingDurationMs { get; }
+
+ ///
+ /// Recording duration formatted as HH:MM:SS.
+ ///
+ StringFeedback RecordingDurationFormatted { get; }
+
+ ///
+ /// Current case ID for the active session.
+ ///
+ StringFeedback CurrentCaseId { get; }
+
+ ///
+ /// Current case name for the active session.
+ ///
+ StringFeedback CurrentCaseName { get; }
+
+ ///
+ /// Current recording session state (Idle, Recording, Sealed, Disconnected, Error).
+ ///
+ StringFeedback CurrentState { get; }
+
+ ///
+ /// Error message if session is in error state.
+ ///
+ StringFeedback ErrorMessage { get; }
+
+ ///
+ /// API heartbeat counter for diagnostics.
+ ///
+ IntFeedback HeartbeatCounter { get; }
+
+ ///
+ /// True when CourtCapture reports an active court session.
+ ///
+ BoolFeedback HasActiveCourtSessionFeedback { get; }
+
+ ///
+ /// Last command result envelope as JSON string for UI binding.
+ ///
+ StringFeedback LastCommandResult { get; }
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Raised when case notes are updated.
+ ///
+ event EventHandler CaseNotesUpdated;
+
+ ///
+ /// Raised when quick links are updated.
+ ///
+ event EventHandler QuickLinksUpdated;
+
+ #endregion
+ }
+}