/api/session/sessions
List the caller's sessions
/api/session/sessions
Validates the request and records the session with desired state RUNNING; placement and start happen in the reconciler. Poll ``.../status`` for progress. Launch negotiation failures are typed problems (``launch-config-required``, ``egress-selection-required``, ``rdp-client-required``) carrying the options to choose from.
/api/session/sessions/{session_id}/execution-commands
Exactly one of ``command`` or ``exec``. ``command`` names an entry of the image's exec configs; ``url`` is required for ``go`` and, when given, must be a URL. ``exec`` is a free-form command and requires the sessions-modify scope. Runs now against a running container (``queued: false``); a session still starting, being placed or being resumed queues it and the reconciler runs it the moment the container is serving (``queued: true``). A paused or stopped session is a 409.
/api/session/sessions/{session_id}/lifecycle-commands
Records the new desired state (202); the reconciler converges the placement. Stop and pause are subject to the owner's group settings.
/api/session/sessions/{session_id}/keepalives
Pushes the expiration out by the keepalive interval. Not promoted when a session time limit applies or the owner's usage allowance is spent (``usage_reached``).
/api/session/sessions/{session_id}
Records desired state DELETED (202); the reconciler tears the placement down and the row is removed once it is gone. Deleting a session already being deleted is a success.
/api/session/sessions/{session_id}/status
The caller's own session, or any session with the sessions-view scope (the way an API key reads one).
/api/session/sessions/{session_id}/connection
nginx ``auth_request`` target. Reads the browser's request from ``X-Original-URI`` and answers with headers only: ``connect_hostname``, ``connect_port``, ``connect_path``, ``connect_schema``, ``connect_auth`` and ``connect_session_id``.
/api/session/sessions/{session_id}/screenshot
Returns raw ``image/jpeg`` bytes, not JSON.
/api/session/sessions/{session_id}/frame-stats
Get KasmVNC frame statistics for a session
/api/session/sessions/{session_id}/bottleneck-stats
Get KasmVNC bottleneck statistics for a session
/api/session/sessions/{session_id}/system-stats
Get system statistics for a session
/api/session/sessions/{session_id}/viewers
List the viewers connected to a session
/api/session/sessions/{session_id}/browser-logins
Mints a new login-session JWT for the session's owner and returns it with the browser ``connect_url``. An authenticated user may call it for their own session (someone else's is 404); an API key needs ``USERS_AUTH_SESSION``. Every call persists a new revocable session token. Status polling never carries credentials; this is the explicit credential-producing operation.
/api/session/sessions/{session_id}/shares
Create a share link for a session
/api/session/sessions/{session_id}/shares
List the share links of a session
/api/session/sessions/{session_id}/shares/{share_id}
Revoke a share link and every viewer it admitted
/api/session/sessions/{session_id}/permissions
List the viewer permissions on a session
/api/session/sessions/{session_id}/permissions
Sets the access level for all of the session's participants. `access` is required.
/api/session/sessions/{session_id}/permissions
Remove every viewer permission from a session
/api/session/sessions/{session_id}/permission-batches
Grant or update viewer permissions for a batch of users (all or nothing)
/api/session/sessions/{session_id}/permission-revocations
Revoke viewer permissions for a batch of users (all or nothing)
/api/session/recent-sessions
Not scoped to the caller. A share id is the capability; the response says which of the supplied ids still name a live shared session.
/api/session/shares/{share_id}/participants
A user joins as themselves and gets the participant view. An API key holding ``USERS_AUTH_SESSION`` is admitted as a new anonymous participant and also gets that identity's ``user_id``, ``username``, login JWT (``session_token``) and browser ``connect_url``. Anonymous admission accepts an optional ``Idempotency-Key`` header: when supplied, the same key replays the original participant and token, while a different request under a used key is 409. Without the header, every request creates a new anonymous participant. More anonymous users than ``auth.api_anonymous_creation_limit`` per hour is 429.
/api/session/persistent-profiles
List the caller's persistent profiles
/api/session/persistent-profiles/{profile_id}/snapshots
List the snapshots of a persistent profile
/api/session/persistent-profiles/{profile_id}/restorations
Restore a persistent profile to a snapshot
/api/admin/session/sessions
List sessions
/api/admin/session/sessions/{session_id}
Get a session
/api/admin/session/sessions/{session_id}
Records desired state DELETED (202); the reconciler tears the placement down.
/api/admin/session/sessions/{session_id}/system-stats
Get system statistics for a session
/api/admin/session/sessions/{session_id}/recordings
Refused (400) when ``download_links=true`` but recording object storage credentials are not configured.
/api/admin/session/sessions/{session_id}/lifecycle-commands
Records the new desired state (202). An administrator may resume a session from any state; the reconciler converges whatever it finds.
/api/admin/session/session-deletions
Records desired state DELETED for each session on ``server_id`` (202). A session whose delete is refused is logged and left out of the response.
/api/admin/session/history-entries
Recording download links, when requested, are pre-signed URLs.
/api/admin/session/recordings
``?session_id=a&session_id=b``. Refused (400) when ``download_links=true`` but recording object storage credentials are not configured. Download links are pre-signed URLs; the response is never cached.